<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8274187644747833387</id><updated>2024-09-01T21:12:35.008-07:00</updated><category term="How To"/><category term="News"/><category term="Feature"/><category term="Software"/><category term="Jobs"/><category term="Reviews"/><title type='text'>Linux Tomorrow</title><subtitle type='html'>We provide information about Linux . Let Support Linux for better future !!! Long live Open Source</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://linuxtomorrow.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-9170485284811815443</id><published>2008-09-28T11:37:00.001-07:00</published><updated>2008-09-29T11:48:42.391-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Feature"/><title type='text'>Easy essay with Standoutessay.com</title><content type='html'>&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify;&quot;&gt;Sometimes converting your ideas to paper can be really hard, ideas is very important but you will never get excellent essay if you not doing any deep research on it and beside that you need good writing instinct to make your essay more interesting to read, what the point you have great essay if there is no one read. So the point is if you have more time or you are experience writer you can make good essay, but if you not have two things above, just try professional custom writing.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify;&quot;&gt;Why must use professional custom writing? Off course for better result, you don’t want to get bad grade on essay don’t you ? They have better experience on writing and would be doing research for essay or paper to get better result. Manny custom writing company this day but there is some company that has good reputation and one of them Is standoutessay.com, you can &lt;a href=&quot;http://www.standoutessay.com/buy-essays&quot;&gt;order essay online&lt;/a&gt; at this website. Why I like this company more than other is because they can make their essay writing similar like yours, not too over quality, but a bit better. They also give &lt;a href=&quot;http://www.standoutessay.com/&quot;&gt;essay editing service&lt;/a&gt;, if you have writing essay and feel it need more improvement you can use their services.&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify;&quot;&gt;Their custom writing also &lt;a href=&quot;http://www.standoutessay.com/&quot;&gt;free essay&lt;/a&gt; plagiarism 100%, this mean you don’t need to worry there is any copy of your essay in the world, except you and off course standoutessay.com. Well what are you waiting for ? Just bring your ideas to standoutessay.com and get your excellent essay.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9170485284811815443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9170485284811815443'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/09/easy-essay-with-standoutessaycom.html' title='Easy essay with Standoutessay.com'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2246470088619841249</id><published>2008-09-27T10:33:00.000-07:00</published><updated>2008-09-29T10:38:07.980-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Feature"/><title type='text'>Custom-essay.org make your essay easier</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot; class=&quot;MsoNormal&quot;&gt;Writing essay always difficult task, even for professional, you need&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;to doing some research before you can write good and excellent essay and that can wasting your time especially when your time is limited and there is another top priority task or activity you need to finish and also if your essay is &lt;a href=&quot;http://custom-essay.org/custom-term-paper-writing&quot;&gt;term paper&lt;/a&gt;, its little difficult to finish, you need to know the topic very well and it’s also usually has short deadline. So you need some professional essay writing, yup you need hire a professional essay writer to make excellent essay. Well if you try to find the best one, I recommend you custom-essay.org&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;  &lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot; class=&quot;MsoNormal&quot;&gt;Custom-essay.org is one of many places where you can &lt;span style=&quot;color: red;&quot;&gt;&lt;a href=&quot;http://custom-essay.org/blog/2008/03/27/5-reasons-to-buy-online-essays/&quot;&gt;buy an essay online&lt;/a&gt;&lt;/span&gt;, but what make them different from another company? Because they begin their custom essay writing from school until universities, so they has many experience as custom essay writers, you don’t need to worry about the quality of their essay.&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;  &lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot; class=&quot;MsoNormal&quot;&gt;Their job is excellent you don’t need to worry that you would find another copy of your essay out there except you give them because they don’t resold your essay and your essay are original because they has zero tolerance policy for plagiarized paper and you can check by yourself. So if you want the best place to&lt;a href=&quot;http://custom-essay.org/blog/2007/10/01/reasons-to-buy-a-college-essay/&quot;&gt; buy essays&lt;/a&gt; &lt;span style=&quot;&quot;&gt; &lt;/span&gt;just visiting Custom-essay.org &lt;span style=&quot;&quot;&gt; &lt;/span&gt;for the first step and find how excellent their work .&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;  &lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot; class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2246470088619841249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2246470088619841249'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/09/custom-essayorg-make-your-essay-easier.html' title='Custom-essay.org make your essay easier'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4993705823211817829</id><published>2008-07-25T02:09:00.000-07:00</published><updated>2008-12-10T10:18:38.998-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reviews"/><title type='text'>Zenni Optical Review</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-xFpjRnN5A6oBuWH8z_MB1U_Lc5qNRrKU8H6LrkWw90SlMKF5bijb0HkQXEQ-HuTcLb97JMryaZHOVuihDNVcHPmUiInuVj0uXe7SVN6utLy-4Ufkavu2Tzmg0MRqqCN8qiCHTFUady4/s1600-h/zenniOP.JPG&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 433px; height: 230px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-xFpjRnN5A6oBuWH8z_MB1U_Lc5qNRrKU8H6LrkWw90SlMKF5bijb0HkQXEQ-HuTcLb97JMryaZHOVuihDNVcHPmUiInuVj0uXe7SVN6utLy-4Ufkavu2Tzmg0MRqqCN8qiCHTFUady4/s400/zenniOP.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5227628367640454178&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;If you’re looking for new stylish glasses not like common old glasses , maybe bit difficult. Because not many shop even online shop that sell that kind of glasses. If you search trough internet you will find the resuly but to find the best and suite to your taste, you must to surf their website one by one until you find one. Well, if you want the fastest way just visit zennioptical.com.  &lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: justify;&quot;&gt;Zennioptical.com offers many and great design of glasses like &lt;a href=&quot;http://zennioptical.com/cart/home.php?cat=29&quot;&gt;Incredible Stylish New Frames From Zenni&lt;/a&gt;. The price at zennioptical also competitive like this one, &lt;a href=&quot;http://zennioptical.com/cart/home.php&quot;&gt;Zenni Optical $ 8 Rx Eyeglasses&lt;/a&gt;, how do you think ? &lt;a href=&quot;http://www.myfoxwghp.com/myfox/pages/Home/Detail;jsessionid=7AC86B4EE9EEC0FA4750BC35C68C8A25?contentId=5835241&amp;amp;version=3&amp;amp;locale=EN-US&amp;amp;layoutCode=VSTY&amp;amp;pageId=1.1.1&amp;amp;sflg=1&quot;&gt;Zenni Optical was on FOX news!&lt;/a&gt; This prove that zenni optical is famous and well known among glasses shop around the world&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4993705823211817829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4993705823211817829'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/zenni-optical-review.html' title='Zenni Optical Review'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-xFpjRnN5A6oBuWH8z_MB1U_Lc5qNRrKU8H6LrkWw90SlMKF5bijb0HkQXEQ-HuTcLb97JMryaZHOVuihDNVcHPmUiInuVj0uXe7SVN6utLy-4Ufkavu2Tzmg0MRqqCN8qiCHTFUady4/s72-c/zenniOP.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-5296994719743100190</id><published>2008-07-16T04:59:00.000-07:00</published><updated>2008-07-16T05:01:59.517-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Feature"/><title type='text'>Quick Payday Loans</title><content type='html'>One day my brother Joe called to me and said that he needs some time to talk to me in private. So I tell him to come over and tell me what’s wrong. So after he arrived he said that he needs my help and asked me to lend him some money to pay his car fines from impound. He barely has any cash at all till the end of the month, and he needs his car for his daily job. He promised me that he would pay me back first thing after he received his paycheck next month. I soon see his problem, but not that don’t want to help my brother Joe, but right now I’m in some short of myself so I can’t help him by my own hand.&lt;br /&gt;&lt;br /&gt;But however, I might be able to help him in other way. I tell him about cash advanced and payday loans. Cash advance or payday loans is a short terms loans backed by your paycheck. It’s so easy to get it. No faxes and no hassles. It usually only requires that you’re 18 years of age, have a regular source of income, receive at least $1000/month, and have direct deposit in your bank account. They money will be transferred right in your checking or saving bank accounts once you’re approved. It’s so easy to get a quick  &lt;a href=&quot;http://www.personalcashadvance.com&quot;&gt;quick payday loans&lt;/a&gt;. So after he hears my explanation he rushed back to his house to apply his first payday loans.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5296994719743100190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/5296994719743100190'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/quick-payday-loans.html' title='Quick Payday Loans'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1830353178535405423</id><published>2008-07-16T04:50:00.003-07:00</published><updated>2008-07-16T05:46:05.359-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Feature"/><title type='text'>Insurance Portal Online</title><content type='html'>To find any insurance policies that can cover you is not so difficult to find. Today’s there are so many insurance offers comes right in our front doors or mails. You should never find any difficulties to find insurance policies, whether it’s life insurance, auto insurance, education insurance, even disability insurance. You can find it anywhere. And along came the internet era there goes also the insurance industry. Many of the insurance providers are aware by the power of this new media and take advantage on it. You can find so many insurance policies offers online almost everyday.&lt;br /&gt;&lt;br /&gt;But perhaps finding any insurance policies is not an issue anymore, since you can easily finds it anywhere, but the essential issues right now maybe, among so many offers that comes to our mails everyday, how can we find the right insurance policies that suits us the best? With so many different offers and different terms that come to our mail, sometimes we find it difficult for us to decide which one that would suit us the best. But I would like to recommend you with a great &lt;a href=&quot;http://www.insurancerate.com&quot;&gt;insurance online&lt;/a&gt;  portal that can help you decide which insurance policies that suit you the best, if you should ever need one. You get your free quote in any insurance types that you would like to know for free. With their help, I hope; that you shouldn’t find any difficulties in finding one.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1830353178535405423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1830353178535405423'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/to-find-any-insurance-policies-that-can.html' title='Insurance Portal Online'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-474837514437632235</id><published>2008-07-05T05:35:00.000-07:00</published><updated>2008-07-07T06:01:34.141-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reviews"/><title type='text'>Farsi Translation Online</title><content type='html'>You want to &lt;a href=&quot;http://www.iaflindia.com/&quot;&gt;Farsi translation&lt;/a&gt; ? Farsi language is pretty complex language, if you try to find people to translate that will be difficult, even if you try to find it trough internet, there is not many translation online for the language, the other reason is about the grammar and vocabulary, pronounce and letters, even if you studied this language it&#39;s will be difficult.&lt;br /&gt;&lt;br /&gt;Now if you find direct to search engine you may found people who offers  for this service, but how about their work, how good their translation ? There is one company you can trusted, my friend use to doing &lt;a href=&quot;http://www.iaflindia.com/&quot;&gt;Hindi translation&lt;/a&gt;, and the result is amazing they give their best, the best &lt;a href=&quot;http://www.iaflindia.com/&quot;&gt;India translation&lt;/a&gt; my friend ever get he said that, even Hindi is one of difficult language in the world, they can made it perfectly,  and also they offers a Farsi translation the best one at translation business online in the world, just go to iaflindia.com beside that language above they also the best one in &lt;a href=&quot;http://www.iaflindia.com/&quot;&gt;Arabic translation&lt;/a&gt;. So what you waiting for just go to their website and give them your article that want to translate to Farsi language. They will respond you very quick and also they give it without quote, this is may be the best offers you can get on the net.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/474837514437632235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/474837514437632235'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/07/farsi-translation-online.html' title='Farsi Translation Online'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1484216187125124818</id><published>2008-05-02T00:55:00.001-07:00</published><updated>2008-05-02T00:58:00.748-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>Upgrade Your Desktop From Mandriva One 2008.0 To Mandriva One 2008.1 (Spring)</title><content type='html'>&lt;p&gt;Author :  Author: Oliver Meyer &lt;o&gt;&lt;/o&gt;&lt;/p&gt;This document describes how to upgrade your desktop from Mandriva One 2008.0 to Mandriva One 2008.1 via online upgrade. &lt;p&gt;This howto is a practical guide without any warranty - it doesn&#39;t cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 Preparation&lt;/h3&gt; &lt;p&gt;Install the latest updates on the 2008.0 system to prevent problems related to the upgrade that we&#39;ll accomplish in a few moments. Please note, that the Mandriva One 2008.1 Spring install/live media has no upgrade mechanism - so we have to run an online upgrade which is not riskless. You should back up all important data before you proceed. Please close all running applications, open a terminal and switch to the root account.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;su -&lt;br /&gt;%root_password%&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 Old Repositories&lt;/h3&gt; &lt;p&gt;First delete all existing repositories.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;urpmi.removemedia -a&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;3 New Repositories&lt;/h3&gt; &lt;p&gt;Now we add the repositories for the 2008.1 system.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;urpmi.addmedia --distrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586&lt;br /&gt;urpmi.addmedia --distrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/plf/mandriva/cfg/2008.1/i586&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;4 Upgrade&lt;/h3&gt; &lt;p&gt;Next we start the upgrade process.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;urpmi --auto-update -v&lt;/p&gt; &lt;p&gt;At the beginning there&#39;ll be only a few packages upgraded (urpmi, rpm...) - later, when the needed upgrades for the rest of the upgrade have been installed, the system will upgrade about 1220 packages. During the upgrade you&#39;ll be asked a few questions, for example which icon set you want to use for OpenOffice or which Java version you want to use - choose your preferred settings/packages and proceed. The upgrade will take a while - so be patient. Sometimes it can happen that the upgrade process stops (while downloading packages) - simply abort it via &quot;&lt;span class=&quot;system&quot;&gt;CTRL+C&lt;/span&gt;&quot; (&quot;&lt;span class=&quot;system&quot;&gt;STRG+C&lt;/span&gt;&quot; for german users) and start it again (&lt;span class=&quot;system&quot;&gt;urpmi --auto-update -v&lt;/span&gt;), it&#39;ll resume where it stopped before. When the upgrade is finished reboot into your new 2008.1 system.&lt;/p&gt; &lt;p&gt;Please note that the grub entry still says &quot;2008.0&quot; - edit it if you want.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;5 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Mandriva: &lt;a title=&quot;http://www.mandriva.com/&quot; target=&quot;_blank&quot; href=&quot;http://www.mandriva.com/&quot;&gt;http://www.mandriva.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class=&quot;copyright-footer&quot;&gt;Copyright © 2008 Oliver Meyer&lt;br /&gt;All Rights Reserved. &lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1484216187125124818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1484216187125124818'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/upgrade-your-desktop-from-mandriva-one.html' title='Upgrade Your Desktop From Mandriva One 2008.0 To Mandriva One 2008.1 (Spring)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7173327316153119042</id><published>2008-05-01T12:37:00.000-07:00</published><updated>2008-05-02T23:57:12.065-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06</title><content type='html'>&lt;h3 style=&quot;font-weight: normal;&quot;&gt;Author : Rocky&lt;/h3&gt;&lt;h3&gt;10 Install and Configure SPF&lt;/h3&gt; &lt;p&gt;The &lt;span class=&quot;system&quot;&gt;postfix-policyd-spf-perl&lt;/span&gt; package depends on the &lt;span class=&quot;system&quot;&gt;Mail::SPF&lt;/span&gt; and the &lt;span class=&quot;system&quot;&gt;NetAddr::IP&lt;/span&gt; Perl modules.&lt;/p&gt; &lt;p&gt;We need to download &lt;span class=&quot;system&quot;&gt;postfix-policyd-spf-perl&lt;/span&gt; from &lt;a href=&quot;http://www.openspf.org/Software&quot; target=&quot;_blank&quot;&gt;http://www.openspf.org/Software&lt;/a&gt; to the &lt;span class=&quot;system&quot;&gt;/usr/src/&lt;/span&gt; directory and install it to the &lt;span class=&quot;system&quot;&gt;/usr/lib/postfix/&lt;/span&gt; directory like this:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /usr/src&lt;br /&gt;wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.005.tar.gz&lt;br /&gt;tar xvfz postfix-policyd-spf-perl-2.005.tar.gz&lt;br /&gt;cd postfix-policyd-spf-perl-2.005&lt;br /&gt;cp postfix-policyd-spf-perl /usr/lib/postfix/policyd-spf-perl&lt;/p&gt; &lt;p&gt;Then we edit &lt;span class=&quot;system&quot;&gt;/etc/postfix/master.cf&lt;/span&gt; and add the following stanza at the end:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/master.cf&lt;/p&gt; &lt;pre&gt;policy unix - n n - - spawn&lt;br /&gt;user=nobody argv=/usr/bin/perl /usr/lib/postfix/policyd-spf-perl&lt;/pre&gt; &lt;p&gt;(The leading spaces before &lt;span class=&quot;system&quot;&gt;user=nobody&lt;/span&gt; are important so that Postfix knows that this line belongs to the previous one!)&lt;/p&gt; &lt;p&gt;Then open &lt;span class=&quot;system&quot;&gt;/etc/postfix/main.cf&lt;/span&gt; and search for the &lt;span class=&quot;system&quot;&gt;smtpd_recipient_restrictions&lt;/span&gt; directive. You should have &lt;span class=&quot;system&quot;&gt;reject_unauth_destination&lt;/span&gt; in that directive, and right after &lt;span class=&quot;system&quot;&gt;reject_unauth_destination&lt;/span&gt; you add &lt;span class=&quot;system&quot;&gt;check_policy_service unix:private/policy&lt;/span&gt; like this:&lt;/p&gt;&lt;p class=&quot;command&quot;&gt;vi /etc/postfix/main.cf&lt;/p&gt; &lt;pre&gt;[...]&lt;br /&gt;smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,check_policy_service unix:private/policy&lt;br /&gt;[...]&lt;/pre&gt; &lt;p&gt;or like this:&lt;/p&gt; &lt;pre&gt;[...]&lt;br /&gt;smtpd_recipient_restrictions =&lt;br /&gt;[...]&lt;br /&gt;reject_unauth_destination&lt;br /&gt;check_policy_service unix:private/policy&lt;br /&gt;[...]&lt;/pre&gt; &lt;p&gt;It is important that you specify &lt;span class=&quot;system&quot;&gt;check_policy_service&lt;/span&gt; AFTER &lt;span class=&quot;system&quot;&gt;reject_unauth_destination&lt;/span&gt; or else your system can become an open relay!&lt;/p&gt; &lt;p&gt;Then restart Postfix:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/postfix restart&lt;/p&gt; &lt;p&gt;That&#39;s it already.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;11 Install and Configure FuzzyOcr&lt;/h3&gt; &lt;p class=&quot;command&quot;&gt;apt-get install netpbm gifsicle libungif-bin gocr ocrad libstring-approx-perl libmldbm-sync-perl imagemagick tesseract-ocr&lt;/p&gt; &lt;p&gt;Download and install the latest FuzzyOCR devel version from &lt;a href=&quot;http://fuzzyocr.own-hero.net/wiki/Downloads&quot; target=&quot;_blank&quot;&gt;http://fuzzyocr.own-hero.net/wiki/Downloads&lt;/a&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /usr/src/&lt;br /&gt;wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz&lt;/p&gt; &lt;p&gt;Unpack FuzzyOCR and move all &lt;span class=&quot;system&quot;&gt;FuzzyOcr*&lt;/span&gt; files and the FuzzyOcr directory (they are all in the &lt;span class=&quot;system&quot;&gt;FuzzyOcr-3.5.1/&lt;/span&gt; directory) to &lt;span class=&quot;system&quot;&gt;/etc/mail/spamassassin&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;tar xvfz fuzzyocr-3.5.1-devel.tar.gz&lt;br /&gt;cd FuzzyOcr-3.5.1/&lt;br /&gt;mv FuzzyOcr* /etc/mail/spamassassin/&lt;br /&gt;wget http://www.gbnetwork.co.uk/mailscanner/FuzzyOcr.words -O /etc/mail/spamassassin/FuzzyOcr.words&lt;/p&gt; &lt;p&gt;We will be storing the image hashes in a mysql database to improve on performance such that images that we have already scanned do not get scanned again as OCR is a resource intense activity.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.1 Create MySQL Database&lt;/h4&gt; &lt;p&gt;The sql script creates the database and tables and adds a user &lt;span class=&quot;system&quot;&gt;fuzzyocr&lt;/span&gt; with the password &lt;span class=&quot;system&quot;&gt;fuzzyocr&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql -p &lt; /etc/mail/spamassassin/FuzzyOcr.mysql&lt;/p&gt; &lt;p&gt;Change the password:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysqladmin -u fuzzyocr -p fuzzyocr newpassword&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.2 MailWatch Fix&lt;/h4&gt; &lt;p&gt;Do the following to prevent an error in MailWatch:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/mail/spamassassin/FuzzyOcr.pm&lt;/p&gt; &lt;p&gt;Change &#39;use POSIX;&#39; to &#39;use POSIX qw(SIGTERM);&#39;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.3 FuzzyOcr Configuration&lt;/h4&gt; &lt;p&gt;FuzzyOCR&#39;s configuration file is /etc/mail/spamassassin/FuzzyOcr.cf. In that file almost everything is commented out. We open that file now and make some modifications:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/mail/spamassassin/FuzzyOcr.cf&lt;/p&gt; &lt;p&gt;Put the following line into it to define the location of FuzzyOCR&#39;s spam words file:&lt;/p&gt; &lt;pre&gt;focr_global_wordlist /etc/mail/spamassassin/FuzzyOcr.words&lt;/pre&gt; &lt;p&gt;&lt;span class=&quot;system&quot;&gt;/etc/mail/spamassassin/FuzzyOcr.words&lt;/span&gt; is a predefined word list that comes with FuzzyOCR. You can adjust it to your needs.&lt;/p&gt; &lt;p&gt;Next change:&lt;/p&gt; &lt;pre&gt;# Include additional scanner/preprocessor commands here:&lt;br /&gt;#&lt;br /&gt;focr_bin_helper pnmnorm, pnminvert, pamthreshold, ppmtopgm, pamtopnm&lt;br /&gt;focr_bin_helper tesseract&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;# Include additional scanner/preprocessor commands here:&lt;br /&gt;#&lt;br /&gt;focr_bin_helper pnmnorm, pnminvert, convert, ppmtopgm, tesseract&lt;/pre&gt; &lt;p&gt;Finally add/enable the following lines:&lt;/p&gt; &lt;pre&gt;# Search path for locating helper applications&lt;br /&gt;focr_path_bin /usr/local/netpbm/bin:/usr/local/bin:/usr/bin&lt;br /&gt;&lt;br /&gt;focr_preprocessor_file /etc/mail/spamassassin/FuzzyOcr.preps&lt;br /&gt;focr_scanset_file /etc/mail/spamassassin/FuzzyOcr.scansets&lt;br /&gt;&lt;br /&gt;focr_digest_db /etc/mail/spamassassin/FuzzyOcr.hashdb&lt;br /&gt;focr_db_hash /etc/mail/spamassassin/FuzzyOcr.db&lt;br /&gt;focr_db_safe /etc/mail/spamassassin/FuzzyOcr.safe.db&lt;br /&gt;focr_minimal_scanset 1&lt;br /&gt;focr_autosort_scanset 1&lt;br /&gt;focr_enable_image_hashing 3&lt;br /&gt;focr_logfile /var/log/FuzzyOcr.log&lt;br /&gt;&lt;br /&gt;#Mysql Connection#&lt;br /&gt;focr_mysql_db FuzzyOcr&lt;br /&gt;focr_mysql_hash Hash&lt;br /&gt;focr_mysql_safe Safe&lt;br /&gt;focr_mysql_user fuzzyocr&lt;br /&gt;focr_mysql_pass password&lt;br /&gt;focr_mysql_host localhost&lt;br /&gt;focr_mysql_port 3306&lt;br /&gt;focr_mysql_socket /var/run/mysqld/mysqld.sock&lt;/pre&gt; &lt;p&gt;This is what the FuzzyOCR developers say about image hashing:&lt;/p&gt; &lt;p&gt;&quot;The Image hashing database feature allows the plugin to store a vector of image features to a database, so it knows this image when it arrives a second time (and therefore does not need to scan it again). The special thing about this function is that it also recognizes the image again if it was changed slightly (which is done by spammers). &quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;11.4 Test FuzzyOCR&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;cd /usr/src/FuzzyOcr-3.5.1/samples&lt;br /&gt;spamassassin --debug FuzzyOcr &lt;&gt; /dev/null&lt;/p&gt; &lt;p&gt;You see the following:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;[14808] info: FuzzyOcr: Found Score &lt;9.000&gt; for Exact Image Hash&lt;br /&gt;[14808] info: FuzzyOcr: Matched [1] time(s). Prev match: 16 sec. ago&lt;br /&gt;[14808] info: FuzzyOcr: Message is SPAM. Words found:&lt;br /&gt;[14808] info: FuzzyOcr: &quot;price&quot; in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: &quot;company&quot; in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: &quot;alert&quot; in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: &quot;news&quot; in 1 lines&lt;br /&gt;[14808] info: FuzzyOcr: (6 word occurrences found)&lt;br /&gt;[14808] dbg: FuzzyOcr: Remove DIR: /tmp/.spamassassin14808JZSvHBtmp&lt;br /&gt;[14808] dbg: FuzzyOcr: Processed in 0.104555 sec.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;12 Apply Relay Recipients&lt;/h3&gt; &lt;p&gt;The following directions are meant for people using Microsoft Exchange 2000 or Microsoft Exchange 2003.&lt;/p&gt; &lt;p&gt;This page describes how to configure your mail gateway to periodically get a list of valid recipient email addresses from your Exchange system. By doing this, you can configure your server to automatically reject any email addressed to invalid addresses. This will reduce the load on your exchange server, since it no longer has to process non-delivery reports, and it will reduce the load on your postfix server since it won&#39;t have to perform spam and virus scanning on the message.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.1 Install Dependencies&lt;/h4&gt; &lt;p&gt;Install the perl module Net::LDAP:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;perl -MCPAN -e shell&lt;br /&gt;install Net::LDAP&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.2 Create the Get Email Address Script&lt;/h4&gt; &lt;p&gt;Create and edit the script:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /usr/bin/getadsmtp.pl&lt;/p&gt; &lt;p&gt;Copy and paste the code below into this new file.&lt;/p&gt; &lt;pre&gt;#!/usr/bin/perl -T -w&lt;br /&gt;&lt;br /&gt;# This script will pull all users&#39; SMTP addresses from your Active Directory&lt;br /&gt;# (including primary and secondary email addresses) and list them in the&lt;br /&gt;# format &quot;user@example.com OK&quot; which Postfix uses with relay_recipient_maps.&lt;br /&gt;# Be sure to double-check the path to perl above.&lt;br /&gt;&lt;br /&gt;# This requires Net::LDAP to be installed.  To install Net::LDAP, at a shell&lt;br /&gt;# type &quot;perl -MCPAN -e shell&quot; and then &quot;install Net::LDAP&quot;&lt;br /&gt;&lt;br /&gt;use Net::LDAP;&lt;br /&gt;use Net::LDAP::Control::Paged;&lt;br /&gt;use Net::LDAP::Constant ( &quot;LDAP_CONTROL_PAGED&quot; );&lt;br /&gt;&lt;br /&gt;# Enter the path/file for the output&lt;br /&gt;$VALID = &quot;/etc/postfix/relay_recipients&quot;;&lt;br /&gt;open VALID, &quot;&gt;$VALID&quot; or die &quot;CANNOT OPEN $VALID $!&quot;;&lt;br /&gt;&lt;br /&gt;# Enter the FQDN of your Active Directory domain controllers below&lt;br /&gt;$dc1=&quot;domaincontroller1.example.com&quot;;&lt;br /&gt;$dc2=&quot;domaincontroller2.example.com&quot;;&lt;br /&gt;&lt;br /&gt;# Enter the LDAP container for your userbase.&lt;br /&gt;# The syntax is CN=Users,dc=example,dc=com&lt;br /&gt;# This can be found by installing the Windows 2000 Support Tools&lt;br /&gt;# then running ADSI Edit.&lt;br /&gt;# In ADSI Edit, expand the &quot;Domain NC [domaincontroller1.example.com]&quot; &amp;amp;&lt;br /&gt;# you will see, for example, DC=example,DC=com (this is your base).&lt;br /&gt;# The Users Container will be specified in the right pane as&lt;br /&gt;# CN=Users depending on your schema (this is your container).&lt;br /&gt;# You can double-check this by clicking &quot;Properties&quot; of your user&lt;br /&gt;# folder in ADSI Edit and examining the &quot;Path&quot; value, such as:&lt;br /&gt;# LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com&lt;br /&gt;# which would be $hqbase=&quot;cn=Users,dc=example,dc=com&quot;&lt;br /&gt;# Note:  You can also use just $hqbase=&quot;dc=example,dc=com&quot;&lt;br /&gt;$hqbase=&quot;cn=Users,dc=example,dc=com&quot;;&lt;br /&gt;&lt;br /&gt;# Enter the username &amp;amp; password for a valid user in your Active Directory&lt;br /&gt;# with username in the form cn=username,cn=Users,dc=example,dc=com&lt;br /&gt;# Make sure the user&#39;s password does not expire.  Note that this user&lt;br /&gt;# does not require any special privileges.&lt;br /&gt;# You can double-check this by clicking &quot;Properties&quot; of your user in&lt;br /&gt;# ADSI Edit and examining the &quot;Path&quot; value, such as:&lt;br /&gt;# LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com&lt;br /&gt;# which would be $user=&quot;cn=user,cn=Users,dc=example,dc=com&quot;&lt;br /&gt;# Note: You can also use the UPN login: &quot;user\@example.com&quot;&lt;br /&gt;$user=&quot;cn=user,cn=Users,dc=example,dc=com&quot;;&lt;br /&gt;$passwd=&quot;password&quot;;&lt;br /&gt;&lt;br /&gt;# Connecting to Active Directory domain controllers&lt;br /&gt;$noldapserver=0;&lt;br /&gt;$ldap = Net::LDAP-&gt;new($dc1) or&lt;br /&gt;$noldapserver=1;&lt;br /&gt;if ($noldapserver == 1)  {&lt;br /&gt;$ldap = Net::LDAP-&gt;new($dc2) or&lt;br /&gt;   die &quot;Error connecting to specified domain controllers $@ \n&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$mesg = $ldap-&gt;bind ( dn =&gt; $user,&lt;br /&gt;                   password =&gt;$passwd);&lt;br /&gt;if ( $mesg-&gt;code()) {&lt;br /&gt; die (&quot;error:&quot;, $mesg-&gt;error_text((),&quot;\n&quot;));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# How many LDAP query results to grab for each paged round&lt;br /&gt;# Set to under 1000 for Active Directory&lt;br /&gt;$page = Net::LDAP::Control::Paged-&gt;new( size =&gt; 990 );&lt;br /&gt;&lt;br /&gt;@args = ( base     =&gt; $hqbase,&lt;br /&gt;# Play around with this to grab objects such as Contacts, Public Folders, etc.&lt;br /&gt;# A minimal filter for just users with email would be:&lt;br /&gt;# filter =&gt; &quot;(&amp;amp;(sAMAccountName=*)(mail=*))&quot;&lt;br /&gt;      filter =&gt; &quot;(&amp;amp; (mailnickname=*) (| (&amp;amp;(objectCategory=person)&lt;br /&gt;                 (objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))&lt;br /&gt;                 (&amp;amp;(objectCategory=person)(objectClass=user)(|(homeMDB=*)&lt;br /&gt;                 (msExchHomeServerName=*)))(&amp;amp;(objectCategory=person)(objectClass=contact))&lt;br /&gt;                 (objectCategory=group)(objectCategory=publicFolder) ))&quot;,&lt;br /&gt;       control  =&gt; [ $page ],&lt;br /&gt;       attrs  =&gt; &quot;proxyAddresses&quot;,&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;my $cookie;&lt;br /&gt;while(1) {&lt;br /&gt;# Perform search&lt;br /&gt;my $mesg = $ldap-&gt;search( @args );&lt;br /&gt;&lt;br /&gt;# Filtering results for proxyAddresses attributes&lt;br /&gt;foreach my $entry ( $mesg-&gt;entries ) {&lt;br /&gt; my $name = $entry-&gt;get_value( &quot;cn&quot; );&lt;br /&gt; # LDAP Attributes are multi-valued, so we have to print each one.&lt;br /&gt; foreach my $mail ( $entry-&gt;get_value( &quot;proxyAddresses&quot; ) ) {&lt;br /&gt;  # Test if the Line starts with one of the following lines:&lt;br /&gt;  # proxyAddresses: [smtp|SMTP]:&lt;br /&gt;  # and also discard this starting string, so that $mail is only the&lt;br /&gt;  # address without any other characters...&lt;br /&gt;  if ( $mail =~ s/^(smtp|SMTP)://gs ) {&lt;br /&gt;    print VALID $mail.&quot; OK\n&quot;;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Only continue on LDAP_SUCCESS&lt;br /&gt;$mesg-&gt;code and last;&lt;br /&gt;&lt;br /&gt;# Get cookie from paged control&lt;br /&gt;my($resp)  = $mesg-&gt;control( LDAP_CONTROL_PAGED ) or last;&lt;br /&gt;$cookie    = $resp-&gt;cookie or last;&lt;br /&gt;&lt;br /&gt;# Set cookie in paged control&lt;br /&gt;$page-&gt;cookie($cookie);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ($cookie) {&lt;br /&gt;# We had an abnormal exit, so let the server know we do not want any more&lt;br /&gt;$page-&gt;cookie($cookie);&lt;br /&gt;$page-&gt;size(0);&lt;br /&gt;$ldap-&gt;search( @args );&lt;br /&gt;# Also would be a good idea to die unhappily and inform OP at this point&lt;br /&gt;  die(&quot;LDAP query unsuccessful&quot;);&lt;br /&gt;}&lt;br /&gt;# Add additional restrictions, users, etc. to the output file below.&lt;br /&gt;#print VALID &quot;user\@domain1.com OK\n&quot;;&lt;br /&gt;#print VALID &quot;user\@domain2.com 550 User unknown.\n&quot;;&lt;br /&gt;#print VALID &quot;domain3.com 550 User does not exist.\n&quot;;&lt;br /&gt;&lt;br /&gt;close VALID;&lt;/pre&gt; &lt;p&gt;Next set the permissions on the file to allow it to be executed:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;chmod 500 /usr/bin/getadsmtp.pl&lt;/p&gt; &lt;p&gt;Edit the file to customize it for your specific domain. Since the file is read only, you will need to use :w! to save the file in vi.&lt;/p&gt; &lt;p&gt;1. Set &lt;span class=&quot;system&quot;&gt;$dc1&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;$dc2&lt;/span&gt; to the fully qualified domain names or IP addresses of 2 of your domain controllers.&lt;/p&gt; &lt;p&gt;2. Set &lt;span class=&quot;system&quot;&gt;$hqbase&lt;/span&gt; equal to the LDAP path to the container or organizational unit which holds the email accounts for which you wish to get the email addresses.&lt;/p&gt; &lt;p&gt;3. Set &lt;span class=&quot;system&quot;&gt;$user&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;$passwd&lt;/span&gt; to indicate which user account should be used to access this information. This account only needs to be a member of the domain, so it would be a good idea to setup an account specifically for this.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.3 Run the Script&lt;/h4&gt; &lt;p&gt;Try running the script. If it works correctly, it will create /etc/postfix/relay_recipients Note that if your postfix server is separated from your active directory controllers by a firewall, you will need to open TCP port 389 from the postfix server to the ADCs. At this point, you can update your &lt;span class=&quot;system&quot;&gt;/etc/postfix/main.cf&lt;/span&gt; to &lt;span class=&quot;system&quot;&gt;relay_recipient_maps&lt;/span&gt;. You will also have to postmap the file to create the database.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;getadsmtp.pl&lt;/p&gt; &lt;p&gt;At this point, you may want to edit &lt;span class=&quot;system&quot;&gt;/etc/postfix/relay_recipients&lt;/span&gt; and edit out any unwanted email addresses as this script imports everything.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;12.4 Create the Table&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;postmap /etc/postfix/relay_recipients&lt;/p&gt; &lt;p&gt;Finally, you may want to set up a cron job to periodically update and build the &lt;span class=&quot;system&quot;&gt;/etc/postfix/relay_recipients.db&lt;/span&gt; file. You can set up a script called &lt;span class=&quot;system&quot;&gt;/usr/bin/update-relay-recipients.sh&lt;/span&gt;: (Optional)&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /usr/bin/update-relay-recipients.sh&lt;/p&gt; &lt;pre&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;/usr/bin/getadsmtp.pl&lt;br /&gt;cd /etc/postfix&lt;br /&gt;postmap relay_recipients&lt;/pre&gt; &lt;p&gt;Don&#39;t forget to make sure the following is in your &lt;span class=&quot;system&quot;&gt;/etc/postfix/main.cf&lt;/span&gt; file:&lt;/p&gt; &lt;pre&gt;relay_recipient_maps = hash:/etc/postfix/relay_recipients&lt;/pre&gt; &lt;p&gt;Run crontab to add this script to the scheduled jobs:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;crontab -e&lt;/p&gt; &lt;p&gt;Now add the following lines to the bottom of the file. Note that this cron job will run every day at 2:30 AM to update the database file. You may want to run yours more frequently or not depending on how often you add new email users to your system.&lt;/p&gt; &lt;pre&gt;# syncronize relay_recipients with Active Directory addresses&lt;br /&gt;30 2 * * * /usr/bin/update-relay-recipients.sh&lt;/pre&gt;&lt;div class=&quot;book&quot;&gt;&lt;div class=&quot;nav&quot;&gt; &lt;div class=&quot;links&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;/div&gt; &lt;div class=&quot;titles&quot;&gt;&lt;div class=&quot;prev&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;next&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;copyright-footer&quot;&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved. &lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7173327316153119042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7173327316153119042'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2170792345535675377</id><published>2008-05-01T00:48:00.002-07:00</published><updated>2008-05-03T00:02:44.631-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07</title><content type='html'>&lt;h3&gt;13 Filtering PDF, XLS and Phishing Spam with ClamAV (Sanesecurity Signatures)&lt;/h3&gt; &lt;p&gt;There is currently a lot of spam where the spam &quot;information&quot; is attached as .pdf or .xls files, sometimes also hidden inside a .zip file. While these spam mails are not easy to catch with e.g. SpamAssassin or a Bayes filter, the ClamAV virus scanner can catch them easily when it is fed with the correct signatures as ClamAV is built to scan mail attachments.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;13.1 Create a Folder and Download the Script&lt;/h4&gt; &lt;p&gt;Create a folder for sanesecurity and download and give the script the proper permission.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install curl&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mkdir /usr/src/sanesecurity&lt;br /&gt;cd /usr/src/sanesecurity&lt;br /&gt;wget http://www.sanesecurity.co.uk/clamav/ss-msrbl.txt&lt;br /&gt;mv ss-msrbl.txt /usr/bin/ss_update.sh&lt;br /&gt;chmod +x /usr/bin/ss_update.sh&lt;/p&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;ss_update.sh&lt;/span&gt; and change the following variables to match your installation:&lt;/p&gt; &lt;pre&gt;clam_sigs=&quot;/var/lib/clamav&quot;&lt;/pre&gt; &lt;p&gt;The variable &lt;span class=&quot;system&quot;&gt;clamav_sigs&lt;/span&gt; contains the path to the directory where your ClamAV signatures are stored.&lt;/p&gt; &lt;pre&gt;clam_user=&quot;clamav&quot;&lt;/pre&gt; &lt;p&gt;Now we run the update script to check if the download works:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;./ss_update.sh&lt;/p&gt; &lt;p&gt;The result should look similar to this:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;=================================&lt;br /&gt;SaneSecurity SCAM Database Update&lt;br /&gt;=================================&lt;br /&gt;% Total % Received % Xferd Average Speed Time Time Time Current&lt;br /&gt;Dload Upload Total Spent Left Speed&lt;br /&gt;100 116k 100 116k 0 0 65448 0 0:00:01 0:00:01 --:--:-- 139k&lt;/p&gt;&lt;p class=&quot;system&quot;&gt;==================================&lt;br /&gt;SaneSecurity PHISH Database Update&lt;br /&gt;==================================&lt;br /&gt;% Total % Received % Xferd Average Speed Time Time Time Current&lt;br /&gt;Dload Upload Total Spent Left Speed&lt;br /&gt;100 179k 100 179k 0 0 216k 0 --:--:-- --:--:-- --:--:-- 216k&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;==========================&lt;br /&gt;MSRBL SPAM Database Update&lt;br /&gt;==========================&lt;br /&gt;Number of files: 1&lt;br /&gt;Number of files transferred: 1&lt;br /&gt;Total file size: 228436 bytes&lt;br /&gt;Total transferred file size: 228436 bytes&lt;br /&gt;Literal data: 228436 bytes&lt;br /&gt;Matched data: 0 bytes&lt;br /&gt;File list size: 33&lt;br /&gt;File list generation time: 0.001 seconds&lt;br /&gt;File list transfer time: 0.000 seconds&lt;br /&gt;Total bytes sent: 101&lt;br /&gt;Total bytes received: 228579&lt;br /&gt;sent 101 bytes received 228579 bytes 26903.53 bytes/sec&lt;br /&gt;total size is 228436 speedup is 1.00&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;===========================&lt;br /&gt;MSRBL IMAGE Database Update&lt;br /&gt;===========================&lt;br /&gt;Number of files: 1&lt;br /&gt;Number of files transferred: 1&lt;br /&gt;Total file size: 550503 bytes&lt;br /&gt;Total transferred file size: 550503 bytes&lt;br /&gt;Literal data: 550503 bytes&lt;br /&gt;Matched data: 0 bytes&lt;br /&gt;File list size: 35&lt;br /&gt;File list generation time: 0.001 seconds&lt;br /&gt;File list transfer time: 0.000 seconds&lt;br /&gt;Total bytes sent: 103&lt;br /&gt;Total bytes received: 550688&lt;br /&gt;sent 103 bytes received 550688 bytes 157368.86 bytes/sec&lt;br /&gt;total size is 550503 speedup is 1.00&lt;/p&gt; &lt;p&gt;Now we a add the script to the root crontab to be run once a day:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;crontab -e&lt;/p&gt; &lt;p&gt;Add the following line at the end of the root crontab:&lt;/p&gt; &lt;pre&gt;00 04 * * * /usr/bin/ss_update.sh &amp;amp;&gt; /dev/null&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;14 GreyListing with Postfix-gld&lt;/h3&gt; &lt;h4&gt;14.1 Installing Postfix-gld&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;apt-get install postfix-gld&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /usr/src&lt;br /&gt;wget http://www.gasmi.net/down/gld-1.7.tgz&lt;br /&gt;tar xvfx gld-1.7.tgz&lt;br /&gt;cd gld-1.7&lt;/p&gt; &lt;p&gt;Create MySQL Database:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql –u root –p&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql&gt; create database gld_db&lt;br /&gt;mysql&gt; GRANT ALL ON gld_db.* TO gld_user@localhost IDENTIFIED BY ‘gld_password’;&lt;br /&gt;mysql&gt; flush privileges;&lt;/p&gt; &lt;p&gt;Import &lt;span class=&quot;system&quot;&gt;tables.mysql&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql –u gld_user –p gld_db &lt; /path/to/tables.mysql&lt;/p&gt; &lt;p&gt;Import &lt;span class=&quot;system&quot;&gt;table-whitelist.sql&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql –u gld_user –p gld_db &lt; /path/to/table-whitelist.sql&lt;/p&gt; &lt;p&gt;You will have to enable it by configuring that in the &lt;span class=&quot;system&quot;&gt;/etc/default/gld&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/default/gld&lt;/p&gt; &lt;pre&gt;#/etc/default/gld&lt;br /&gt;ENABLED=1&lt;br /&gt;&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;14.2 Configuration&lt;/h4&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;/etc/gld.conf&lt;/span&gt; according to your needs. I&#39;m using the following settings:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/gld.conf&lt;/p&gt; &lt;pre&gt;# Config file for gld&lt;br /&gt;# TCP Port gld should listen to (default is 2525)&lt;br /&gt;#&lt;br /&gt;PORT=2525&lt;br /&gt;# Shall we bind only to loopback ? (0=No,1=Yes) (default is 1)&lt;br /&gt;LOOPBACKONLY=1&lt;br /&gt;# The list of networks allowed to connect to us (default is everybody)&lt;br /&gt;CLIENTS=127.0.0.1/32&lt;br /&gt;# The user used to run gld (default value is no user change)&lt;br /&gt;USER=postfix-gld&lt;br /&gt;# The group used to run gld (default value is no group change)&lt;br /&gt;GROUP=postfix-gld&lt;br /&gt;# Maximum simultaneous connexions (default is 100)&lt;br /&gt;MAXCON=100&lt;br /&gt;# How many seconds we should wait before accepting a mail that is in greylist (default is 60)&lt;br /&gt;MINTIME=60&lt;br /&gt;# Shall we use lightgrey option ? (0=No,1=Yes) (default is 0)&lt;br /&gt;# The lightgrey option, mask the last octet of IP addresses&lt;br /&gt;# and thus we greylist only C classes (/24) instead of individual IPs.&lt;br /&gt;LIGHTGREY=0&lt;br /&gt;# Shall we use the mxgrey algorithm ? (0=No,&gt;0=Yes) (default is 0)&lt;br /&gt;# the mxgrey algorithm is a variation of the greylist algorithm.&lt;br /&gt;# When this is enabled, we allow all incoming mails from an IP address&lt;br /&gt;# whatever source/destination email as long as this IP has been greylisted&lt;br /&gt;# at least X time and succeded the mail resend .&lt;br /&gt;#&lt;br /&gt;# Example:&lt;br /&gt;# The IP 1.2.3.4 sends an email from src@domain.com to user@yourdomain.com&lt;br /&gt;# We greylist this mail as this IP is not yet in database and send a 450 SMTP code&lt;br /&gt;# After some time, the IP re-send the mail from src@domain.com to user@yourdomain.com&lt;br /&gt;# We update the db.&lt;br /&gt;# Some time after the ip 1.2.3.4 sends an email from john@domain.com to fred@yourdomain.com&lt;br /&gt;# We will accept this mail without any greylisting, as this ip already succeded a greylist test&lt;br /&gt;# and thus seems to be a valid smtp server and not a spammer .&lt;br /&gt;#&lt;br /&gt;# The advantage of this method, is that it reduce the re-send time due to greylisting to&lt;br /&gt;# x mail per server instead of one mail per destination .&lt;br /&gt;#&lt;br /&gt;# The value you provide in MXGREY is the minimum number of succesful greylists&lt;br /&gt;# before accepting all mails from this MX. higher the number is, harder is to get in.&lt;br /&gt;#&lt;br /&gt;# This algortihm replace the old LIGHTGREYDOMAIN which was available prior version 1.6&lt;br /&gt;#&lt;br /&gt;MXGREY=1&lt;br /&gt;# Shall we use the whitelist table ?  (0=No,1=Yes) (default is 1)&lt;br /&gt;# If set to yes, then the table &#39;whitelist&#39; is looked up&lt;br /&gt;# each time postfix request the server&lt;br /&gt;# if the email/domain/ip is in the whitelist, then the response&lt;br /&gt;# will be &#39;dunno&#39; .&lt;br /&gt;# In the whitelist table, you can set the following values:&lt;br /&gt;# an email: ie john@foo.tld&lt;br /&gt;# a domain: ie @bar.tld&lt;br /&gt;# an IP   : ie 1.2.3.4&lt;br /&gt;# a subnet: ie 1.2.3&lt;br /&gt;#&lt;br /&gt;WHITELIST=1&lt;br /&gt;# Shall we use a DNS based whitelist ? (default is no)&lt;br /&gt;# To activate it, the line must be uncommented&lt;br /&gt;# and the value set to the domain of the DNS whitelist.&lt;br /&gt;# for example, if DNSWL is set to toto.com and we get a mail from ip a.b.c.d&lt;br /&gt;# then gld will DNS lookup d.c.b.a.toto.com&lt;br /&gt;# and if found allow the ip without greylisting it.&lt;br /&gt;#DNSWL=toto.com&lt;br /&gt;# Shall we send a &#39;dunno&#39; in case of error (mysql down,....) (0=No,1=Yes) (default is 1)&lt;br /&gt;# Normaly, if an error occur, the server is supposed to close the connection&lt;br /&gt;# and thus postfix will return a 450 Server configuration error&lt;br /&gt;# if this parameter is set to 1, then the server will return &#39;dunno&#39;&lt;br /&gt;# and thus let postfix decide the fate of the mail.&lt;br /&gt;ERRACCEPT=1&lt;br /&gt;# Shall we log to the syslog (0=No,1=Yes) (default is 1)&lt;br /&gt;SYSLOG=1&lt;br /&gt;# If we use syslog, which facility shall we use (default is mail)&lt;br /&gt;# it can only be one of the following facilities:&lt;br /&gt;# daemon mail local0 local1 local2 local3 local4 local5 local6 local7&lt;br /&gt;FACILITY=mail&lt;br /&gt;# The Message that we display in case of reject (default is &quot;Greylisted&quot;)&lt;br /&gt;# If you want another SMTP return code than the default 450, just put it at&lt;br /&gt;# the beginning of the message, ie: 451 You have been greylisted by gld ...&lt;br /&gt;# If you don&#39;t provide any SMTP code, the default 450 will be used by postfix&lt;br /&gt;# WARNING: if you set a custom smtp code make sure it&#39;s a 4XX code.&lt;br /&gt;# if you don&#39;t provide a 4XX code, gld will ignore it and send the default 450.&lt;br /&gt;# Be also warned that if you set a custom code, gld will not use defer_if_permit anymore&lt;br /&gt;# but direct supplied code to postfix .&lt;br /&gt;MESSAGE=Service temporarily unavailable, please try later&lt;br /&gt;# Training mode activated ? (0=No,1=Yes) (default is 0)&lt;br /&gt;# If activated, gld will do all the work but will always reply dunno to postfix&lt;br /&gt;# and thus, will never greylist any mail.&lt;br /&gt;# This feature is useful for testing gld performances without greylisting any mail&lt;br /&gt;TRAINING=0&lt;br /&gt;# SQL INFOS (defaults are localhost,myuser,mypasswd,mydb)&lt;br /&gt;#&lt;br /&gt;SQLHOST=localhost&lt;br /&gt;SQLUSER=gld_user&lt;br /&gt;SQLPASSWD=gld_password&lt;br /&gt;SQLDB-gld_db&lt;/pre&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;/etc/postfix/main.cf&lt;/span&gt; and add the following to &lt;span class=&quot;system&quot;&gt;smtpd_recipient_restrictions&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/main.cf&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;check_policy_service inet:127.0.0.1:2525&lt;/p&gt; &lt;p&gt;Do a &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;tail –f /var/log/mail.log &lt;/p&gt; &lt;p&gt;and check your log for the following:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;Apr 28 09:07:03 server1 gld: Greylist activated for recipient=&lt;xxx@xxx.com&gt; sender=&lt;xxx@xxx.com&gt; ip=&lt;xxx.xxx.xxx.xxx&gt;&lt;/xxx.xxx.xxx.xxx&gt;&lt;/xxx@xxx.com&gt;&lt;/xxx@xxx.com&gt;&lt;/p&gt; &lt;p&gt;You can set up a cron job to keep your database clean. Below is the gld command usage.&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;Usage: gld [-c n|-C n|-k n|-K n|-h|-v]&lt;br /&gt;gld -c n : clean the database for ALL entries not updated since n days&lt;br /&gt;gld -C n : show what the -c option would do, without doing it&lt;br /&gt;gld -k n : clean the database for entries not updated since n days with only one hit&lt;br /&gt;gld -K n : show what the -k option would do, without doing it&lt;br /&gt;gld -i : show some database informations&lt;br /&gt;gld -d : enable debug mode&lt;br /&gt;gld -v : display version&lt;br /&gt;gld -h : display Usage&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;15 Logwatch Statistical Reporting (Optional)&lt;/h3&gt; &lt;p&gt;Logwatch is a customizable log analysis system. Logwatch parses through your system&#39;s logs for a given period of time and creates a report analyzing areas that you specify, in as much detail as you require.&lt;/p&gt; &lt;p&gt;We will be using Logwatch to give us daily reports for mailscanner. This is a way for us to see how effective mailscanner really is.&lt;/p&gt; &lt;p&gt;Install Logwatch:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install logwatch&lt;/p&gt; &lt;p&gt;Edit the &lt;span class=&quot;system&quot;&gt;/usr/share/logwatch/default.conf/logwatch&lt;/span&gt;.conf and set the options:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /usr/share/logwatch/default.conf/logwatch&lt;/p&gt; &lt;pre&gt;Mail To = youremailaddress&lt;br /&gt;Service = mailscanner&lt;/pre&gt; &lt;p&gt;Test Logwatch:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;logwatch&lt;/p&gt; &lt;p&gt;It should generate a log file and email it to the email you specified.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;16 Automatically Add A Disclaimer To Outgoing Emails With alterMIME (Optional)&lt;/h3&gt; &lt;p&gt;This tutorial shows how to install and use alterMIME. alterMIME is a tool that can automatically add a disclaimer to emails. In this article I will explain how to install it as a Postfix filter on Ubuntu.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;16.1 Installing alterMIME&lt;/h4&gt; &lt;p&gt;alterMIME can be installed as follows:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install altermime&lt;/p&gt; &lt;p&gt;Next we create the user &lt;span class=&quot;system&quot;&gt;filter&lt;/span&gt; with the home directory &lt;span class=&quot;system&quot;&gt;/var/spool/filter&lt;/span&gt; filter - alterMIME will be run as that user:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;useradd -r -c &quot;Postfix Filters&quot; -d /var/spool/filter filter&lt;br /&gt;mkdir /var/spool/filter&lt;br /&gt;chown filter:filter /var/spool/filter&lt;br /&gt;chmod 750 /var/spool/filter&lt;/p&gt; &lt;p&gt;Afterwards we create the script &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer&lt;/span&gt; which executes alterMIME. Ubuntu&#39;s alterMIME package comes with a sample script that we can simply copy to &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer&lt;br /&gt;chgrp filter /etc/postfix/disclaimer&lt;br /&gt;chmod 750 /etc/postfix/disclaimer&lt;/p&gt; &lt;p&gt;Now the problem with this script is that it doesn&#39;t distinguish between incoming and outgoing emails - it simply adds a disclaimer to all mails. Typically you want disclaimers only for outgoing emails, and even then not for all sender addresses. Therefore I&#39;ve modified the &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer&lt;/span&gt; script a little bit - we&#39;ll come to that in a minute.&lt;/p&gt; &lt;p&gt;Right now, we create the file &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer_addresses&lt;/span&gt; which holds all sender email addresses (one per line) for which alterMIME should add a disclaimer:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/disclaimer_addresses&lt;/p&gt; &lt;pre&gt;user1@example.com&lt;br /&gt;user2@example.org&lt;br /&gt;user3@example.net&lt;/pre&gt; &lt;p&gt;Now we open &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer&lt;/span&gt; and modify it as follows (I have marked the parts that I&#39;ve changed):&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/disclaimer&lt;/p&gt; &lt;pre&gt;#!/bin/sh&lt;br /&gt;# Localize these.&lt;br /&gt;INSPECT_DIR=/var/spool/filter&lt;br /&gt;SENDMAIL=/usr/sbin/sendmail&lt;br /&gt;&lt;br /&gt;####### Changed From Original Script #######&lt;br /&gt;DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses&lt;br /&gt;####### Changed From Original Script END #######&lt;br /&gt;&lt;br /&gt;# Exit codes from &lt;sysexits.h&gt;&lt;br /&gt;EX_TEMPFAIL=75&lt;br /&gt;EX_UNAVAILABLE=69&lt;br /&gt;&lt;br /&gt;# Clean up when done or when aborting.&lt;br /&gt;trap &quot;rm -f in.$$&quot; 0 1 2 3 15&lt;br /&gt;&lt;br /&gt;# Start processing.&lt;br /&gt;cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit&lt;br /&gt;$EX_TEMPFAIL; }&lt;br /&gt;&lt;br /&gt;cat &gt;in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }&lt;br /&gt;&lt;br /&gt;####### Changed From Original Script #######&lt;br /&gt;# obtain From address&lt;br /&gt;from_address=`grep -m 1 &quot;From:&quot; in.$$ | cut -d &quot;&lt;&quot; -f 2 | cut -d &quot;&gt;&quot; -f 1`&lt;br /&gt;&lt;br /&gt;if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then&lt;br /&gt;/usr/bin/altermime --input=in.$$ \&lt;br /&gt;               --disclaimer=/etc/postfix/disclaimer.txt \&lt;br /&gt;               --disclaimer-html=/etc/postfix/disclaimer.txt \&lt;br /&gt;               --xheader=&quot;X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm&quot; || \&lt;br /&gt;                { echo Message content rejected; exit $EX_UNAVAILABLE; }&lt;br /&gt;fi&lt;br /&gt;####### Changed From Original Script END #######&lt;br /&gt;&lt;br /&gt;$SENDMAIL &quot;$@&quot; &lt;in.$$ exit=&quot;&quot;&gt;&lt;/in.$$&gt;&lt;/sysexits.h&gt;&lt;/pre&gt; &lt;p&gt;Next we need the text file &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer.txt&lt;/span&gt; which holds our disclaimer text. Ubuntu&#39;s alterMIME package comes with a sample text that we can use for now (of course, you can modify it if you like):&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt&lt;/p&gt; &lt;p&gt;Finally we have to tell Postfix that it should use the &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer&lt;/span&gt; script to add disclaimers to outgoing emails. Open &lt;span class=&quot;system&quot;&gt;/etc/postfix/master.cf&lt;/span&gt; and add &lt;span class=&quot;system&quot;&gt;-o content_filter=dfilt:&lt;/span&gt; to the &lt;span class=&quot;system&quot;&gt;smtp&lt;/span&gt; line:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/master.cf&lt;/p&gt; &lt;pre&gt;#&lt;br /&gt;# Postfix master process configuration file.  For details on the format&lt;br /&gt;# of the file, see the master(5) manual page (command: &quot;man 5 master&quot;).&lt;br /&gt;#&lt;br /&gt;# ==========================================================================&lt;br /&gt;# service type  private unpriv  chroot  wakeup  maxproc command + args&lt;br /&gt;#               (yes)   (yes)   (yes)   (never) (100)&lt;br /&gt;# ==========================================================================&lt;br /&gt;smtp      inet  n       -       -       -       -       smtpd&lt;br /&gt;-o content_filter=dfilt:&lt;br /&gt;[...]&lt;/pre&gt; &lt;p&gt;At the end of the same file, add the following two lines:&lt;/p&gt; &lt;pre&gt;[...]&lt;br /&gt;dfilt     unix    -       n       n       -       -       pipe&lt;br /&gt;flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}&lt;/pre&gt; &lt;p&gt;Restart Postfix afterwards:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/postfix restart&lt;/p&gt; &lt;p&gt;That&#39;s it! Now a disclaimer should be added to outgoing emails sent from the addresses listed in &lt;span class=&quot;system&quot;&gt;/etc/postfix/disclaimer_addresses&lt;/span&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Congratulations!&lt;/h3&gt; &lt;p&gt;You should now have a complete working SpamSnake.&lt;/p&gt; &lt;p&gt;Here are some Mailwatch screenshots: &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/mailwatch.jpg&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/mailwatch.jpg&quot; height=&quot;322&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/quarantine.jpg&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/quarantine.jpg&quot; height=&quot;210&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/whitelist.jpg&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/whitelist.jpg&quot; height=&quot;226&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;div class=&quot;titles&quot;&gt;&lt;div class=&quot;prev&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;next&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved.&lt;br /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2170792345535675377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2170792345535675377'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6938693074450018155</id><published>2008-05-01T00:28:00.001-07:00</published><updated>2008-05-03T00:13:16.637-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05</title><content type='html'>&lt;h3&gt;9 MailWatch Installation Instructions&lt;/h3&gt; &lt;p&gt;This setup assumes you are using Apache v2.x and not Apache v1.x.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.1 Before Starting&lt;/h4&gt; &lt;p&gt;Make sure that MailScanner is working before you continue with the MailWatch install!&lt;/p&gt; &lt;p&gt;Notes for Ubuntu:&lt;/p&gt; &lt;p&gt;You must have a working MailScanner set-up and running copies of MySQL, Apache, and PHP. You must also have the Perl DBD-MySQL package installed for the Perl portions of MailScanner to utilize the MySQL database.&lt;br /&gt;The default php.ini set should have the following set correctly, you may want to check this:&lt;/p&gt; &lt;ul&gt;&lt;li&gt; &lt;span class=&quot;system&quot;&gt;short_open_tag = On&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; safe_mode = Off&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; register_globals = Off&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; magic_quotes_gpc = On&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; magic_quotes_runtime = Off&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; session.auto_start = 0&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;These will be commented out you must remove the &quot;#&quot; to activate them:&lt;/p&gt; &lt;ul&gt;&lt;li class=&quot;system&quot;&gt; extension=mysql.so&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; extension=gd.so &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.2 Installation&lt;/h4&gt; &lt;p&gt;All commands below should be run as root.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.3 Download the latest MailWatch release&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;wget http://downloads.sourceforge.net/mailwatch/mailwatch-1.0.4.tar.gz?modtime=1178902008&amp;amp;big_mirror=0&lt;br /&gt;tar xzvf mailwatch-1.0.4.tar.gz&lt;br /&gt;cd mailwatch-1.0.4&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.4 Create the database&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;mysql -p &lt;&gt; &lt;/p&gt;&lt;p&gt;NOTE: you will need to modify the above as necessary for your system if you have a root password for your MySQL database (recommended!) - Debian will ask for one.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.5 Create a MySQL user and password &amp;amp; Set-up MailScanner for SQL logging&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;mysql -p&lt;br /&gt;mysql&gt; GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY &#39;password&#39;;&lt;/p&gt;&lt;p&gt;Remember the password! You need the single quotes &#39; to surround your password.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.6 Edit and copy MailWatch.pm&lt;/h4&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;MailWatch.pm&lt;/span&gt; and change the &lt;span class=&quot;system&quot;&gt;$db_user&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;$db_pass&lt;/span&gt; values accordingly and move &lt;span class=&quot;system&quot;&gt;MailWatch.pm&lt;/span&gt;.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; mv MailWatch.pm /etc/MailScanner/CustomFunctions/&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.7 Create a MailWatch Web User&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt; mysql mailscanner -u mailwatch -p&lt;/p&gt; &lt;p&gt;Enter password: ******&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql&gt; INSERT INTO users VALUES (&#39;username&#39;,md5(&#39;password&#39;),&#39;mailscanner&#39;,&#39;A&#39;,&#39;0&#39;,&#39;0&#39;,&#39;0&#39;,&#39;0&#39;,&#39;0&#39;);&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.8 Install &amp;amp; Configure MailWatch&lt;/h4&gt; &lt;p&gt;From within the unpacked mailwatch directory move the directory called &#39;mailscanner&#39; to the web server&#39;s root.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; mv mailscanner/ /var/www/&lt;br /&gt;cd /var/www/mailscanner&lt;/p&gt; &lt;p&gt;Make a temp directory:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; mkdir temp&lt;br /&gt;chgrp www-data temp&lt;br /&gt;chmod g+w temp&lt;/p&gt; &lt;p&gt;Check the permissions of &lt;span class=&quot;system&quot;&gt;/var/www/mailscanner/images&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;/var/www/images/cache&lt;/span&gt; - they should be ug+rwx and owned by root and in the same group as the web server user.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; chown root:www-data images&lt;br /&gt;chmod ug+rwx images&lt;br /&gt;chown root:www-data images/cache&lt;br /&gt;chmod ug+rwx images/cache&lt;/p&gt; &lt;p&gt;Create &lt;span class=&quot;system&quot;&gt;conf.php&lt;/span&gt; by copying &lt;span class=&quot;system&quot;&gt;conf.php.example&lt;/span&gt; and edit the values to suit, you will need to set &lt;span class=&quot;system&quot;&gt;DB_USER&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;DB_PASS&lt;/span&gt; to the MySQL user and password that you created earlier.&lt;/p&gt; &lt;p&gt;Change these values as shown below:&lt;/p&gt; &lt;pre&gt;# define(DB_USER, &#39;mailwatch&#39;);&lt;br /&gt;# define(DB_PASS, &#39;password&#39;);&lt;br /&gt;# define(MAILWATCH_HOME, &#39;/var/www/mailscanner&#39;);&lt;br /&gt;# define(MS_LIB_DIR, &#39;/usr/share/MailScanner/&#39;);&lt;br /&gt;# define(QUARANTINE_USE_FLAG, true);&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.9 Set-up MailScanner&lt;/h4&gt; &lt;p&gt;Next edit &lt;span class=&quot;system&quot;&gt;/etc/MailScanner/MailScanner.conf&lt;/span&gt;.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/MailScanner/MailScanner.conf &lt;/p&gt; &lt;p&gt;You need to make sure that the following options are set:&lt;/p&gt; &lt;ul&gt;&lt;li&gt; &lt;span class=&quot;system&quot;&gt;Quarantine User = root&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; Quarantine Group = www-data&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; Quarantine Permissions = 0660&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; Quarantine Whole Message = yes&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; Always Looked Up Last = &amp;amp;MailWatchLogging&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And check these as well:&lt;/p&gt; &lt;ul&gt;&lt;li class=&quot;system&quot;&gt; Quarantine Whole Message As Queue Files = no&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; Detailed Spam Report = yes&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; Include Scores In SpamAssassin Report = yes&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Spam Actions, High Scoring Spam Actions and No Spam Actions should also have &#39;store&#39; as one of the keywords if you want to quarantine those items for bayes learning or viewing from within MailWatch.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.10 Integrate SQL Blacklist/Whitelist (optional)&lt;/h4&gt; &lt;p&gt;If you would like to manage the MailScanner whitelist and blacklist from within the MailWatch web interface perform the following steps.&lt;/p&gt; &lt;p&gt;1. Edit the MySQL connection values within the CreateList subroutine of &lt;span class=&quot;system&quot;&gt;SQLBlackWhiteList.pm&lt;/span&gt; to match the values you entered previous into &lt;span class=&quot;system&quot;&gt;MailWatch.pm&lt;/span&gt;. Both files should contain the same values. (Look for the following lines in &lt;span class=&quot;system&quot;&gt;SQLBlackWhiteList.pm&lt;/span&gt; and enter your own data.)&lt;/p&gt; &lt;pre&gt;my($db_user) = &#39;mailwatch&#39;;&lt;br /&gt;my($db_pass) = &#39;password&#39;;&lt;/pre&gt; &lt;p&gt;2. Copy &lt;span class=&quot;system&quot;&gt;SQLBlackWhiteList.pm&lt;/span&gt; to &lt;span class=&quot;system&quot;&gt;/etc/MailScanner/CustomFunctions/&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;3. Edit &lt;span class=&quot;system&quot;&gt;MailScanner.conf&lt;/span&gt; and set:&lt;/p&gt; &lt;ul&gt;&lt;li class=&quot;system&quot;&gt; Is Definitely Not Spam = &amp;amp;SQLWhitelist&lt;/li&gt;&lt;li class=&quot;system&quot;&gt; Is Definitely Spam = &amp;amp;SQLBlacklist&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.11 Fix to allow MailWatch to work with Postfix Inbound/Outbound Queue&lt;/h4&gt; &lt;p&gt;Download the patch from &lt;a href=&quot;http://www.gbnetwork.co.uk/mailscanner/postfixmail.tar.gz&quot;&gt;http://www.gbnetwork.co.uk/mailscanner/postfixmail.tar.gz&lt;/a&gt;&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /usr/src&lt;br /&gt;wget http://www.gbnetwork.co.uk/mailscanner/files/postfixmail.tar.gz&lt;br /&gt;tar xvfz postfixmail.tar.gz&lt;br /&gt;cd postfixmail&lt;br /&gt;cp postfix* /var/www/mailscanner&lt;br /&gt;patch /var/www/mailscanner/functions.php functions.php.diff&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.12 SpamAssassin&lt;/h4&gt; &lt;p&gt;First we need to disable the default SpamAssassin configuration file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mv /etc/spamassassin/local.cf /etc/spamassassin/local.cf.disabled&lt;/p&gt; &lt;p&gt;Now let&#39;s backup the SpamAssassin configuration file in MailScanner then edit:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /etc/MailScanner/spam.assassin.prefs.conf /etc/MailScanner/spam.assassin.prefs.conf.back&lt;/p&gt; &lt;p&gt;Add pyzor and razor paths:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/MailScanner/spam.assassin.prefs.conf&lt;/p&gt; &lt;p&gt;Add these lines to the top of &lt;span class=&quot;system&quot;&gt;spam.assassin.prefs.conf&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;pyzor_options --homedir /var/lib/MailScanner/&lt;br /&gt;razor_config /var/lib/MailScanner/.razor/razor-agent.conf&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.13 Move the Bayesian Databases and set-up permissions (skip this if you don&#39;t use bayes)&lt;/h4&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;/etc/MailScanner/spam.assassin.prefs.conf&lt;/span&gt; and set:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/MailScanner/spam.assassin.prefs.conf&lt;/p&gt; &lt;pre&gt;bayes_path /etc/MailScanner/bayes/bayes&lt;br /&gt;bayes_file_mode 0660&lt;/pre&gt; &lt;p&gt;Look for these lines and change them accordingly:&lt;/p&gt; &lt;pre&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner&lt;br /&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner-SpamCheck&lt;br /&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner-SpamScore&lt;br /&gt;bayes_ignore_header X-YOURDOMAIN-COM-MailScanner-Information&lt;/pre&gt; &lt;p&gt;&quot;YOURDOMAIN-COM&quot; should be replaced with whatever you used for &quot;%org-name%&quot; in the &lt;span class=&quot;system&quot;&gt;MailScanner.conf&lt;/span&gt; file. Leave the &quot;X-&quot; in place.&lt;br /&gt;This is the same orgname used in the &lt;span class=&quot;system&quot;&gt;MailScanner.conf&lt;/span&gt; above.&lt;/p&gt; &lt;p&gt;Create the &#39;new&#39; bayes directory, make the directory owned by the same group as the web server user and make the directory setgid:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mkdir /etc/MailScanner/bayes&lt;br /&gt;chown -R root:www-data /etc/MailScanner/bayes&lt;br /&gt;chmod -R ug+rw /etc/MailScanner/bayes&lt;br /&gt;chmod g+s /etc/MailScanner/bayes&lt;/p&gt; &lt;p&gt;Copy the existing bayes databases and set the permissions:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /var/lib/MailScanner/bayes_* /etc/MailScanner/bayes&lt;br /&gt;chown root:www-data /etc/MailScanner/bayes/bayes_*&lt;br /&gt;chmod g+rw /etc/MailScanner/bayes/bayes_*&lt;/p&gt; &lt;p&gt;Make sure that &quot;bayes_auto_expire 0&quot; is not commented out in &lt;span class=&quot;system&quot;&gt;spam.assassin.prefs.conf&lt;/span&gt;:&lt;/p&gt; &lt;pre&gt;bayes_auto_expire 0&lt;/pre&gt; &lt;p&gt;Edit the SpamAssassin v310.pre to enable Razor and DCC:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/spamassassin/v310.pre&lt;/p&gt; &lt;p&gt;Uncomment the following lines:&lt;/p&gt; &lt;pre&gt;loadplugin Mail::SpamAssassin::Plugin::DCC&lt;br /&gt;loadplugin Mail::SpamAssassin::Plugin::Razor2&lt;/pre&gt; &lt;p&gt;If you want then you can test SpamAssassin to make sure that it is using the new databases correctly:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; spamassassin -D -p /etc/MailScanner/spam.assassin.prefs.conf --lint&lt;/p&gt; &lt;p&gt;and you should see something like:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;debug: using &quot;/etc/MailScanner/spam.assassin.prefs.conf&quot; for user prefs file&lt;br /&gt;debug: bayes: 28821 tie-ing to DB file R/O /etc/MailScanner/bayes/bayes_toks&lt;br /&gt;debug: bayes: 28821 tie-ing to DB file R/O /etc/MailScanner/bayes/bayes_seen&lt;br /&gt;debug: bayes: found bayes db version 2&lt;br /&gt;debug: Score set 3 chosen.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.13.1 SpamAssassin Bayes Database to SQL Conversion&lt;/h4&gt; &lt;p&gt;&lt;strong&gt;Pre-requisities&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;a. You&#39;ll need the perl-DBI and perl-DBD-MySQL modules installed.&lt;/p&gt; &lt;p&gt;Assumptions and Variables:&lt;/p&gt; &lt;p&gt;SpamAssassin Bayes Database Name: &lt;span class=&quot;system&quot;&gt;sa_bayes&lt;/span&gt;&lt;br /&gt;SpamAssassin Bayes Database UserName: &lt;span class=&quot;system&quot;&gt;sa_user&lt;/span&gt;&lt;br /&gt;SpamAssassin Bayes Database Password: &lt;span class=&quot;system&quot;&gt;sa_password&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Create the MySQL database:&lt;/p&gt; &lt;p&gt;First of all, create a database on the server where you intend on storing the bayesian information.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql -u root -p&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql&gt; create database sa_bayes;&lt;br /&gt;mysql&gt; GRANT ALL ON sa_bayes.* TO sa_user@localhost IDENTIFIED BY &#39;sa_password&#39;;&lt;br /&gt;mysql&gt; flush privileges;&lt;/p&gt; &lt;p&gt;Locate the &lt;span class=&quot;system&quot;&gt;bayes_mysql.sql&lt;/span&gt; file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; find / -name bayes_mysql.sql&lt;br /&gt;mysql -u sa_user -p sa_bayes &lt; /path/to/bayes_mysql.sql&lt;/p&gt; &lt;p&gt;Backup your current bayes database:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sa-learn -p /etc/MailScanner/spam.assassin.prefs.conf --backup &gt; sa_bayes_backup.txt&lt;/p&gt; &lt;p&gt;Warning: The next command can completely wipe out your bayes database!&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sa-learn -p /path/to/spam.assassin.prefs.conf --clear #(entirely optional, incase you want to rollback)&lt;/p&gt; &lt;p&gt;Make some changes to your spam.assassin.prefs.conf:&lt;/p&gt; &lt;pre&gt;bayes_store_module Mail::SpamAssassin::BayesStore::SQL&lt;br /&gt;bayes_sql_dsn DBI:mysql:sa_bayes:localhost&lt;br /&gt;bayes_sql_username sa_user&lt;br /&gt;bayes_sql_password sa_password&lt;br /&gt;bayes_sql_override_username root&lt;/pre&gt; &lt;p&gt;and comment out the following lines:&lt;/p&gt; &lt;pre&gt;#bayes_path /etc/MailScanner/bayes/bayes&lt;br /&gt;#bayes_file_mode 0660&lt;/pre&gt; &lt;p&gt;Populate the Bayes SQL database.&lt;/p&gt; &lt;p&gt;Now for recovering the bayes_dbm to bayes_sql.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sa-learn -p /etc/MailScanner/spam.assassin.prefs.conf --restore sa_bayes_backup.txt&lt;/p&gt; &lt;p&gt;This process may take some time depending on the size of your bayes database.&lt;/p&gt; &lt;p&gt;Also add this to your crontab:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;crontab -e &lt;/p&gt; &lt;pre&gt;30 01 * * * /path/to/sa-learn --force-expire --sync -p /etc/MailScanner/spam.assassin.prefs.conf&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.14 Bring it all Together&lt;/h4&gt; &lt;p&gt;Now that we have everything in there, set the correct permissions:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;chown -R postfix:www-data /var/spool/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/lib/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/run/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/lock/subsys/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/spool/postfix/hold&lt;br /&gt;chmod -R ug+rwx /var/spool/postfix/hold&lt;/p&gt; &lt;p&gt;Finally make sure you restart MailScanner.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; /etc/init.d/mailscanner restart&lt;/p&gt; &lt;p&gt;Test out the setup:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; spamassassin -x -D -p /etc/MailScanner/spam.assassin.prefs.conf --lint&lt;/p&gt; &lt;p&gt;Check for lines like:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;debug: bayes: Database connection established&lt;br /&gt;debug: bayes: found bayes db version 3&lt;br /&gt;debug: bayes: Using userid: 2&lt;/p&gt; &lt;p&gt;and some more like&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;debug: bayes: tok_get_all: Token Count: 20&lt;br /&gt;debug: bayes token &#39;somewhat&#39; ? 0.978&lt;br /&gt;debug: bayes: score = 0.845189622547555&lt;/p&gt; &lt;p&gt;You should see lines come up with DCC, Pyzor and Razor that say loading plugin and hopefully no errors.&lt;/p&gt; &lt;p&gt;Finishing up this part we need to add cron jobs that will clean/update, you probably saw the message about this after the MailScanner install script finished.&lt;/p&gt; &lt;p&gt;First edit &lt;span class=&quot;system&quot;&gt;conf.php&lt;/span&gt; and set &#39;QUARANTINE_DAYS_TO_KEEP&#39; in &lt;span class=&quot;system&quot;&gt;conf.php&lt;/span&gt; and change the following line in db_clean.&lt;/p&gt; &lt;pre&gt;#!/usr/bin/php -qn&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;#!/usr/bin/php -q&lt;/pre&gt; &lt;p&gt;Install quarantine clean up script:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /usr/src/mailwatch-1.0.4/tools/quarantine_maint.php /usr/bin/quarantine_maint.php&lt;br /&gt;cp /usr/src/mailwatch-1.0.4/tools/db_clean.php /usr/bin/db_clean.php&lt;br /&gt;chmod +x /usr/bin/quarantine_maint.php&lt;br /&gt;chmod +x /usr/bin/db_clean.php&lt;/p&gt; &lt;p&gt;Run &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;crontab -e &lt;/p&gt; &lt;p&gt;and add the following:&lt;/p&gt; &lt;pre&gt;15 10 * * 2 /usr/bin/quarantine_maint.php -clean &amp;amp;&gt; /dev/null&lt;br /&gt;58 23 * * * /usr/bin/db_clean.php &amp;amp;&gt; /dev/null&lt;/pre&gt; &lt;p&gt;Disable the mailscanner installed cron script &lt;span class=&quot;system&quot;&gt;/etc/cron.daily/clean.quarantine&lt;/span&gt;.&lt;/p&gt; &lt;pre&gt;$disabled = 1;&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.15 Reboot&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;reboot&lt;/p&gt; &lt;p&gt;Check your mail.log again:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;tail -f /var/log/mail.log&lt;/p&gt; &lt;p&gt;At this point you should have a functional spamfilter and should see something like:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;Jun 13 12:18:23 hoshi MailScanner[26388]: MailScanner E-Mail Virus Scanner version 4.20-3 starting...&lt;br /&gt;Jun 13 12:18:24 hoshi MailScanner[26388]: Config: calling custom init function MailWatchLogging&lt;br /&gt;Jun 13 12:18:24 hoshi MailScanner[26388]: Initialising database connection&lt;br /&gt;Jun 13 12:18:24 hoshi MailScanner[26388]: Finished initialising database connection&lt;/p&gt; &lt;p&gt;Congratulations - you now have MailScanner logging to MySQL.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.16 Test the MailWatch interface&lt;/h4&gt; &lt;p&gt;Point your browser to &lt;span class=&quot;system&quot;&gt;http://&lt;hostname&gt;/mailscanner/&lt;/hostname&gt;&lt;/span&gt; - you should be prompted for a username and password - enter the details of the MailWatch web user that you created earlier, and you should see a list of the last 50 messages processed by MailScanner.&lt;/p&gt; &lt;p&gt;If you&#39;re not able to see the mails, then you may have to set the following persmissions:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;chgrp -R www-data /var/spool/MailScanner&lt;/p&gt; &lt;p&gt;You may have to create the following to prevent an error in a lint test:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mkdir /var/www/.spamassassin&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.17 Fix for Ubuntu 8.04 (kept removing directories upon reboot)&lt;/h4&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;/etc/rc.local&lt;/span&gt; and add the following before the exit line:&lt;/p&gt; &lt;pre&gt;mkdir /var/run/MailScanner&lt;br /&gt;mkdir /var/lock/subsys&lt;br /&gt;mkdir /var/lock/subsys/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/run/MailScanner&lt;br /&gt;chown -R postfix:www-data /var/lock/subsys/MailScanner&lt;br /&gt;/etc/init.d/postfix restart&lt;br /&gt;/etc/init.d/mailscanner restart&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.18 Update the SpamAssassin Rules table&lt;/h4&gt; &lt;p&gt;MailWatch keeps a list of all the SpamAssassin rules and descriptions which are displayed on the &#39;Message Detail&#39; page - to show the descriptions, you need to run the updater every time you add new rules or upgrade SpamAssassin. Click on the &#39;Tools/Links&#39; menu and select &#39;Update SpamAssassin Rule Descriptions&#39; and click &#39;Run Now&#39;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.19 Update the GeoIP database&lt;/h4&gt; &lt;p&gt;Change &lt;span class=&quot;system&quot;&gt;/var/www/mailscanner/geoip_update.php&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /var/www/mailscanner/geoip_update.php&lt;/p&gt; &lt;pre&gt;dbquery(&quot;LOAD DATA INFILE&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;dbquery(&quot;LOAD DATA LOCAL INFILE&lt;/pre&gt; &lt;p&gt;Make sure you have &lt;span class=&quot;system&quot;&gt;allow_url_fopen = On&lt;/span&gt; in your &lt;span class=&quot;system&quot;&gt;php.ini&lt;/span&gt; set.&lt;/p&gt; &lt;p&gt;Click on the &#39;Tools/Links&#39; menu and select &#39;Update GeoIP database&#39; and click &#39;Run Now&#39;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.20 Setup the Mail Queue watcher (optional)&lt;/h4&gt; &lt;p&gt;You can get MailWatch to watch and display your sendmail or exim queue directories - all you need to do is copy &lt;span class=&quot;system&quot;&gt;mailq.php&lt;/span&gt; (from the root of the mailwatch tarball - not from the mailscanner directory - they are different!) to &lt;span class=&quot;system&quot;&gt;/usr/local/bin&lt;/span&gt; and set-up a cron-job to run it.&lt;/p&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;mailq.php&lt;/span&gt; first to change the require line to point to the location of &lt;span class=&quot;system&quot;&gt;functions.php&lt;/span&gt;, then:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; cp mailq.php /usr/local/bin&lt;br /&gt;crontab -e&lt;/p&gt; &lt;pre&gt;0-59 * * * * /usr/local/bin/mailq.php&lt;/pre&gt; &lt;p&gt;Note: &lt;span class=&quot;system&quot;&gt;mailq.php&lt;/span&gt; re-creates all entries on each run, so for busy sites you will probably want to change this to run every 5 minutes or greater.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.21 Setup the Sendmail Relay Log watcher (optional)&lt;/h4&gt; &lt;p&gt;You can get MailWatch to watch your sendmail logs and store all message relay information which is then displayed on the &#39;Message Detail&#39; page which helps debugging and makes it easy for a Helpdesk to actually see where a message was delivered to by the MTA and what the response back was (e.g. the remote queue id etc.).&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; cp tools/sendmail_relay.php /usr/local/bin&lt;br /&gt;nohup /usr/local/bin/sendmail_relay.php 2&gt;&amp;amp;1 &gt; /dev/null &amp;amp;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.22 Fix to allow wildcards in Whitelist/Blacklist&lt;/h4&gt; &lt;p&gt;Add the following to the bottom of the &lt;span class=&quot;system&quot;&gt;return 1&lt;/span&gt; section in your &lt;span class=&quot;system&quot;&gt;SQLBlackWhiteList.pm&lt;/span&gt;:&lt;/p&gt; &lt;pre&gt;return 1 if $BlackWhite-&gt;{$to}{&#39;*@&#39;.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{$to}{&#39;*@*.&#39;.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{$todomain}{&#39;*@&#39;.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{$todomain}{&#39;*@*.&#39;.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{&#39;default&#39;}{&#39;*@&#39;.$fromdomain};&lt;br /&gt;return 1 if $BlackWhite-&gt;{&#39;default&#39;}{&#39;*@*.&#39;.$fromdomain};&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.23 Fix for the Reporting Function in Message Operations&lt;/h4&gt; &lt;p&gt;Change the following in &lt;span class=&quot;system&quot;&gt;/var/www/mailscanner/do_message_ops.php&lt;/span&gt; file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /var/www/mailscanner/do_message_ops.php&lt;/p&gt; &lt;pre&gt;$id = $Regs[1];&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;$id = str_replace(&quot;_&quot;, &quot;.&quot;,$Regs[1]);&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.24 Fix to Allow Quarantine Release of Messages&lt;/h4&gt; &lt;p&gt;Change the following in &lt;span class=&quot;system&quot;&gt;/var/www/mailscanner/conf.php&lt;/span&gt; file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /var/www/mailscanner/conf.php&lt;/p&gt; &lt;pre&gt;define(QUARANTINE_USE_SENDMAIL, false);&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt; &lt;pre&gt;define(QUARANTINE_USE_SENDMAIL, true);&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;9.25 Fix to Allow Correct ClamAV Status&lt;/h4&gt; &lt;p&gt;Change the following in &lt;span class=&quot;system&quot;&gt;/var/www/mailscanner/clamav_status.php&lt;/span&gt; file:&lt;/p&gt; &lt;pre&gt;&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;titles&quot;&gt;&lt;div class=&quot;next&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved.&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6938693074450018155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6938693074450018155'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7354144043478323624</id><published>2008-05-01T00:24:00.003-07:00</published><updated>2008-05-03T00:26:51.652-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04</title><content type='html'>&lt;h4 style=&quot;font-weight: normal;&quot;&gt;Author : Rocky&lt;/h4&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;6.3 Postfix Anti-Spam Settings&lt;/span&gt; &lt;h4&gt;6.3.1 smtpd_helo_required&lt;/h4&gt; &lt;p&gt;Make any connecting mail server do a proper smtp &quot;handshake&quot; and announce its name. Internet RFCs require this, so we do too.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;smtpd_helo_required = yes&quot;&lt;/p&gt; &lt;p&gt;I also changed the smtpd_banner to &quot;$myhostname ESMTP $mail_name SpamSnake&quot;.&lt;/p&gt; &lt;p&gt;Preface: Postfix&#39; restriction stages are as follows, and are processed in the following order:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;smtpd_client_restrictions&lt;br /&gt;smtpd_helo_restrictions&lt;br /&gt;smtpd_sender_restrictions&lt;br /&gt;smtpd_recipient_restrictions&lt;br /&gt;smtpd_data_restrictions&lt;/p&gt; &lt;p&gt;We are only going to place entries in the last three restriction stages. Restriction stages are processed in this order regardless of the order listed in main.cf.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.2 smtpd_sender_restrictions&lt;/h4&gt; &lt;p&gt;This restriction stage restricts what sender addresses this system accepts in MAIL FROM: commands (the envelope sender). We will place three tests (restrictions) in this restriction stage.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.4 check_sender_access (Optional)&lt;/h4&gt; &lt;p&gt;Here we ask Postfix to compare the envelope sender to entries in an &lt;span class=&quot;system&quot;&gt;/etc/postfix/sender_access&lt;/span&gt; database and act upon those entries if a match is found. We also define what action is taken there (OK, DUNNO, REJECT etc.) on a sender by sender basis. If the sender is not listed in the file, the test evaluates to DUNNO, and the next test is performed.&lt;/p&gt;&lt;h4&gt;6.3.5 reject_non_fqdn_sender&lt;/h4&gt; &lt;p&gt;Reject when the envelope sender mail address is not in the proper format.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.6 reject_unknown_sender_domain&lt;/h4&gt; &lt;p&gt;Reject when the envelope sender&#39;s domain part of the mail address has no DNS &quot;A&quot; or &quot;MX&quot; record at all. On occasion, you will see in a report that someone you wish to receive mail from has been rejected by this setting. One possible cause of this is when legitimate senders deliberately use bogus domain names so you will not reply to them. This is where the sender access list comes in handy. You can give them an OK there, and this test will be bypassed.&lt;/p&gt; &lt;p&gt;Now to implement these three restrictions:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access, reject_non_fqdn_sender, reject_unknown_sender_domain&quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.7 smtpd_recipient_restrictions&lt;/h4&gt; &lt;p&gt;The access restrictions that the Postfix SMTP server applies in the context of the RCPT TO: command. This refers to the &quot;envelope recipient&quot; which is what the client gave in the &quot;RCPT TO:&quot; line during the SMTP session, not the header &quot;To:&quot; line. Let&#39;s look at those specific restrictions (tests) we place in smtpd_recipient_restrictions:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.8 permit_mynetworks&lt;/h4&gt; &lt;p&gt;Allows machines listed in &quot;mynetworks&quot; to skip the rest of the tests in this restriction stage (permit = OK). In other words, it exits this stage and is tested in the next stage (smtpd_data_restrictions). Because permit_mynetworks is placed in front of reject_unauth_destination, this means machines in $mynetworks are allowed to relay mail to any domain. Without this, we would only be able to send mail to our own domain(s). If the IP address of the sender is not listed in $mynetworks, the test evaluates to &quot;DUNNO&quot; and continues on to the next test (reject_unauth_destination).&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.9 reject_unauth_destination &amp;amp; reject_unknown_recipient_domain&lt;/h4&gt; &lt;p&gt;This, along with permit_mynetworks is used for relay control. This setting, in essence, means that mail bound for any domain that we have not configured our machine to accept mail for will be rejected. In our case Postfix will use the relay_domains setting (or table) that we configured earlier to determine what domains those are. If the domain is listed in relay_domains, this test evaluates to &quot;DUNNO&quot; and the session is allowed to go on to the next test (if any).&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.10 reject_unauth_pipelining&lt;/h4&gt; &lt;p&gt;Rejects bulk mailers that attempt to use pipelining to speed delivery, without checking if it is supported first (non-RFC, common among spammers).&lt;/p&gt; &lt;p&gt;Now to implement these three restrictions:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;smtpd_recipient_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_rbl_client zen.spamhaus.org&quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.11 smtpd_data_restrictions&lt;/h4&gt; &lt;p&gt;Optional access restrictions that the Postfix SMTP server applies in the context of the SMTP DATA: command. Like smtpd_recipient_restrictions, this is a restriction stage.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.12 reject_unauth_pipelining&lt;/h4&gt; &lt;p&gt;I repeat this setting in smtpd_data_restrictions as it is not always effective when placed in smtpd_recipient_restrictions. I include it in smtpd_recipient_restrictions as I like to place it prior to any policy servers. Note that there are only a couple of restrictions that make good use of smtpd_data_restrictions.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;smtpd_data_restrictions = reject_unauth_pipelining&quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.13 /etc/postfix/sender_access&lt;/h4&gt; &lt;p&gt;We referenced this file in smtpd_sender_restrictions. We use this file to check the sender right at the front door. In this file, we&#39;ll list certain senders/domains/IPaddress ranges for special handling. Below are bogus examples, create your own as you see fit. Please read &lt;span class=&quot;system&quot;&gt;/etc/postfix/sender_access&lt;/span&gt; for more information. Although you could use this file for various purposes, considering the way we have set this up in smtpd_sender_restrictions, I suggest using it to either blacklist senders, or allow certain senders to bypass the remaining tests in &lt;span class=&quot;system&quot;&gt;smtpd_sender_restrictions&lt;/span&gt;.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/sender_access&lt;/p&gt; &lt;pre&gt;#Example sender access map file&lt;br /&gt;makeabuck@mlm.tld 550 No MLM thanks&lt;br /&gt;allspam.tld 550 Spam is not accepted here&lt;br /&gt;badguy.net REJECT&lt;br /&gt;justaspamminfool@allspamallthetime.com REJECT&lt;br /&gt;newsletter-favorite-lug.org OK&lt;br /&gt;my-really-l337-test-domain.com OK&lt;/pre&gt; &lt;p&gt;Since this is a hash table, you need to postmap it as usual:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postmap /etc/postfix/sender_access&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.3.14 Final Look at the Postfix Install&lt;/h4&gt; &lt;p&gt;Review changes:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;less /etc/postfix/main.cf&lt;/p&gt; &lt;p&gt;Check the contents of the file for errors and repair if needed. Fire up Postfix:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postfix start&lt;/p&gt; &lt;p&gt;Check that Postfix responds:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;telnet 127.0.0.1 25&lt;/p&gt; &lt;p&gt;You should see:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;220 [yourFQDNhere] ESMTP Postfix (Ubuntu)&lt;/p&gt; &lt;p&gt;Hit [enter] a few times; then type &lt;span class=&quot;system&quot;&gt;quit&lt;/span&gt; to exit.&lt;/p&gt; &lt;p&gt;If it does not reply in this manner, open another terminal window and stop Postfix:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; postfix stop&lt;/p&gt; &lt;p&gt; Make sure you ran &lt;span class=&quot;system&quot;&gt;newaliases&lt;/span&gt; and all the &lt;span class=&quot;system&quot;&gt;postmap&lt;/span&gt; commands above. Check all the settings in main.cf and master.cf. Any time you make changes to master.cf or main.cf or to data tables, most (not all) of the time, it is required that you to reload Postfix with:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postfix reload&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;7 Pyzor, Razor, DCC, SpamAssassin and MailScanner Configuration&lt;/h3&gt; &lt;h4&gt;7.1 Install MailScanner&lt;/h4&gt; &lt;p&gt;Install MailScanner Dependencies by doing the following:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install libconvert-tnef-perl libdbd-sqlite3-perl libfilesys-df-perl libmailtools-perl libmime-tools-perl libmime-perl libnet-cidr-perl libsys-syslog-perl libio-stringy-perl libfile-temp-perl&lt;/p&gt; &lt;p&gt;Install MailScanner from the Debian .deb Source:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;wget http://debian.intergenia.de/debian/pool/main/m/mailscanner/mailscanner_4.68.8-1_all.deb&lt;br /&gt;dpkg -i mailscanner_4.68.8-1_all.deb&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;7.2 Pyzor Configuration&lt;/h4&gt; &lt;p&gt;We need to change some permissions on pyzor first:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;chmod -R a+rX /usr/share/doc/pyzor /usr/bin/pyzor /usr/bin/pyzord&lt;br /&gt;chmod -R a+rxX /usr/share/python-support/pyzor&lt;/p&gt; &lt;p&gt;Here we supply the IP address of the Pyzor server to Pyzor. This will create the server&#39;s IP address in a servers file therein. Then it will test the connection. If you are behind a firewall, open port 24441/udp in and out to your server. While you&#39;re at it also open up 6277/udp for DCC, 2703/tcp for Razor and 783/tcp for SpamAssassin:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;pyzor --homedir /var/lib/MailScanner discover&lt;br /&gt;pyzor ping&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;7.3 Razor Configuration&lt;/h4&gt; &lt;p&gt;Create the .razor configuration:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd&lt;br /&gt;rm /etc/razor/razor-agent.conf&lt;br /&gt;mkdir /var/lib/MailScanner/.razor&lt;br /&gt;razor-admin -home=/var/lib/MailScanner/.razor -create&lt;br /&gt;razor-admin -home=/var/lib/MailScanner/.razor -discover&lt;br /&gt;razor-admin -home=/var/lib/MailScanner/.razor -register&lt;br /&gt;chown -R postfix:www-data /var/lib/MailScanner&lt;br /&gt;chmod -R ug+rwx /var/lib/MailScanner&lt;/p&gt; &lt;p&gt;Make the following changes to &lt;span class=&quot;system&quot;&gt;/var/lib/MailScanner/.razor/razor-agent.conf&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /var/lib/MailScanner/.razor/razor-agent.conf&lt;/p&gt; &lt;p&gt;Change &lt;span class=&quot;system&quot;&gt;debuglevel = 3&lt;/span&gt; to &lt;span class=&quot;system&quot;&gt;debuglevel = 0&lt;/span&gt; (yes zero not &quot;o&quot;). This will prevent Razor from filling up your drive with debug information. Those two lines should look like this when done:&lt;/p&gt; &lt;pre&gt;debuglevel = 0&lt;br /&gt;razorhome = /var/lib/MailScanner/.razor/&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;7.4 DCC Setup and Configuration&lt;/h4&gt; &lt;p&gt;Install DCC from .deb source:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;wget http://launchpadlibrarian.net/11564361/dcc-server_1.3.42-5_i386.deb&lt;br /&gt;wget http://launchpadlibrarian.net/11564359/dcc-common_1.3.42-5_i386.deb&lt;br /&gt;dpkg -i dcc-common_1.3.42-5_i386.deb&lt;br /&gt;dpkg -i dcc-server_1.3.42-5_i386.deb&lt;/p&gt; &lt;p&gt;We are not running a DCC server, so we don&#39;t need to waste time checking ourselves.&lt;br /&gt;Once the installation is done run:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cdcc &quot;delete 127.0.0.1&quot;&lt;br /&gt;cdcc &quot;delete 127.0.0.1 Greylist&quot;&lt;/p&gt; &lt;p&gt;Test our installation with:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cdcc info&lt;/p&gt; &lt;p&gt;You should get &#39;requests ok&#39; from the servers.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;8 Configuring MailScanner and ClamAV&lt;/h3&gt; &lt;h4&gt;8.1 Stop Postfix:&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;postfix stop&lt;/p&gt; &lt;p&gt;Install the packages:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install clamav clamav-daemon&lt;/p&gt; &lt;p&gt;Update ClamAV virus defenitions:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;freshclam&lt;/p&gt; &lt;p&gt;Once that is done, we need to make a directory for SpamAssassin in the spool and give postfix permissions to it, if you run sa-learn --force as root, bayes databese that is stored in these directories will change to root:root and spamassassin will error looking at the db. Just keep an eye on the mail.log and you&#39;ll remember to change the permissions back. Also disable the MailScanner default configs:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mkdir /var/spool/MailScanner/spamassassin&lt;/p&gt; &lt;p&gt;Backup your &lt;span class=&quot;system&quot;&gt;MailScanner.conf&lt;/span&gt; file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /etc/MailScanner/MailScanner.conf /etc/MailScanner/MailScanner.conf.back&lt;/p&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;MailScanner.conf&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/MailScanner/MailScanner.conf&lt;/p&gt; &lt;p&gt;Change the following parameters in &lt;span class=&quot;system&quot;&gt;MailScanner.conf&lt;/span&gt;:&lt;/p&gt; &lt;pre&gt;%org-name% = ORGNAME&lt;br /&gt;%org-long-name% = ORGFULLNAME&lt;br /&gt;%web-site% = ORGWEBSITE&lt;br /&gt;Run As User = postfix&lt;br /&gt;Run As Group = postfix&lt;br /&gt;Incoming Queue Dir = /var/spool/postfix/hold&lt;br /&gt;Outgoing Queue Dir = /var/spool/postfix/incoming&lt;br /&gt;MTA = postfix&lt;br /&gt;Virus Scanners = clamav&lt;br /&gt;Spam Subject Text = ***SPAM***&lt;br /&gt;Send Notices = no&lt;br /&gt;Spam List = spamcop.net SBL+XBL&lt;br /&gt;Required SpamAssassin Score = 6&lt;br /&gt;High SpamAssassin Score = 10&lt;br /&gt;Spam Actions = deliver&lt;br /&gt;High Scoring Spam Actions = delete&lt;br /&gt;Rebuild Bayes Every = 0&lt;br /&gt;Wait During Bayes Rebuild = no&lt;br /&gt;SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin&lt;/pre&gt; &lt;p&gt;The first 9 lines are basically required in order for everything to work, the rest are recommended.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.2 header_checks &amp;amp; body_checks&lt;/h4&gt; &lt;p&gt;Let&#39;s go ahead and put this in main.cf. header_checks is required because it allows us to hold all incoming email in order for MailScanner to do its thing:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;header_checks = regexp:/etc/postfix/header_checks&quot;&lt;/p&gt; &lt;p&gt;Edit header_checks:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/header_checks&lt;/p&gt; &lt;p&gt;Add this line to the header_checks file, without it MailScanner will not work:&lt;/p&gt; &lt;pre&gt;/^Received:/ HOLD&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.3 Fix to Disable Permission Checks on MailScanner Directories&lt;/h4&gt; &lt;p&gt;Comment out the lines that check directory permissions on &lt;span class=&quot;system&quot;&gt;/var/*&lt;/span&gt; in &lt;span class=&quot;system&quot;&gt;/etc/rc2.d/S20mailscanner&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;In the file &lt;span class=&quot;system&quot;&gt;/etc/default/mailscanner&lt;/span&gt;, make sure this parameter is at 1:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/default/mailscanner&lt;/p&gt; &lt;pre&gt;run_mailscanner=1&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.4 MailScanner Webmin Plugin (Optional)&lt;/h4&gt; &lt;p&gt;Login to Webmin, &lt;span class=&quot;system&quot;&gt;https://localhost:10000&lt;/span&gt;, and install the MailScanner module for webmin found at &lt;a href=&quot;http://internap.dl.sourceforge.net/sourceforge/msfrontend/webmin-module-1.1-4.wbm&quot; target=&quot;_blank&quot;&gt;http://internap.dl.sourceforge.net/sourceforge/msfrontend/webmin-module-1.1-4.wbm&lt;/a&gt;. After this is done, you&#39;ll have to enter the following into your mailscanner module to get it to work:&lt;/p&gt; &lt;p&gt;Full path to MailScanner program &lt;span class=&quot;system&quot;&gt;/etc/init.d/mailscanner&lt;/span&gt;&lt;br /&gt;Full path and filename of MailScanner config file &lt;span class=&quot;system&quot;&gt;/etc/MailScanner/MailScanner.conf&lt;/span&gt;&lt;br /&gt;Full path to the MailScanner bin directory &lt;span class=&quot;system&quot;&gt;/usr/sbin&lt;/span&gt;&lt;br /&gt;Full path and filename for the MailScanner pid file &lt;span class=&quot;system&quot;&gt;/var/run/MailScanner/MailScanner.pid&lt;/span&gt;&lt;br /&gt;Command to start MailScanner &lt;span class=&quot;system&quot;&gt;/etc/init.d/mailscanner start&lt;/span&gt;&lt;br /&gt;Command to stop MailScanner &lt;span class=&quot;system&quot;&gt;/etc/init.d/mailscanner stop&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;8.5 You can now start the system&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/mailscanner start&lt;br /&gt;/etc/init.d/postfix start&lt;/p&gt; &lt;p&gt;Check your logs for errors:&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;tail -f /var/log/mail.log&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;div class=&quot;titles&quot;&gt;&lt;div class=&quot;prev&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;next&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7354144043478323624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7354144043478323624'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8265815703165174862</id><published>2008-05-01T00:19:00.002-07:00</published><updated>2008-05-03T00:25:32.065-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03</title><content type='html'>&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Author : Rocky&lt;/span&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2 DNS Server&lt;/h3&gt; &lt;p&gt;Run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install bind9&lt;/p&gt; &lt;p&gt;For security reasons we want to run BIND chrooted so we have to do the following steps:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/bind9 stop&lt;/p&gt; &lt;p&gt;Edit the file &lt;span class=&quot;system&quot;&gt;/etc/default/bind9&lt;/span&gt; so that the daemon will run as the unprivileged user bind, chrooted to &lt;span class=&quot;system&quot;&gt;/var/lib/named&lt;/span&gt;. Modify the line: &lt;span class=&quot;system&quot;&gt;OPTIONS=&quot;-u bind&quot;&lt;/span&gt; so that it reads &lt;span class=&quot;system&quot;&gt;OPTIONS=&quot;-u bind -t /var/lib/named&quot;&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/default/bind9 &lt;/p&gt;&lt;pre&gt;OPTIONS=&quot;-u bind -t /var/lib/named&quot;&lt;/pre&gt; &lt;p&gt;Create the necessary directories under &lt;span class=&quot;system&quot;&gt;/var/lib&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mkdir -p /var/lib/named/etc&lt;br /&gt;mkdir /var/lib/named/dev&lt;br /&gt;mkdir -p /var/lib/named/var/cache/bind&lt;br /&gt;mkdir -p /var/lib/named/var/run/bind/run&lt;/p&gt; &lt;p&gt;Then move the config directory from &lt;span class=&quot;system&quot;&gt;/etc&lt;/span&gt; to &lt;span class=&quot;system&quot;&gt;/var/lib/named/etc&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mv /etc/bind /var/lib/named/etc&lt;/p&gt; &lt;p&gt;Create a symlink to the new config directory from the old location (to avoid problems when bind gets updated in the future):&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;ln -s /var/lib/named/etc/bind /etc/bind&lt;/p&gt; &lt;p&gt;Make null and random devices, and fix permissions of the directories:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mknod /var/lib/named/dev/null c 1 3&lt;br /&gt;mknod /var/lib/named/dev/random c 1 8&lt;br /&gt;chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random&lt;br /&gt;chown -R bind:bind /var/lib/named/var/*&lt;br /&gt;chown -R bind:bind /var/lib/named/etc/bind&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We need to modify &lt;span class=&quot;system&quot;&gt;/etc/default/syslogd&lt;/span&gt; so that we can still get important messages logged to the system logs. Modify the line: &lt;span class=&quot;system&quot;&gt;SYSLOGD=&quot;&quot;&lt;/span&gt; so that it reads &lt;span class=&quot;system&quot;&gt;SYSLOGD=&quot;-a /var/lib/named/dev/log&quot;&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/default/syslogd&lt;/p&gt;&lt;pre&gt;SYSLOGD=&quot;-a /var/lib/named/dev/log&quot;&lt;/pre&gt; &lt;p&gt;Restart the logging daemon:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/sysklogd restart&lt;/p&gt; &lt;p&gt;Start up BIND, and check &lt;span class=&quot;system&quot;&gt;/var/log/syslog&lt;/span&gt; for errors:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/bind9 start&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;3 MySQL&lt;/h3&gt; &lt;p&gt;In order to install MySQL, we run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install mysql-server mysql-client libmysqlclient15-dev&lt;/p&gt; &lt;p&gt;You will be asked to provide a password for the MySQL root user - this password is valid for the user &lt;span class=&quot;system&quot;&gt;root@localhost&lt;/span&gt; as well as &lt;span class=&quot;system&quot;&gt;root@server1.example.com&lt;/span&gt;, so we don&#39;t have to specify a MySQL root password manually later on (as was the case with previous Ubuntu versions):&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;system&quot;&gt;New password for the MySQL &quot;root&quot; user:&lt;/span&gt; &lt;span class=&quot;highlight&quot;&gt;&lt;-- yourrootsqlpassword&lt;/span&gt;&lt;/p&gt; &lt;p&gt;We want MySQL to listen on all interfaces, not just localhost, therefore we edit &lt;span class=&quot;system&quot;&gt;/etc/mysql/my.cnf&lt;/span&gt; and comment out the line &lt;span class=&quot;system&quot;&gt;bind-address = 127.0.0.1&lt;/span&gt;:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/mysql/my.cnf&lt;/p&gt;&lt;pre&gt;#bind-address =127.0.0.1&lt;/pre&gt; &lt;p&gt;Then we restart MySQL:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/mysql restart&lt;/p&gt; &lt;p&gt;Now check that networking is enabled. Run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;netstat -tap | grep mysql&lt;/p&gt; &lt;p&gt;The output should look like this:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;tcp 0 0 *:mysql *.* LISTEN 5286/mysqld&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;4 Apache with PHP5 and Ruby&lt;/h3&gt; &lt;p&gt;Now we install Apache:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert&lt;/p&gt; &lt;p&gt;Next we install PHP5 and Ruby (both as Apache modules):&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-sqlite php5-tidy php5-xmlrpc php5-xsl&lt;/p&gt; &lt;p&gt;You will be asked the following question:&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;system&quot;&gt;Continue installing libc-client without Maildir support?&lt;/span&gt; &lt;span class=&quot;highlight&quot;&gt;&lt;-- Yes&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Next we edit &lt;span class=&quot;system&quot;&gt;/etc/apache2/mods-available/dir.conf&lt;/span&gt; and change the following:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/apache2/mods-available/dir.conf&lt;/p&gt;&lt;pre&gt;DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml&lt;/pre&gt; &lt;p&gt;Now we have to enable some Apache modules (SSL, rewrite, suexec, and include):&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;a2enmod ssl&lt;br /&gt;a2enmod rewrite&lt;br /&gt;a2enmod suexec&lt;br /&gt;a2enmod include&lt;/p&gt; &lt;p&gt;Reload the Apache configuration:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/apache2 force-reload&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;4.1 Fix for Imagick&lt;/h4&gt; &lt;p&gt;Because of a bug that causes the following error, the below must be done as a workaround:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;PHP Warning: PHP Startup: Unable to load dynamic library &#39;/usr/lib/php5/20060613/imagick.so&#39; - libWand.so.9: cannot open shared object file: No such file or directory in Unknown on line 0&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get remove php5-imagick&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install libmagick9-dev&lt;/p&gt; &lt;p class=&quot;command&quot; editor_id=&quot;mce_editor_0&quot;&gt;pecl install imagick&lt;/p&gt; &lt;p editor_id=&quot;mce_editor_0&quot;&gt;Edit /etc/php5/apache2/php.ini and add the following:&lt;/p&gt; &lt;p editor_id=&quot;mce_editor_0&quot;&gt; &lt;/p&gt; &lt;p editor_id=&quot;mce_editor_0&quot;&gt;&lt;span class=&quot;command&quot; editor_id=&quot;mce_editor_0&quot;&gt;extension=imagick.so&lt;/span&gt;&lt;/p&gt; &lt;p editor_id=&quot;mce_editor_0&quot;&gt;&lt;span class=&quot;command&quot; editor_id=&quot;mce_editor_0&quot;&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class=&quot;command&quot; editor_id=&quot;mce_editor_0&quot;&gt;/etc/init.d/apache2 restart&lt;/p&gt; &lt;p editor_id=&quot;mce_editor_0&quot;&gt; &lt;/p&gt; &lt;h3&gt;5 Synchronize the System Clock&lt;/h3&gt; &lt;p&gt;It is a good idea to synchronize the system clock with an NTP (network time protocol) server over the internet. Simply run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install ntp ntpdate&lt;/p&gt; &lt;p&gt;and your system time will always be in sync.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;6 Setting up Postfix&lt;/h3&gt; &lt;p class=&quot;command&quot;&gt;apt-get install postfix postfix-pcre postfix-mysql postfix-ldap cabextract lha unrar razor pyzor spamassassin&lt;/p&gt; &lt;p&gt;You will be asked two questions. Answer as follows:&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;system&quot;&gt;General type of mail configuration:&lt;/span&gt; &lt;span class=&quot;highlight&quot;&gt;&lt;-- Internet Site&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;system&quot;&gt;System mail name:&lt;/span&gt; &lt;span class=&quot;highlight&quot;&gt;&lt;-- server1.example.com&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Stop Postfix:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postfix stop&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.1 Edit master.cf&lt;/h4&gt; &lt;p&gt;BTW watch for the two Postfix configuration files, both located in the &lt;span class=&quot;system&quot;&gt;/etc/postfix&lt;/span&gt; folder. More than one admin has gotten confused between &lt;span class=&quot;system&quot;&gt;master.cf&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;main.cf&lt;/span&gt;!&lt;/p&gt; &lt;p&gt;First back up the current master.cf:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /etc/postfix/master.cf /etc/postfix/master.cf-orig&lt;/p&gt; &lt;p&gt;Edit master.cf:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/master.cf&lt;/p&gt; &lt;p&gt;We need to add two items below the pickup service type. The pickup service &quot;picks up&quot; local mail (local meaning &quot;on this machine&quot;) and delivers it. This is a way to bypass content filtering for mail generated by this machine.&lt;/p&gt; &lt;p&gt;Add this just below the &#39;pickup&#39; service type:&lt;/p&gt;&lt;pre&gt;         -o content_filter=&lt;br /&gt;    -o receive_override_options=no_header_body_checks&lt;/pre&gt; &lt;p&gt;It should look like this when you are done:&lt;/p&gt;&lt;pre&gt;pickup fifo n - - 60 1 pickup&lt;br /&gt;-o content_filter=&lt;br /&gt;-o receive_override_options=no_header_body_checks&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2 Edit main.cf&lt;/h4&gt; &lt;p&gt;First we need to backup the main.cf file.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /etc/postfix/main.cf /etc/postfix/main.cf-orig&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.1 alias_maps&lt;/h4&gt; &lt;p&gt;We simply need to make a correction to the default setting here:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;alias_maps = hash:/etc/aliases&quot;&lt;/p&gt; &lt;p&gt;Create the aliases file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;newaliases&lt;/p&gt; &lt;p&gt;Since our system will be configured not to store any local mails, this will be ignored.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.2 myorigin&lt;/h4&gt; &lt;p&gt;The domain name that mail created on this machine appears to come from. For example, if cron sends mail to &quot;mnight@secretgovagency.gov&quot; it will appear to come from &quot;root@example.com&quot;.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;myorigin = example.com&quot;&lt;/p&gt; &lt;p&gt;Obviously, in the above, and all the following commands, replace my example parameters, like &quot;example.com&quot;, with your own specific values.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.3 myhostname&lt;/h4&gt; &lt;p&gt;The fully-qualified domain name (FQDN) of the machine running the Postfix system.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;myhostname = server1.example.com&quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.4 mynetworks&lt;/h4&gt; &lt;p&gt;These are the machines I trust, and will relay mail for, to any destination. If you will be dealing with multiple internal mail servers, and/or want to allow several machines and/or subnets to relay through this server (careful!), just add them to this parameter in CIDR format and seperate the networks like this:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;mynetworks = 127.0.0.0/8, 192.168.0.0/24&quot;&lt;/p&gt; &lt;p&gt;The &lt;span class=&quot;system&quot;&gt;127.0.0.0/8&lt;/span&gt; is there to allow the local server to send, you need to at least put this one in.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.4.1 outbound trusted relay IP&lt;/h4&gt; &lt;p&gt;If you&#39;d like your SpamSnake to handle outgoing emails as well, be sure to add your local network to the list e.g. &lt;span class=&quot;system&quot;&gt;192.168.0.0/24 172.16.0.0/16&lt;/span&gt;. If your mailserver is &lt;span class=&quot;system&quot;&gt;172.16.5.20&lt;/span&gt; and you only want to trust only that IP, add &lt;span class=&quot;system&quot;&gt;172.16.5.20/32&lt;/span&gt;. You just have to setup your mailserver to relay (smarthost) to your SpamSnake.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.5 message_size_limit&lt;/h4&gt; &lt;p&gt;Maximum size email that Postfix will let in the &quot;front door&quot;.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;message_size_limit = 10485760&quot;&lt;/p&gt; &lt;p&gt;The above allows email up to 10MB, the value is in bytes (10*1024*1024). Mail larger than this may possibly get bypassed by the anti-virus scanner (ClamAV). You could increase this if you also configure ClamAV to scan files larger than 10MB. If you allow messages larger than 10MB, keep an eye on RAM.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.6 local_transport&lt;/h4&gt; &lt;p&gt;Return an error message for local delivery attempts.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;local_transport = error:No local mail delivery&quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.7 mydestination&lt;/h4&gt; &lt;p&gt;An empty mydestination tells Postfix this machine is not the final destination.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;mydestination = &quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.8 local_recipient_maps&lt;/h4&gt; &lt;p&gt;An empty local_recipient_maps tells Postfix there are no local mailboxes.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;local_recipient_maps = &quot;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.9 virtual_alias_maps&lt;/h4&gt; &lt;p&gt;Our spamfilter must be able to receive mail for postmaster@yourIP. Reportedly, some things actually expect this ability to exist. We will also allow mail to abuse@yourIP. Since we do not allow local mail delivery, mail addressed to our spamfilter&#39;s IP address will get rejected with an error message. Setting up virtual_alias_maps allows email to these two accounts to be forwarded to an inside address. Make sure your Exchange server is set up to receive messages addressed to &quot;root&quot;, &quot;postmaster&quot; and &quot;abuse&quot;.&lt;/p&gt; &lt;p&gt;Set up a reference to the virtual file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;virtual_alias_maps = hash:/etc/postfix/virtual&quot;&lt;/p&gt; &lt;p&gt;Then edit the virtual file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/virtual&lt;/p&gt; &lt;p&gt;Add these lines to the top of the virtual file:&lt;/p&gt;&lt;pre&gt;postmaster postmaster@example.com&lt;br /&gt;abuse abuse@example.com&lt;br /&gt;root root@example.com&lt;/pre&gt; &lt;p&gt;Save and exit the file, then create the binary file that Postfix will use:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postmap /etc/postfix/virtual&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.10 relay_recipient_maps&lt;/h4&gt; &lt;p&gt;We are going to build a table of every single user in every single domain that we accept mail for.&lt;/p&gt; &lt;p&gt;Set up a reference to a file we will create to store the data:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;relay_recipient_maps = hash:/etc/postfix/relay_recipients&quot;&lt;/p&gt; &lt;p&gt;Then edit relay_recipients:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/relay_recipients&lt;/p&gt; &lt;p&gt;For the moment, we are going to accept mail for all users in our domain(s) so enter each domain you accept mail for in the following format:&lt;/p&gt;&lt;pre&gt;@example.com OK&lt;br /&gt;@example2.com OK&lt;/pre&gt; &lt;p&gt;Then create the binary file that Postfix will use:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postmap /etc/postfix/relay_recipients&lt;/p&gt; &lt;p&gt;The entries above are temporary. They are wildcards that allow mail to your domains. You MUST remove the entries above at some point in the near future and replace them with every single one of your valid recipients&#39; email addresses. When you are ready to enter each user individually in the relay_recipients file, you would first remove (or comment out) the data above that allows mail to all users in the domain, and then list each user individually in the form:&lt;/p&gt;&lt;pre&gt;admin@example.com OK&lt;br /&gt;admin@example2.com OK&lt;/pre&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.11 transport_maps&lt;/h4&gt; &lt;p&gt;Tells Postfix where to look for a transport file. We use the transport file to tell Postfix where to forward valid mail for our domain(s). Setting up transport is similar to setting up relay_recipients.&lt;/p&gt; &lt;p&gt;Create a reference to it in main.cf:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;transport_maps = hash:/etc/postfix/transport&quot;&lt;/p&gt; &lt;p&gt;Then edit transport:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/transport&lt;/p&gt; &lt;p&gt;Add 1 new line for each domain for which you will be handling mail, similar to the example below. The IP address is that of whatever server is the final destination of messages addressed to our domain(s) (our Exchange server). It does not matter where you place these items in the file, but I like to put them at the top.&lt;/p&gt;&lt;pre&gt;example.com smtp:[192.168.0.x]&lt;br /&gt;example2.com smtp:[192.168.0.x]&lt;/pre&gt; &lt;p&gt;Include the brackets on these lines!. You can also use FQDN hostname instead of an IP address (i.e. &lt;span class=&quot;system&quot;&gt;smtp:[exchange1.example.com]&lt;/span&gt;).&lt;/p&gt; &lt;p&gt;Now to create the binary file Postfix will use:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postmap /etc/postfix/transport&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;6.2.12 relay_domains&lt;/h4&gt; &lt;p&gt;What destination domains (and subdomains thereof) this system will relay mail for.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postconf -e &quot;relay_domains = hash:/etc/postfix/relay_domains&quot;&lt;/p&gt; &lt;p&gt;Edit relay_domains:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/postfix/relay_domains&lt;/p&gt; &lt;p&gt;Add 1 new line for each domain for which you will be handling mail, similar to the example below:&lt;/p&gt;&lt;pre&gt;example.com OK&lt;br /&gt;example2.com OK&lt;/pre&gt; &lt;p&gt;This file currently has a very similar format to &lt;span class=&quot;system&quot;&gt;relay_recipients&lt;/span&gt; do not mistake the two. This file cannot have &#39;@&#39; in front of the domain name. Just thought I&#39;d mention it, some very smart people have been known to have done this...&lt;/p&gt; &lt;p&gt;Then create the binary file Postfix will use:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;postmap /etc/postfix/relay_domains&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 01&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;div class=&quot;titles&quot;&gt;&lt;div class=&quot;prev&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;next&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt; &lt;p class=&quot;command&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;command&quot;&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8265815703165174862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8265815703165174862'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-1768749291021115371</id><published>2008-05-01T00:13:00.000-07:00</published><updated>2008-05-02T18:57:28.283-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02</title><content type='html'>&lt;h4&gt;1.3 Enable The root Account&lt;/h4&gt; &lt;p&gt;After the reboot you can log in with your previously created username (e.g. &lt;span class=&quot;system&quot;&gt;administrator&lt;/span&gt;). Because we must run all the steps from this tutorial as root user, we must enable the root account now. Run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sudo passwd root&lt;/p&gt; &lt;p&gt;and give root a password. Afterwards we become root by running&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;su&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.4 Install vim-full (Optional)&lt;/h4&gt; &lt;p&gt;I&#39;ll use vi as my text editor in this tutorial. The default vi program has some strange behaviour on Ubuntu and Debian; to fix this, we install vim-full:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install vim-full&lt;/p&gt; &lt;p&gt;(You don&#39;t have to do this if you use a different text editor such as joe or nano.)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.5 Configure The Network&lt;/h4&gt; &lt;p&gt;Because the Ubuntu installer has configured our system to get its network settings via DHCP, we have to change that now because a server should have a static IP address. Edit &lt;span class=&quot;system&quot;&gt;/etc/network/interfaces&lt;/span&gt; and adjust it to your needs (in this example setup I will use the IP address &lt;span class=&quot;system&quot;&gt;192.168.0.100&lt;/span&gt;):&lt;/p&gt;&lt;p&gt;&lt;iframe src=&quot;http://www.howtoforge.com/admedia/reste_300x250.php&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; frameborder=&quot;0&quot; height=&quot;250&quot; scrolling=&quot;no&quot; width=&quot;300&quot;&gt;&lt;/iframe&gt;  &lt;!-- END AD TAG --&gt;&lt;script type=&quot;text/javascript&quot;&gt; &lt;!-- document.write(&#39;&lt;/div&gt;&#39;); //--&gt; &lt;/script&gt; &lt;/p&gt;&lt;p class=&quot;command&quot;&gt;vi /etc/network/interfaces&lt;/p&gt; &lt;pre&gt;# This file describes the network interfaces available on your system&lt;br /&gt;# and how to activate them. For more information, see interfaces(5).&lt;br /&gt;&lt;br /&gt;# The loopback network interface&lt;br /&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;&lt;br /&gt;# The primary network interface&lt;br /&gt;auto eth0&lt;br /&gt;iface eth0 inet static&lt;br /&gt;      address 192.168.0.100&lt;br /&gt;      netmask 255.255.255.0&lt;br /&gt;      network 192.168.0.0&lt;br /&gt;      broadcast 192.168.0.255&lt;br /&gt;      gateway 192.168.0.1&lt;/pre&gt; &lt;p&gt;Then restart your network:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/networking restart&lt;/p&gt; &lt;p&gt;Then edit &lt;span class=&quot;system&quot;&gt;/etc/hosts&lt;/span&gt;. Make it look like this:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/hosts&lt;/p&gt; &lt;pre&gt;127.0.0.1       localhost.localdomain   localhost&lt;br /&gt;192.168.0.100   server1.example.com     server1&lt;br /&gt;&lt;br /&gt;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;::1     ip6-localhost ip6-loopback&lt;br /&gt;fe00::0 ip6-localnet&lt;br /&gt;ff00::0 ip6-mcastprefix&lt;br /&gt;ff02::1 ip6-allnodes&lt;br /&gt;ff02::2 ip6-allrouters&lt;br /&gt;ff02::3 ip6-allhosts&lt;/pre&gt; &lt;p&gt;Now run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;echo server1.example.com &gt; /etc/hostname&lt;br /&gt; /etc/init.d/hostname.sh start&lt;/p&gt; &lt;p&gt;Afterwards, run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;hostname&lt;br /&gt; hostname -f&lt;/p&gt; &lt;p&gt;Both should show &lt;span class=&quot;system&quot;&gt;server1.example.com&lt;/span&gt; now.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.6 Edit /etc/apt/sources.list And Update Your Linux Installation&lt;/h4&gt; &lt;p&gt;Edit &lt;span class=&quot;system&quot;&gt;/etc/apt/sources.list&lt;/span&gt;. Comment out or remove the installation CD from the file and make sure that the universe and multiverse repositories are enabled. It should look like this:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/apt/sources.list&lt;/p&gt; &lt;pre&gt;#&lt;br /&gt;# deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted&lt;br /&gt;&lt;br /&gt;#deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted&lt;br /&gt;# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to&lt;br /&gt;# newer versions of the distribution.&lt;br /&gt;&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted&lt;br /&gt;&lt;br /&gt;## Major bug fix updates produced after the final release of the&lt;br /&gt;## distribution.&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted&lt;br /&gt;&lt;br /&gt;## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu&lt;br /&gt;## team, and may not be under a free licence. Please satisfy yourself as to&lt;br /&gt;## your rights to use the software. Also, please note that software in&lt;br /&gt;## universe WILL NOT receive any review or updates from the Ubuntu security&lt;br /&gt;## team.&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy universe&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy universe&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe&lt;br /&gt;&lt;br /&gt;## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu&lt;br /&gt;## team, and may not be under a free licence. Please satisfy yourself as to&lt;br /&gt;## your rights to use the software. Also, please note that software in&lt;br /&gt;## multiverse WILL NOT receive any review or updates from the Ubuntu&lt;br /&gt;## security team.&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy multiverse&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy multiverse&lt;br /&gt;deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse&lt;br /&gt;deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse&lt;br /&gt;&lt;br /&gt;## Uncomment the following two lines to add software from the &#39;backports&#39;&lt;br /&gt;## repository.&lt;br /&gt;## N.B. software from this repository may not have been tested as&lt;br /&gt;## extensively as that contained in the main release, although it includes&lt;br /&gt;## newer versions of some applications which may provide useful features.&lt;br /&gt;## Also, please note that software in backports WILL NOT receive any review&lt;br /&gt;## or updates from the Ubuntu security team.&lt;br /&gt;# deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse&lt;br /&gt;# deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse&lt;br /&gt;&lt;br /&gt;## Uncomment the following two lines to add software from Canonical&#39;s&lt;br /&gt;## &#39;partner&#39; repository. This software is not part of Ubuntu, but is&lt;br /&gt;## offered by Canonical and the respective vendors as a service to Ubuntu&lt;br /&gt;## users.&lt;br /&gt;# deb http://archive.canonical.com/ubuntu hardy partner&lt;br /&gt;# deb-src http://archive.canonical.com/ubuntu hardy partner&lt;br /&gt;&lt;br /&gt;deb http://security.ubuntu.com/ubuntu hardy-security main restricted&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted&lt;br /&gt;deb http://security.ubuntu.com/ubuntu hardy-security universe&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu hardy-security universe&lt;br /&gt;deb http://security.ubuntu.com/ubuntu hardy-security multiverse&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu hardy-security multiverse&lt;/pre&gt; &lt;p&gt;Then run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get update&lt;/p&gt; &lt;p&gt;to update the apt package database and&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get upgrade&lt;/p&gt; &lt;p&gt;to install the latest updates (if there are any).&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt; 1.7 Change The Default Shell&lt;/h4&gt; &lt;p&gt;&lt;span class=&quot;system&quot;&gt;/bin/sh&lt;/span&gt; is a symlink to &lt;span class=&quot;system&quot;&gt;/bin/dash&lt;/span&gt;, however we need &lt;span class=&quot;system&quot;&gt;/bin/bash&lt;/span&gt;, not &lt;span class=&quot;system&quot;&gt;/bin/dash&lt;/span&gt;. Therefore we do this:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;ln -sf /bin/bash /bin/sh&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt; 1.8 Disable AppArmor&lt;/h4&gt; &lt;p&gt;AppArmor is a security extension (similar to SELinux) that should provide extended security. In my opinion you don&#39;t need it to configure a secure system, and it usually causes more problems than advantages (think of it after you have done a week of trouble-shooting because some service wasn&#39;t working as expected, and then you find out that everything was ok, only AppArmor was causing the problem).&lt;/p&gt; &lt;p&gt;We can disable it like this:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/apparmor stop&lt;br /&gt; update-rc.d -f apparmor remove&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.9 Install Some Software&lt;/h4&gt; &lt;p&gt;Now we install a few packages that are needed later on. Run&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential dpkg-dev db4.3-util vim bzip2 perl-doc libwww-perl libdbi-perl libconvert-binhex-perl libmail-spf-query-perl rblcheck libnet-ident-perl tnef pax libberkeleydb-perl unzoo arj lzop nomarch arc zoo libdb-file-lock-perl&lt;/p&gt; &lt;p&gt;(This command must go into one line!)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.10 Install Unarj&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;cd /usr/src&lt;br /&gt; wget http://http.us.debian.org/debian/pool/main/a/arj/unarj_3.10.21-2_all.deb&lt;br /&gt; dpkg -i unarj_3.10.21-2_all.deb&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.11 Install Perl Modules(Pre-requisites) &lt;/h4&gt; &lt;p&gt;Can be installed via &lt;span class=&quot;system&quot;&gt;perl -MCPAN&lt;/span&gt; or Webmin. I find that doing this through Webmin is better.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;perl -MCPAN -e shell&lt;br /&gt; install Module::Build&lt;br /&gt; install Mail::SPF (Needed for SPF Checking)&lt;br /&gt; install NetAddr::IP (Needed for SPF Checking)&lt;br /&gt; install MLDBM::Sync this should also install MLDBM (Needed for MailWatch)&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install libdbd-mysql-perl libapache-dbi-perl (Needed for MailWatch)&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.12 Webmin&lt;/h4&gt; &lt;p class=&quot;command&quot;&gt;apt-get install libauthen-pam-perl libio-pty-perl libmd5-perl libnet-ssleay-perl&lt;/p&gt; &lt;p&gt;Download latest webmin using the following command:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;wget http://internap.dl.sourceforge.net/sourceforge/webadmin/webmin_1.410_all.deb&lt;/p&gt; &lt;p&gt;Now we have webmin_1.410_all.deb package; you need to install it using the following command:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sudo dpkg -i webmin_1.410_all.deb&lt;/p&gt; &lt;p&gt;If your server complains that there is some library it does not find, just run the following command&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sudo apt-get install -f&lt;/p&gt; &lt;p&gt;You should now be able to login to Webmin at the URL &lt;span class=&quot;system&quot;&gt;https://localhost:10000/&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.13 Remove Programs&lt;/h4&gt; &lt;p&gt;Now we also need to remove some programs, hopefully you don&#39;t need PCMCIA or printer support. This server will not need dial-up support either. You will not necessarily have all of these programs installed.&lt;/p&gt; &lt;p&gt;Uninstall the following software (all one line):&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get remove pcmciautils ubuntu-minimal pppoeconf ppp pppconfig&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.14 Cleaning up services&lt;/h4&gt; &lt;p&gt;Some services might still linger even after uninstalling the daemons. First we need to backup inet.d:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp -R /etc/init.d /etc/init.d.backup&lt;/p&gt; &lt;p&gt;Now we can stop all of the services that might be running which we don&#39;t need:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/pcmciautils stop&lt;br /&gt; update-rc.d -f pcmciautils remove&lt;/p&gt; &lt;p&gt;Disable all of the services we stopped:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-inetd --disable time&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-inetd --disable daytime&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-inetd --disable echo&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-inetd --disable chargen&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-inetd --disable ident&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-inetd --disable discard&lt;/p&gt; &lt;p&gt;The last one may ask you a question regarding &quot;multiple entries&quot;, answer yes (y).&lt;/p&gt; &lt;p&gt;Check that we got everything:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;lsof -i | grep LISTEN&lt;/p&gt; &lt;p&gt;The only daemon you should see at this point is &lt;span class=&quot;system&quot;&gt;*:ssh&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;miniserv&lt;/span&gt;. You may have to run this again:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-inetd --disable discard&lt;/p&gt; &lt;p&gt;If there are other programs shown, try rebooting and test again.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Copyright © 2008 Rocky&lt;br /&gt;All Rights Reserved.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1768749291021115371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/1768749291021115371'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8380913670732189219</id><published>2008-05-01T00:00:00.002-07:00</published><updated>2008-05-03T00:45:47.338-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>The Perfect SpamSnake - Ubuntu 8.04 LTS</title><content type='html'>&lt;h3&gt;Postfix w/Bayesian Filtering and Anti-Backscatter (Relay Recipients), Apache, Mysql, Bind, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), MailWatch, SPF Checks, FuzzyOcr, PDF/XLS/Phishing Sanesecurity Signatures, Postfix-GLD (Greylisting Optional), Logwatch Statistical Reporting (Optional), Outgoing Disclaimer with alterMIME (Optional)&lt;/h3&gt; &lt;p&gt;Version 2.0&lt;br /&gt;Author: Mohammed Alli&lt;/p&gt; &lt;p&gt;This tutorial shows how to set up an Ubuntu Hardy Heron (8.04 LTS) based server as a spamfilter in Gateway mode. In the end, you will have a SpamSnake Gateway which will relay clean emails to your MTA. You will also be able to view your incoming queue, train your SpamSnake and carry out a few more advanced operations via MailWatch.&lt;/p&gt; &lt;p&gt;I cannot offer any guarantees that this will work for you, the same way it’s working for me.&lt;/p&gt; &lt;p&gt;I will use the following software:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Web Server: Apache 2.2 with PHP 5.2.4 and Ruby&lt;/li&gt;&lt;li&gt;Database Server: MySQL 5.0&lt;/li&gt;&lt;li&gt;Mail Server: Postfix&lt;/li&gt;&lt;li&gt;DNS Server: BIND9&lt;/li&gt;&lt;li&gt;PHP: PHP5&lt;/li&gt;&lt;li&gt;MailScanner: MailScanner v4.68.8&lt;/li&gt;&lt;li&gt;MailWatch: MailWatch v1.0.4&lt;/li&gt;&lt;/ul&gt; &lt;p editor_id=&quot;mce_editor_0&quot;&gt;Credit goes to the guys at HowToForge and the developers of MailScanner and MailWatch.&lt;/p&gt;&lt;h3&gt;1 Requirements&lt;/h3&gt; &lt;p&gt;To install such a system you will need the following:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;The Ubuntu 8.04 LTS server CD, available here: &lt;a href=&quot;ftp://releases.ubuntu.com/releases/hardy/ubuntu-8.04-server-i386.iso&quot; mce_real_href=&quot;ftp://releases.ubuntu.com/releases/hardy/ubuntu-8.04-server-i386.iso&quot;&gt;ftp://releases.ubuntu.com/releases/hardy/ubuntu-8.04-server-i386.iso&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A fast internet connection.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.1 Preliminary Note&lt;/h4&gt; &lt;p&gt;In this tutorial I use the hostname &lt;span class=&quot;system&quot;&gt;server1.example.com&lt;/span&gt; with the IP address &lt;span class=&quot;system&quot;&gt;192.168.0.100&lt;/span&gt; and the gateway &lt;span class=&quot;system&quot;&gt;192.168.0.1&lt;/span&gt;. These settings might differ for you, so you have to replace them where appropriate.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;1.2 The Base System&lt;/h4&gt; &lt;p&gt;1. Insert your Ubuntu install CD into your system and boot from it. Select your language:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/1.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/1.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/1.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;2. Select Install to the hard disk:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/2.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/2.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/2.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;3. The installation starts, choose your language again:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/3.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/3.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/3.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;4. Then select your location:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/4.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/4.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/4.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Choose a keyboard layout (you will be asked to press a few keys, and the installer will try to detect your keyboard layout based on the keys you pressed):&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/6.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/6.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/6.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;5. The installer checks the installation CD, your hardware, and configures the network with DHCP if there is a DHCP server in the network:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/9.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/9.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/9.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/10.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/10.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/10.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/11.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/11.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/11.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enter the hostname. In this example, my system is called &lt;span class=&quot;system&quot;&gt;server1.example.com&lt;/span&gt;, so I enter &lt;span class=&quot;system&quot;&gt;server1&lt;/span&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/12.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/12.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/12.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;6. Now you have to partition your hard disk. For simplicity&#39;s sake I will create one big partition (with the mount point /) and a little swap partition so I select &lt;span class=&quot;system&quot;&gt;Guided - use entire disk&lt;/span&gt; (of course, the partitioning is totally up to you - if you like, you can create more than just one big partition, and you can also use LVM):&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/13.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/13.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/13.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Select the disk that you want to partition:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/14.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/14.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/14.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;When you&#39;re finished, hit &lt;span class=&quot;system&quot;&gt;Yes&lt;/span&gt; when you&#39;re asked &lt;span class=&quot;system&quot;&gt;Write the changes to disks?&lt;/span&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/15.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/15.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/15.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;/span&gt;Afterwards, your new partitions are being created and formatted.&lt;/p&gt; &lt;p&gt;7. Create a user, for example the user &lt;span class=&quot;system&quot;&gt;Administrator&lt;/span&gt; with the user name &lt;span class=&quot;system&quot;&gt;administrator&lt;/span&gt; (don&#39;t use the user name &lt;span class=&quot;system&quot;&gt;admin&lt;/span&gt; as it is a reserved name on Ubuntu 8.04):&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/18.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/18.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/18.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;noscript style=&quot;font-size: 7pt;&quot;&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/19.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/19.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/19.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/20.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/20.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/20.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/21.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/21.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/21.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;8. The only item I select here is OpenSSH server so that I can immediately connect to the system with an SSH client such as PuTTY after the installation has finished:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/24.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/24.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/24.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;div&gt;&lt;img src=&quot;http://images.howtoforge.com/images/click_to_enlarge.png&quot; alt=&quot;Click to enlarge&quot; border=&quot;0&quot; height=&quot;12&quot; width=&quot;100&quot; /&gt; &lt;/div&gt;&lt;/a&gt;&lt;noscript style=&quot;font-size: 7pt;&quot;&gt;(JavaScript must be enabled in your browser to view the large image as an image overlay.)&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;9. The GRUB boot loader gets installed:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/26.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/26.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/26.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;10. The base system installation is now finished. Remove the installation CD from the CD drive and hit &lt;span class=&quot;system&quot;&gt;Continue&lt;/span&gt; to reboot the system:&lt;/p&gt; &lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/28.png&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/28.png&quot; mce_real_src=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/28.png&quot; height=&quot;413&quot; width=&quot;550&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 02&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_02.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 03&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;div class=&quot;prev&quot;&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_9550.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 04&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_01.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 05&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/10-install-and-configure-spf-postfix.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 06&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts-page_5597.html&quot;&gt;The Perfect SpamSnake - Ubuntu 8.04 LTS - Page 07&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/28.png&quot; class=&quot;thickbox&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://images.howtoforge.com/images/the_perfect_spamsnake/big/28.png&quot; class=&quot;thickbox&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8380913670732189219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8380913670732189219'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/05/perfect-spamsnake-ubuntu-804-lts.html' title='The Perfect SpamSnake - Ubuntu 8.04 LTS'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4429688733595626189</id><published>2008-04-29T22:46:00.004-07:00</published><updated>2008-04-30T01:17:51.178-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>VMware Server On Ubuntu 8.04 Mini-Howto</title><content type='html'>Author : alex.revetchi&lt;br /&gt;&lt;br /&gt;When upgrading from Ubuntu 7.10 to 8.04 my VMware server stopped working, this what I had to do to get it up and running:&lt;br /&gt;&lt;p&gt;Needed if upgrading VMware installation:&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;sudo ./vmware-install.pl&lt;/p&gt;  &lt;p&gt;VMware wont compile with the new kernel, use this patch:&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;wget http://vmkernelnewbies.googlegroups.com/web/vmware-any-any-update-116.tgz&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--&lt;br /&gt;google_ad_client = &quot;pub-3491565404699058&quot;;&lt;br /&gt;/* linuxtom60x243 */&lt;br /&gt;google_ad_slot = &quot;3978396535&quot;;&lt;br /&gt;google_ad_width = 234;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot;&lt;br /&gt;src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;tar -zxf vmware-any-any-update-116.tgz&lt;br /&gt;cd vmware-any-any-update-116&lt;/p&gt;  &lt;p&gt;Apply the patch:&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;sudo ./runme.pl&lt;br /&gt;sudo vmware-config.pl&lt;/p&gt;  &lt;p&gt;VMware console wont run without this:&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;cp /lib/libgcc_s.so.1 /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1&lt;/p&gt;  &lt;p&gt;You might need gcc3.4 as well.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4429688733595626189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4429688733595626189'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/vmware-server-on-ubuntu-804-mini-howto.html' title='VMware Server On Ubuntu 8.04 Mini-Howto'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2878844950960676218</id><published>2008-04-29T02:25:00.004-07:00</published><updated>2008-04-29T02:33:08.276-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>Web Based Project Management With Collabtive On Ubuntu 7.10 Server</title><content type='html'>&lt;p&gt;Author : Shakey&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Project management is becoming an increasingly important part of the Sys Admin&#39;s life. While Microsoft Project seems to be the standard project management tool used in most environments that I have worked in, it can sometimes be nice to have such tools web based so that multiple users can share information. This is where tools such as &lt;a href=&quot;http://collabtive.o-dyn.de/?lang=en&quot; target=&quot;_blank&quot;&gt;Collabtive&lt;/a&gt; come in.  Collabtive is a web based project management tool that supports everything that you need to plan out and complete your projects.&lt;/p&gt; These tools include milestones, time tracking, tasks and task lists, all presented in a multi language environment.  Currently German, English and French are all supported.  The web interface itself is intuitive, functional and attractive all at the same time.  You can see for yourself though at their online demo - &lt;a href=&quot;http://o-dyn.de/test/&quot; target=&quot;_blank&quot;&gt;Collabtive online demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If after having tried the demo, you decide that this is the right tool for you, then this guide should help you to implement Collabtive on your own Ubuntu 7.10 server. This guide is based on the base LAMP install that comes packaged with Ubuntu 7.10 server, but should work equally as well on any Ubuntu LAMP server.  The installation is fairly straight forward, so let&#39;s begin.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;The base Ubuntu installation&lt;/h3&gt; &lt;p&gt;As I mentioned earlier, this guide is based on the base LAMP installation included with Ubuntu. The only things that I did during the installation was to assign a static IP address and choose the LAMP and OpenSSH Server options when prompted. Once you have the base system installed along with the LAMP and OpenSSH server, you are ready to move on. I will assume from this point that you are either working at the command line on your server or using an SSH client such as &lt;a href=&quot;http://www.chiark.greenend.org.uk/%7Esgtatham/putty/&quot; target=&quot;_blank&quot;&gt;PuTTY&lt;/a&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Update your server&lt;/h3&gt; &lt;p&gt;The first step we need to take is to make sure that your server is up to date. Issue the following command to edit your sources.list file:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sudo nano /etc/apt/sources.list&lt;/p&gt; &lt;p&gt;Now that your sources.list file is open, you will need to edit out the cdrom from your updates list. Find the following line in your sources.list file:&lt;/p&gt; &lt;pre&gt;deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted&lt;/pre&gt; &lt;p&gt;Now comment it out as shown below:&lt;/p&gt; &lt;pre&gt;# deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted&lt;/pre&gt; &lt;p&gt;Once you have made the necessary change, you can save the file by pressing &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;CTRL-O&lt;/span&gt;&quot; on your keyboard and can exit the editor by pressing &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;CTRL-X&lt;/span&gt;&quot;.&lt;/p&gt; &lt;p&gt;With that done, you can now proceed to update your system. We will also be installing unzip for use later in the guide. Issue these commands:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sudo apt-get update&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;sudo apt-get install unzip&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Obtain Collabtive and prepare for the installation&lt;/h3&gt; &lt;p&gt;In this step, you will be creating the directory in which Collabtive will be installed, obtaining the Collabtive code itself and setting up permissions.  Issue the following commands:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /var/www/&lt;br /&gt;sudo mkdir collabtive&lt;br /&gt;cd collabtive/&lt;br /&gt;sudo wget http://superb-west.dl.sourceforge.net/sourceforge/collabtive/collabtive0-4-5.zip&lt;br /&gt;sudo unzip collabtive0-4-5.zip&lt;br /&gt;sudo rm collabtive0-4-5.zip&lt;br /&gt;sudo chmod -R 757 templates_c/&lt;br /&gt;sudo chmod -R 757 files/&lt;br /&gt;sudo chmod 757 config.php&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Create the Collabtive database and database user&lt;/h3&gt; &lt;p&gt;This step will help you to create a database for Collabtive in MySQL, as well as the user under which access will be granted. To enter the MySQL environment, issue the root login request with this command:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;mysql -uroot -p&lt;/p&gt; &lt;p&gt;You will now be prompted for your root MySQL password. After entering it, issue the following commands to create your database and the database user. Please note that you can change the username and password to meet your needs.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;create database collabtive;&lt;br /&gt;grant all on collabtive.* to collabuser;&lt;br /&gt;grant all on collabtive.* to collabuser@localhost;&lt;br /&gt;set password for collabuser=password(&#39;collabPW&#39;);&lt;br /&gt;set password for collabuser@localhost=password(&#39;collabPW&#39;);&lt;br /&gt;exit&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;The web setup phase&lt;/h3&gt; &lt;p&gt;It is now time to begin the web setup phase of the installation process (almost done). Point your web browser to the URL shown below (adjusting of course, for the local IP address of your server):&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;http://Server IP address/collabtive/install.php&lt;/p&gt; &lt;p&gt;You should now be greeted with the first page of the web setup. On this page, you can change your language to German, English or French. You can also check to ensure that conditions for the installation are ready to proceed (see the screen shot below) and enter your database information. If you followed the guide above, then the information that you will need is as follows:&lt;/p&gt; &lt;span class=&quot;system&quot;&gt;Database host: localhost&lt;br /&gt;Database name: collabtive&lt;br /&gt;Database user: collabuser&lt;br /&gt;Database password: collabPW&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src=&quot;http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive1.png&quot; alt=&quot;Collabtive Step 1&quot; style=&quot;width: 443px; height: 500px;&quot; height=&quot;500&quot; width=&quot;443&quot; /&gt; &lt;p&gt;If everything appears alright here, then you can click on &quot;continue&quot; to move forward to step number 2. In this step, you will be creating your admin user. It is fairly straight forward, simply enter the username and password that you wish to use and click on continue. See the image below for reference.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive2.png&quot; alt=&quot;Collabtive Step 2&quot; style=&quot;width: 500px; height: 223px;&quot; height=&quot;223&quot; width=&quot;500&quot; /&gt;&lt;/p&gt; &lt;p&gt;You should now be greeted with a screen letting you know that the installation was successful, as shown in this image.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive3.png&quot; alt=&quot;Collabtive Step 3&quot; style=&quot;width: 500px; height: 142px;&quot; height=&quot;142&quot; width=&quot;500&quot; /&gt;&lt;/p&gt; &lt;p&gt;If you see anything other than message, then you may want to retrace your steps and make sure that you did not miss something.  If you do see the above image though, you can now safely remove the install.php file for security purposes by using the following command:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sudo rm /var/www/collabtive/install.php&lt;/p&gt; &lt;p&gt;Now, you may click on the &quot;Login&quot; link shown above to be taken to the admin login.  If all has gone well, then you should now be prompted with a login request (see the image below). This will the admin user that you created in step #2 of the web installation.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://images.howtoforge.com/images/project_management_collabtive_ubuntu7.10_server/Collabtive4.png&quot; alt=&quot;Collabtive Step 4&quot; style=&quot;width: 365px; height: 141px;&quot; height=&quot;141&quot; width=&quot;365&quot; /&gt;&lt;/p&gt; &lt;p&gt;Enter your credentials and click on the &quot;Login&quot; button. You should now be presented with the web interface for Collabtive and ready to begin your first project. While I couldn&#39;t find any documentation on the usage of Collabtive, it is fairly straight forward, if you are familiar with project management. If you should run into problems though, they do have a forum that has a lot of good information in it. The forums are located at - &lt;a href=&quot;http://collabtive.o-dyn.de/forum/&quot; target=&quot;_blank&quot;&gt;Collabtive Forums&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://collabtive.o-dyn.de/?lang=en&quot; target=&quot;_blank&quot;&gt;Collabtive&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://collabtive.o-dyn.de/forum/&quot; target=&quot;_blank&quot;&gt;Collabtive Forums&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://o-dyn.de/test/&quot; target=&quot;_blank&quot;&gt;Collabtive online demo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.chiark.greenend.org.uk/%7Esgtatham/putty/&quot; target=&quot;_blank&quot;&gt;PuTTY&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot; class=&quot;copyright-footer&quot;&gt;Copyright © 2008 Shakey&lt;br /&gt;All Rights Reserved. &lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2878844950960676218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2878844950960676218'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/web-based-project-management-with.html' title='Web Based Project Management With Collabtive On Ubuntu 7.10 Server'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8326275554803682962</id><published>2008-04-28T13:52:00.000-07:00</published><updated>2008-04-29T22:59:19.997-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>Using vi key bindings in bash and zsh</title><content type='html'>&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Author : &lt;/span&gt;&lt;/strong&gt;Vincent Danen, ZDNet Asia&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;When making command-line changes, you can choose a style that makes sense and makes the use of the command line faster and more efficient.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt; &lt;p&gt;By default, most shells use emacs-style key bindings for command-line editing and modification. &lt;!--text blurb--&gt; &lt;/p&gt;&lt;p&gt;For users of vi or vim, however, you can instead configure shells to use vi key bindings instead.  &lt;/p&gt;&lt;p&gt;This is done by editing &lt;i&gt;~/.bashrc&lt;/i&gt; in the case of bash, or &lt;i&gt;~/.zshrc&lt;/i&gt; in zsh and adding:&lt;/p&gt; &lt;pre&gt;set -o vi&lt;/pre&gt; &lt;p&gt;in bash, and the following for zsh:&lt;/p&gt; &lt;pre&gt;bindkey -v&lt;/pre&gt;  &lt;p&gt;Once you have saved either &lt;i&gt;~/.bashrc&lt;/i&gt; or &lt;i&gt;~/.zshrc&lt;/i&gt;, exit the shell and open a new terminal.&lt;/p&gt;  &lt;p&gt;By default, you will be in insert mode, which means that you type as you normally would.  &lt;/p&gt;&lt;p&gt;Commands like [Ctrl]A or [Ctrl]E no longer work, however.  &lt;/p&gt;&lt;p&gt;To get into command mode, press [ESC] (as you would in vim) and use vi key commands to navigate the command line, such as &lt;i&gt;$&lt;/i&gt; to go the end of the line or &lt;i&gt;0&lt;/i&gt; to go to the beginning of the line.&lt;/p&gt; &lt;p&gt;From that point, you can use other vi commands:&lt;/p&gt;  &lt;ul class=&quot;unIndentedList&quot;&gt;&lt;li&gt; &lt;i&gt;b&lt;/i&gt; to go back one word&lt;/li&gt;&lt;li&gt; &lt;i&gt;2b&lt;/i&gt; to go back two words&lt;/li&gt;&lt;li&gt; &lt;i&gt;dw&lt;/i&gt; to delete a word&lt;/li&gt;&lt;li&gt; &lt;i&gt;dd &lt;/i&gt;to delete the entire line&lt;/li&gt;&lt;li&gt; &lt;i&gt;d$&lt;/i&gt; to delete from the current cursor position to the end of the line&lt;/li&gt;&lt;li&gt; &lt;i&gt;d0&lt;/i&gt; to delete from the current cursor position to the beginning of the line&lt;/li&gt;&lt;li&gt; &lt;i&gt;w&lt;/i&gt; to go forward one word, and so forth&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;To return to insert mode, simply type &lt;i&gt;i&lt;/i&gt;, as you would in vi, and you can edit the command line as you normally would.&lt;/p&gt;  &lt;p&gt;If you are more familiar with vim than emacs, using vi key bindings in your shell makes a lot of sense and will make working in the shell much easier as you will be using edit commands that you are already familiar with.&lt;/p&gt;  &lt;p&gt;If you use emacs more often, leave the defaults as they are to use the various commands you would normally use in emacs.  &lt;/p&gt;&lt;p&gt;On the other hand, if you use neither, choose a style that makes the most sense and makes using the command line faster and more efficient.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8326275554803682962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8326275554803682962'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/using-vi-key-bindings-in-bash-and-zsh.html' title='Using vi key bindings in bash and zsh'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-8621952634775131093</id><published>2008-04-18T01:17:00.002-07:00</published><updated>2008-04-30T01:44:30.993-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>How To Install mod_security/mod_security2 On SuSE Linux Enterprise Server 10 (SLES10)</title><content type='html'>&lt;div class=&quot;content&quot;&gt;Author : elconas&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;Introduction&lt;/span&gt; &lt;p&gt;The Apache module mod_security is a very powerful security module. Combined with predefined rules, you can close many security wholes on your server, opened by bad written php or perl apps.&lt;/p&gt; &lt;p&gt;Unfortunately mod_security is not part of the SLES10 distribution. To install mod_security to have to install some 3rd party modules. This guide helps you to install mod_security on SLES10. It also helps you to remove the module, by building RPM packages you can easily uninstall.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--&lt;br /&gt;google_ad_client = &quot;pub-3491565404699058&quot;;&lt;br /&gt;/* linuxtom60x243 */&lt;br /&gt;google_ad_slot = &quot;3978396535&quot;;&lt;br /&gt;google_ad_width = 234;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot;&lt;br /&gt;src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Install Apache2 &lt;/h3&gt; &lt;p&gt;First of all you have to install apache2. This is very simple with the following command. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;yast2 -i apache2&lt;/p&gt;  &lt;h3&gt;Install requried build packages&lt;/h3&gt; &lt;p&gt;Some modules are required to build the mod_security module. Install the following  packages:&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;yast2 -i libxml2-devel pcre-devel apache2-devel curl-devel gcc gcc-c++&lt;/p&gt;  &lt;p&gt; Apache2-devel is required for apxs2. curl-devel is optional. &lt;/p&gt;  &lt;h3&gt; Get and Install checkinstall (for packaging) &lt;/h3&gt; &lt;p&gt; To keep track of installed software and enable the user to uninstall and update software, checkinstall can build RPM, DEBIAN (DEB) and Slackware packages. Instead of executing &quot;make install&quot; just run &quot;checkinstall&quot; and checkinstall catches all files, that would be installed by &quot;make install&quot;. &lt;/p&gt; &lt;p&gt; Get checkinstall from &lt;a mce_real_href=&quot;http://www.asic-linux.com.mx/%7Eizto/checkinstall/download.php&quot; href=&quot;http://www.asic-linux.com.mx/%7Eizto/checkinstall/download.php&quot; target=&quot;_blank&quot;&gt;http://www.asic-linux.com.mx/~izto/checkinstall/download.php&lt;/a&gt;. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.1.tgz&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;checkinstall&lt;br /&gt;cp /usr/src/packages/RPMS/i386/checkinstall-1.6.1-1.i386.rpm .&lt;br /&gt;rpm -ivh checkinstall-1.6.1-1.i386.rpm&lt;/p&gt;  &lt;h3&gt; Get and Install liblua &lt;/h3&gt; &lt;p&gt; The LUA programming language is used by mod_security for configuration. You must compile LUA as shared module.  &lt;/p&gt; &lt;p&gt; Get LUA from &lt;a mce_real_href=&quot;http://www.lua.org/ftp/lua-5.1.3.tar.gz&quot; href=&quot;http://www.lua.org/ftp/lua-5.1.3.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.lua.org/ftp/lua-5.1.3.tar.gz&lt;/a&gt;. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;wget http://www.lua.org/ftp/lua-5.1.3.tar.gz&lt;br /&gt;tar -zxvf lua-5.1.3.tar.gz&lt;br /&gt;cd lua-5.1.3&lt;br /&gt;make linux&lt;br /&gt;checkinstall&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;[...]&lt;br /&gt;  1 -  Summary: [ The LUA programming language ]&lt;br /&gt;  2 -  Name:    [ lua ]&lt;br /&gt;  3 -  Version: [ 5.1.3 ]&lt;br /&gt;  4 -  Release: [ 1 ]&lt;br /&gt;  5 -  License: [ GPL ]&lt;br /&gt;  6 -  Group:   [ Development/Languages/Lua ]&lt;br /&gt;  7 -  Architecture: [ i386 ]&lt;br /&gt;  8 -  Source location: [ http://www.lua.org/ftp/lua-5.1.3.tar.gz ]&lt;br /&gt;  9 -  Alternate source location: [  ]&lt;br /&gt;  10 - Requires: [  ]&lt;br /&gt;  11 - Provides: [ lua ]&lt;br /&gt;  [...]&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /usr/src/packages/RPMS/i386/lua-5.1.3-1.i386.rpm ..&lt;br /&gt;  rpm -ivh ../lua-5.1.3-1.i386.rpm&lt;/p&gt; &lt;p&gt;Now you have to build a shared library from the liblua archive. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /usr/local/lib&lt;br /&gt;gcc -shared -o liblua.5.1.3.so /usr/local/lib/liblua.a&lt;br /&gt;ln -s liblua.5.1.3.so liblua.so&lt;/p&gt;  &lt;h3&gt; Get and Install mod_security &lt;/h3&gt; &lt;p&gt; Get mod_security from &lt;a mce_real_href=&quot;http://www.modsecurity.org/download/direct.html&quot; href=&quot;http://www.modsecurity.org/download/direct.html&quot; target=&quot;_blank&quot;&gt;http://www.modsecurity.org/download/direct.html&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; Documentation about the installation can be found here: &lt;a mce_real_href=&quot;http://www.modsecurity.org/documentation/index.html&quot; href=&quot;http://www.modsecurity.org/documentation/index.html&quot; target=&quot;_blank&quot;&gt;http://www.modsecurity.org/documentation/index.html&lt;/a&gt;. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd modsecurity-apache_2.5.2&lt;br /&gt;cd apache2&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;checkinstall&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;...&lt;br /&gt;  1 -  Summary: [ mod_security application level firewall ]&lt;br /&gt;  2 -  Name:    [ apache2-mod_security ]&lt;br /&gt;  3 -  Version: [ 2.5.2 ]&lt;br /&gt;  4 -  Release: [ 1 ]&lt;br /&gt;  5 -  License: [ GPL ]&lt;br /&gt;  6 -  Group:   [ Productivity/Networking/Web/Servers ]&lt;br /&gt;  7 -  Architecture: [ i386 ]&lt;br /&gt;  8 -  Source location: [ http://www.modsecurity.org/download/ ]&lt;br /&gt;  9 -  Alternate source location: [  ]&lt;br /&gt;  10 - Requires: [ apache2 libxml2 ]&lt;br /&gt;  11 - Provides: [ mod_security ]&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cp /usr/src/packages/RPMS/i386/apache2-mod_security-2.5.2-1.i386.rpm ../../&lt;br /&gt;  rpm -ivh ../../apache2-mod_security-2.5.2-1.i386.rpm&lt;/p&gt;  &lt;h3&gt; Configure Apache2 for mod_security &lt;/h3&gt; &lt;p class=&quot;command&quot;&gt;# /etc/apache2/conf.d/mod_security.conf&lt;br /&gt;LoadFile /usr/lib/libxml2.so&lt;br /&gt;LoadFile /usr/local/lib/liblua.so &lt;br /&gt;LoadModule security2_module /usr/lib/apache2/mod_security2.so&lt;br /&gt;Include modsecurity/*.conf&lt;br /&gt;LoadModule unique_id_module /usr/lib/apache2/mod_unique_id.so&lt;/p&gt;  &lt;h3&gt; Extract and Configure Core Rules &lt;/h3&gt; &lt;p&gt; Get the core rules from &lt;a mce_real_href=&quot;http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz&quot; href=&quot;http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz&lt;/a&gt;. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /etc/apache2&lt;br /&gt;mkdir modsecurity&lt;br /&gt;cd modsecurity&lt;br /&gt;tar -zxvf ../modsecurity-core-rules_2.5-1.6.0.tar.gz&lt;/p&gt; &lt;p&gt;Modify &lt;span class=&quot;system&quot;&gt;modsecurity_crs_10_config.conf&lt;/span&gt; to meet the location of your config files:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt; vi modsecurity_crs_10_config.conf&lt;br /&gt;    SecAuditLog=...&lt;br /&gt;    SecDebugLog=...&lt;/p&gt;   &lt;h3&gt;Restart Apache and Test your Webpage&lt;/h3&gt; &lt;p&gt;First restart apache to get the current configuration: &lt;/p&gt;   &lt;p class=&quot;command&quot;&gt;rcapache restart&lt;/p&gt; &lt;p&gt;To test the installation, write a simple (insecure) PHP script like this:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;&lt;? # /srv/www/htdoc/index.php&lt;br /&gt;    file $text=$_GET[&#39;file&#39;];&lt;br /&gt;    echo &quot;Content of File $text&quot;;&lt;br /&gt;    echo `cat $text`;&lt;br /&gt;?&gt; &lt;/p&gt; &lt;p&gt;Then access it to try opening insecure files:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;http://ip.of.your.server.de/index.php?file=/etc/passwd&lt;/p&gt; &lt;p&gt;You should get ERROR 501 in your browser and the SecAuditLog file should show:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;[...]&lt;br /&gt;GET /index.php?file=/etc/passwd HTTP/1.1 ...&lt;br /&gt;[...]&lt;br /&gt;Message: Access denied with code 501 (phase 2). Pattern match &quot;(?:\b(?:\.(?:ht(?:access|passwd|group&lt;br /&gt;)|www_?acl)|global\.asa|httpd\.conf|boot\.ini)\b|\/etc\/)&quot; at ARGS:file. [file &quot;/etc/apache2/modsecu&lt;br /&gt;rity/modsecurity_crs_40_generic_attacks.conf&quot;] [line &quot;114&quot;] [id &quot;950005&quot;] [msg &quot;Remote File Access A&lt;br /&gt;ttempt&quot;] [data &quot;/etc/&quot;] [severity &quot;CRITICAL&quot;] [tag &quot;WEB_ATTACK/FILE_INJECTION&quot;]&lt;/p&gt;  &lt;h3&gt;Caveats &lt;/h3&gt;  &lt;ul&gt;&lt;li&gt; When accessing your server via IP, a rule in   &lt;span class=&quot;system&quot;&gt;modsecurity_crs_21_protocol_anomalies.conf&lt;/span&gt; denies this. Edit the file and look for &quot;Check that the host header is not an IP address&quot;.&lt;/li&gt;&lt;/ul&gt;  &lt;h3&gt;Links and References&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;mod_security home page:  &lt;a mce_real_href=&quot;http://www.modsecurity.org/&quot; href=&quot;http://www.modsecurity.org/&quot; target=&quot;_blank&quot;&gt;http://www.modsecurity.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;LUA home page: &lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://www.lua.org/&quot; href=&quot;http://www.lua.org/&quot;&gt;http://www.lua.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Checkinstall home page: &lt;a mce_real_href=&quot;http://www.asic-linux.com.mx/%7Eizto/checkinstall/&quot; href=&quot;http://www.asic-linux.com.mx/%7Eizto/checkinstall/&quot; target=&quot;_blank&quot;&gt;http://www.asic-linux.com.mx/~izto/checkinstall/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Author&#39;s home page: &lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://www.elconas.de&quot; href=&quot;http://www.elconas.de/&quot;&gt;http://www.elconas.de&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot; class=&quot;copyright-footer&quot;&gt;Copyright © 2008 Robert Heinzmann&lt;br /&gt;All Rights Reserved. &lt;/div&gt;  &lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8621952634775131093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/8621952634775131093'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/how-to-install-modsecuritymodsecurity2.html' title='How To Install mod_security/mod_security2 On SuSE Linux Enterprise Server 10 (SLES10)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-9055816830874933996</id><published>2008-04-16T23:07:00.000-07:00</published><updated>2008-04-29T23:09:26.307-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>Securely delete files with shred</title><content type='html'>&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Author : &lt;/span&gt;&lt;/strong&gt;Vincent Danen, ZDNet Asia&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Scrub your data using the shred command for files that contain sensitive information, so that they cannot be recovered later with data retrieval tools.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;There are two utilities on a typical Linux box that can be used to delete files. Most users are familiar with the &lt;em&gt;rm&lt;/em&gt; command. Most of the time, this command is sufficient for routine deletion, but for files that contain sensitive data, you might need to scrub them so that they cannot be recovered later with other data retrieval tools.&lt;/p&gt; &lt;!--text blurb--&gt;  &lt;p&gt;To delete files with sensitive content, rm is not sufficient. Instead, consider using the &lt;i&gt;shred&lt;/i&gt; command, which not only deletes a file, but deletes it in such a way that it cannot be recovered. Shred overwrites the file multiple times with garbage prior to deleting it, ensuring that if anything does get retrieved, it isn&#39;t your top-secret data.&lt;/p&gt;  &lt;p&gt;For instance:&lt;/p&gt;  &lt;pre&gt;$ echo &quot;this is private data&quot; &gt;private.txt&lt;/pre&gt; &lt;pre&gt;$ cat private.txt&lt;/pre&gt; &lt;pre&gt;this is private data&lt;/pre&gt; &lt;pre&gt;$ ls -l private.txt&lt;/pre&gt; &lt;pre&gt;-rw-r--r-- 1 vdanen vdanen 21 Mar  4 09:36 private.txt&lt;/pre&gt;   &lt;p&gt;To illustrate how shred works, call it without any command-line options so that the garbage in the file can be viewed:&lt;/p&gt;  &lt;pre&gt;$ shred private.txt&lt;/pre&gt; &lt;pre&gt;$ cat private.txt&lt;/pre&gt; &lt;pre&gt;?9?-?w?K?=???l;b8SƉ?b???????@,?18!??DM??P?&lt;/pre&gt; &lt;pre&gt;...&lt;/pre&gt; &lt;pre&gt;$ ls -l private.txt&lt;/pre&gt; &lt;pre&gt;-rw-r--r-- 1 vdanen vdanen 4096 Mar  4 09:36&lt;br /&gt;private.txt&lt;/pre&gt;  &lt;p&gt;The rest of the output is removed as it is binary gibberish. You can also see the file size has changed.&lt;/p&gt;  &lt;p&gt;To delete the file after overwriting it with garbage, use the &lt;i&gt;-u&lt;/i&gt; option. To see what shred is actually doing, give it the verbose &lt;i&gt;-v&lt;/i&gt; option:&lt;/p&gt;  &lt;pre&gt;$ shred -u -v private.txt&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 1/25 (random)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 2/25 (cccccc)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 3/25 (111111)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 4/25 (000000)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 5/25 (999999)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 6/25 (aaaaaa)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 7/25 (924924)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 8/25 (b6db6d)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 9/25 (6db6db)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 10/25 (888888)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 11/25 (492492)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 12/25 (db6db6)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 13/25 (random)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 14/25 (ffffff)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 15/25 (bbbbbb)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 16/25 (777777)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 18/25 (dddddd)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 19/25 (333333)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 20/25 (555555)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 21/25 (222222)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 22/25 (eeeeee)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 23/25 (666666)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 24/25 (249249)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: pass 25/25 (random)...&lt;/pre&gt; &lt;pre&gt;shred: private.txt: removing&lt;/pre&gt; &lt;pre&gt;shred: private.txt: renamed to 00000000000&lt;/pre&gt; &lt;pre&gt;shred: 00000000000: renamed to 0000000000&lt;/pre&gt; &lt;pre&gt;shred: 0000000000: renamed to 000000000&lt;/pre&gt; &lt;pre&gt;shred: 000000000: renamed to 00000000&lt;/pre&gt; &lt;pre&gt;shred: 00000000: renamed to 0000000&lt;/pre&gt; &lt;pre&gt;shred: 0000000: renamed to 000000&lt;/pre&gt; &lt;pre&gt;shred: 000000: renamed to 00000&lt;/pre&gt; &lt;pre&gt;shred: 00000: renamed to 0000&lt;/pre&gt; &lt;pre&gt;shred: 0000: renamed to 000&lt;/pre&gt; &lt;pre&gt;shred: 000: renamed to 00&lt;/pre&gt; &lt;pre&gt;shred: 00: renamed to 0&lt;/pre&gt; &lt;pre&gt;shred: private.txt: removed&lt;/pre&gt;  &lt;p&gt;As you can see, shred overwrites the file 25 times with garbage. After this, it renames the file 11 times before deleting it.&lt;/p&gt;  &lt;p&gt;Shred can also be used to overwrite entire disks instead of just files. If you wished to overwrite the contents of an entire hard drive, a process which would definitely take a fair amount of time, use:&lt;/p&gt;  &lt;pre&gt;# shred -u -n 30 /dev/hda&lt;/pre&gt;  &lt;p&gt;This will overwrite the data on the drive with garbage using 30 passes. The drive will need to be re-formatted after this as even the filesystem structure will be destroyed.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9055816830874933996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/9055816830874933996'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/securely-delete-files-with-shred.html' title='Securely delete files with shred'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-7809170796570932822</id><published>2008-04-14T01:04:00.001-07:00</published><updated>2008-04-30T01:21:54.060-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>Monitoring UPS Power Status Using Network UPS Tools (NUT) 2.2.0 on Multiple OpenSuSE 10.3 Servers</title><content type='html'>&lt;p&gt;Author : kian &lt;/p&gt;&lt;p&gt;Network UPS Tools is a collection of programs which provide a common interface for monitoring and administering UPS hardware.&lt;/p&gt;  &lt;p&gt;The primary goal of the Network UPS Tools (NUT) project is to provide reliable monitoring of UPS hardware and ensure safe shutdowns of the systems which are connected.&lt;/p&gt;  &lt;p&gt;This is a developing project to monitor a large assortment of UPS hardware. Many models have ports on the back to allow other devices to check the status. If it gives basic information about the power and battery status, it can probably be supported without too much difficulty. More advanced features on the higher-end models are also supported to allow tracking of values over time such as temperature and voltage.&lt;/p&gt;  &lt;p&gt;Network communications are used so that multiple systems can monitor a single physical UPS and shut down together if necessary without any special &quot;sharing hardware&quot; on the UPS itself.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Pre-installation&lt;/h3&gt; &lt;p&gt;Before you have everything up and running on the server, plug the UPS to a power outlet and connect the signal cable (serial or USB) to the server that will run upsd. Do not connect any server power cables to the outlet on the UPS until you feel that you are confident with the working of NUT and how it behaves with your hardware. It is often advised that you use a dummy load such as a lamp when testing the UPS. This will also show you when the UPS delivers power and when it is off, giving you the opportunity to experiment safely and gain confidence with the commands in a way you can&#39;t do once you hook up a production server to the UPS.&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--&lt;br /&gt;google_ad_client = &quot;pub-3491565404699058&quot;;&lt;br /&gt;/* linuxtom60x243 */&lt;br /&gt;google_ad_slot = &quot;3978396535&quot;;&lt;br /&gt;google_ad_width = 234;&lt;br /&gt;google_ad_height = 60;&lt;br /&gt;//--&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot;&lt;br /&gt;src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Installation&lt;/h3&gt; &lt;p&gt;Install the &lt;font class=&quot;system&quot;&gt;nut&lt;/font&gt; RPM package. If you use YaST2, required packages will automatically be added. From the command line, you can use&lt;/p&gt;   &lt;p class=&quot;command&quot;&gt;yast2 -i nut&lt;/p&gt;   &lt;p&gt;as root.&lt;/p&gt;  &lt;p&gt;In OpenSuSE 10.3, you will get &lt;font class=&quot;system&quot;&gt;nut&lt;/font&gt; 2.2.0 installed.&lt;/p&gt;  &lt;p&gt;This will place all the necessary binaries in your path and a set of skeleton configuration files. You will have to edit the files as root in order to define your UPS hardware&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Configuration&lt;/h3&gt; &lt;h4&gt;Configuration of a locally connected UPS&lt;/h4&gt; &lt;p&gt;Either open a root shell, or use e.g.&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;sudo vi&lt;/p&gt;   &lt;p&gt;to edit the configuration files. &lt;/p&gt;  &lt;p&gt;In the file &lt;font class=&quot;system&quot;&gt;/etc/ups/ups.conf&lt;/font&gt; you have a dummy section with default values that looks like this:&lt;/p&gt;  &lt;pre&gt;[myups]&lt;br /&gt;     driver = undefined&lt;br /&gt;     port = /dev/undefined&lt;br /&gt;     desc = &quot;Local UPS&quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Edit the file and set the driver to point to the correct driver for your UPS, the port to where you connected the signal cable and add a description. See &lt;font class=&quot;system&quot;&gt;/usr/share/nut/driver.list&lt;/font&gt; for a list of supported brands and models.&lt;/p&gt;  &lt;p&gt;Here is my entry for an APC SmartUPS 1400 connected to the serial port.&lt;/p&gt;  &lt;pre&gt;[apc_smartups_1400]&lt;br /&gt;     driver = apcsmart&lt;br /&gt;     port = /dev/ttyS0&lt;br /&gt;     desc = &quot;APC SmartUPS 1400&quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;You have to modify the &lt;font class=&quot;system&quot;&gt;/etc/ups/upsd.users&lt;/font&gt; file to configure users and permissions. The passwords are automatically generated during installation, so you can leave them set to these random values if you like. If you want to use a password that you can remember, edit the file. There are two entries in the default file, I also added an admin user so I can calibrate and test the UPS from the command line.&lt;/p&gt;  &lt;p&gt;Note that these users can only connect from localhost, so for now security is not a big issue here. With remote slaves, you should use a more advanced password than what I have in these examples.&lt;/p&gt;  &lt;p&gt;Here are the three users defined in the &lt;font class=&quot;system&quot;&gt;/etc/ups/upsd.users&lt;/font&gt; file.&lt;/p&gt;  &lt;pre&gt;[upsmaster]&lt;br /&gt;      password = masterpass123&lt;br /&gt;      allowfrom = localhost&lt;br /&gt;      upsmon master&lt;br /&gt;[upsslave]&lt;br /&gt;      password = slavepass123&lt;br /&gt;      allowfrom = localhost&lt;br /&gt;      upsmon slave&lt;br /&gt;[upsadmin]&lt;br /&gt;      password = upspass&lt;br /&gt;      allowfrom = localhost&lt;br /&gt;      actions = SET&lt;br /&gt;      instcmds = ALL&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;The upsd daemon only polls the UPS, you need other programs to check upsd for status. Edit their config files to reflect the new name of the UPS and the login and password.&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;/etc/ups/upsmon.conf&lt;/p&gt;  &lt;pre&gt;# MONITOR myups@localhost 1 upsmaster 67fc9377aa master&lt;br /&gt;MONITOR apc_smartups_1400@localhost 1 upsmaster masterpass123 master&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;I also prefer to get a &quot;wall&quot; notice when power is restored in case I work remotely and there is a short power failure. Change the line:&lt;/p&gt;  &lt;pre&gt;NOTIFYFLAG ONLINE   SYSLOG&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;to&lt;/p&gt;  &lt;pre&gt;NOTIFYFLAG ONLINE   SYSLOG+WALL&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;in the &lt;font class=&quot;system&quot;&gt;/etc/ups/upsmon.conf&lt;/font&gt; file.&lt;/p&gt;  &lt;p&gt;&lt;font class=&quot;system&quot;&gt;/etc/ups/hosts.conf&lt;/font&gt; is only for the included CGI programs, but you can add the correct information here as well&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;/etc/ups/hosts.conf&lt;/p&gt;  &lt;pre&gt;# MONITOR myups@localhost &quot;Local UPS&quot;&lt;br /&gt;MONITOR apc_smartups_1400@localhost &quot;APC SmartUPS 1400&quot;&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Now we can finally start all of these programs:&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;rcupsd start&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;linux:~ # rcupsd start&lt;br /&gt;Starting NUT UPS drivers                                             done&lt;br /&gt;Starting NUT UPS server                                              done&lt;br /&gt;Starting NUT UPS monitor                                             done &lt;/p&gt;  &lt;p&gt;Check that you are up and running and that you can read the stored values from the UPS. First list available devices with&lt;/p&gt;   &lt;p class=&quot;command&quot;&gt;upsc -l&lt;/p&gt;  &lt;p&gt;... then read all values with:&lt;/p&gt;   &lt;p class=&quot;command&quot;&gt;upsc &lt;ups_name&gt;&lt;/ups_name&gt;&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;linux:~ # upsc -l&lt;br /&gt;apc_smartups_1400&lt;br /&gt;linux:~ # upsc apc_smartups_1400&lt;br /&gt;battery.alarm.threshold: 0&lt;br /&gt;battery.charge: 100.0&lt;br /&gt;battery.charge.restart: 00&lt;br /&gt;[...]&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Testing&lt;/h3&gt; &lt;p&gt;Before you connect your server to the power, test a realistic power failure unplugging the power cord to the UPS unit. It should fail over to battery and you get a warning message. If you are logged in and running KDE you get a popup from KWrited with a message such as:&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;Broadcast Message from upsd@linux&lt;br /&gt;       (somewhere) at 22:51&lt;br /&gt;UPS apc_smartups_1400@localhost on battery &lt;/p&gt;  &lt;p&gt; Plug the cable back in and observe the reassuring messages that power has been restored.&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;Broadcast Message from upsd@linux&lt;br /&gt;       (somewhere) at 22:51&lt;br /&gt;UPS apc_smartups_1400@localhost on line power     &lt;/p&gt;  &lt;p&gt;If this works, you can shut your server down and connect the power cord to the UPS. In case of a power failure, you will get the messages you saw during testing. Once the battery charge is so low that the UPS sends a &quot;low battery&quot; signal, NUT will shut down the server. You may be able to set this threshold in the UPS registers, or you will have to script something that does a&lt;/p&gt;   &lt;p class=&quot;command&quot;&gt;shutdown -h -t&lt;minutes&gt;&lt;/minutes&gt;&lt;/p&gt;  &lt;p&gt;(system halt after &lt;minutes&gt;) as soon as the UPS is on battery, and then does a&lt;/minutes&gt;&lt;/p&gt;   &lt;p class=&quot;command&quot;&gt;shutdown -c&lt;/p&gt;    &lt;p&gt;(cancel shutdown) when the UPS is back on line power. Not all UPS devices will send this &quot;restored&quot; message, though. This is where you just have to test and customize.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Running your equipment on UPS&lt;/h3&gt; &lt;p&gt;So your server is now running on battery power until the batteries run out. You may want to once actually run the server until the batteries fail, just to have an idea of how much battery time you have. Most UPS devices can show you the load and a battery charge percentage. UPSes are great when you are working on something really important and there is a short power surge or brownout, and in case of a long lasting blackout you can get the machine to suspend, hibernate or shut down when batteries are low.&lt;/p&gt;  &lt;p&gt;If you set your BIOS to start the machine automatically when it starts to received power, it will automatically boot when power is restored. In case of recurrent power failures, you don&#39;t want to keep a server running and drain the batteries. Just think of a UPS as a unit that protects you from power surges and spikes, and can provide you with a clean shutdown in case of power failure. Don&#39;t run a server on battery just because you can. Batteries in a UPS are not meant to be drained, and when power is restored they normally take a few hours to restore full charge. You don&#39;t want to run the servers without a safety net right after a blackout - shut servers down with plenty of battery power left and save it for the rough time period just after power restore when every appliance in the entire city starts up simultaneously and starts to guzzle power. For the same reason, limit what you keep on UPS to important servers. Don&#39;t forget to add necessary supporting hardware such as network equipment, KVMs and monitors needed to operate the servers during power failure. Avoid running printers and most workstations on UPS power. Keep emergency light in the server room so you can work there when the normal lights are out. If you keep servers running for a while with your own power source (such as a generator), you may even want to keep HVAC on the same power to avoid overheating the room.&lt;/p&gt;  &lt;p&gt;Also remember that when all equipment starts to draw poewr at once - servers and workstations all simultaneously boot, all monitors and lights light up and laser printers start to warm up - you must expect to blow a fuse or two. Which then prolongs your blackout. Make sure all non-critical equipment is shut off during power failures and manually switched on again afterwards.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;Remote clients&lt;/h3&gt; &lt;h4&gt;Allowing remote clients&lt;/h4&gt; &lt;p&gt;Now that you know the local UPS is working as it should - keeping the server running on power and notifying the OS via serial port or USB - you may want to connect more servers to the rest of the power outlets. However, there is only one USB or serial cable. This is when you need the NUT upsd daemon on the machine with the serial cable to notify the other servers via the network.&lt;/p&gt;  &lt;p&gt;Start by editing the &lt;font class=&quot;system&quot;&gt;/etc/ups/upsd.conf&lt;/font&gt; to allow clients. Here the entire subnet is allowed, you may want to make it more fine-grained and only include specific IPs.&lt;/p&gt;  &lt;pre&gt;ACL all 0.0.0.0/0&lt;br /&gt;ACL localhost 127.0.0.1/32&lt;br /&gt;ACL upsnet  192.168.1.0/24&lt;br /&gt;ACCEPT localhost&lt;br /&gt;ACCEPT upsnet&lt;br /&gt;REJECT all&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now allow the slave to connect from this network in &lt;font class=&quot;system&quot;&gt;/etc/ups/upsd.users&lt;/font&gt;:&lt;/p&gt;  &lt;pre&gt;[upsslave]&lt;br /&gt;      password = slavepass123&lt;br /&gt;      allowfrom = localhost upsnet&lt;br /&gt;      upsmon slave&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Restart the upsd daemond again to pick up the changes.&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;rcupsd restart&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;linux:~ # rcupsd restart&lt;br /&gt;Shutting down NUT UPS monitor                                        done&lt;br /&gt;Shutting down NUT UPS server                                         done&lt;br /&gt;Shutting down NUT UPS drivers.                                       done&lt;br /&gt;Starting NUT UPS drivers                                             done&lt;br /&gt;Starting NUT UPS server                                              done&lt;br /&gt;Starting NUT UPS monitor                                             done &lt;/p&gt;  &lt;p&gt;Or better, reload the configuration, this is much faster than restarting the daemons when you only need to reconfigure any setting except for the driver settings which demands a service restart as above.&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;rcupsd reload&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;linux:~ # rcupsd reload&lt;br /&gt;Reload service NUT UPS (excluding upsdrvctl)                         done &lt;/p&gt;  &lt;p&gt;And allow the clients through the firewall (OpenSuSE by default runs an iptables firewall called SuSEfirewall). upsd listens on TCP port 3493, and by default listens on all interfaces.&lt;/p&gt;  &lt;p&gt;Create a SuSEfirewall2 service definition, since the RPM didn&#39;t include one. Make a new file named &lt;font class=&quot;system&quot;&gt; /etc/sysconfig/SuSEfirewall2.d/services/upsd &lt;/font&gt;. with this content:&lt;/p&gt;  &lt;pre&gt;# Service description for upsd, the UPS daemon from NUT&lt;br /&gt;# (Network UPS Tools)&lt;br /&gt;#&lt;br /&gt;## Name: NUT upsd&lt;br /&gt;## Description: Allows remote monitoring of UPS power status&lt;br /&gt;# space separated list of allowed TCP ports&lt;br /&gt;TCP=&quot;3493&quot;&lt;br /&gt;# space separated list of allowed UDP ports&lt;br /&gt;UDP=&quot;&quot;&lt;br /&gt;# space separated list of allowed RPC services&lt;br /&gt;RPC=&quot;&quot;&lt;br /&gt;# space separated list of allowed IP protocols&lt;br /&gt;IP=&quot;&quot;&lt;br /&gt;# space separated list of allowed UDP broadcast ports&lt;br /&gt;BROADCAST=&quot;&quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now start&lt;/p&gt;   &lt;p class=&quot;command&quot;&gt;YaST&lt;/p&gt;   &lt;p&gt;as root and choose &quot;Security and Users&quot; -&gt; &quot;Firewall&quot;. Select the correct network and choose NUT upsd in the drop-down list. Add the service and click the Next button. This adds upsd to the list of allowed services in the &lt;font class=&quot;system&quot;&gt;FW_CONFIGURATIONS_EXT&lt;/font&gt; variable in the &lt;font class=&quot;system&quot;&gt;/etc/sysconfig/SuSEfirewall2&lt;/font&gt; configuration script. Port 3493 is now allowed through the iptables firewall.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Configuring remote clients&lt;/h3&gt; &lt;p&gt;Install nut on a remote machine, this one is called linux64.&lt;/p&gt;  &lt;p&gt;Comment out everything in &lt;font class=&quot;system&quot;&gt;/etc/ups/ups.conf&lt;/font&gt; since we don&#39;t have a local UPS attached:&lt;/p&gt;  &lt;pre&gt;#[myups]&lt;br /&gt;#       driver = undefined&lt;br /&gt;#       port = /dev/undefined&lt;br /&gt;#       desc = &quot;Local UPS&quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Edit &lt;font class=&quot;system&quot;&gt;/etc/ups/upsmon.conf&lt;/font&gt; to monitor the server where the UPS is connected:&lt;/p&gt;  &lt;pre&gt;#MONITOR myups@localhost 1 upsmaster 04fb251a3f master&lt;br /&gt;MONITOR apc_smartups_1400@linux 1 upsslave slavepass123 slave&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Add the UPS server to &lt;font class=&quot;system&quot;&gt;/etc/ups/hosts.conf&lt;/font&gt;:&lt;/p&gt;  &lt;pre&gt;#MONITOR myups@localhost &quot;Local UPS&quot;&lt;br /&gt;MONITOR apc_smartups_1400@linux &quot;APC SmartUPS 1400&quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now start the upsd service, which will ignore the actual upsd and UPS driver since they are unconfigured, and only start upsmon.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;rcupsd start&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;linux64:~ # rcupsd start&lt;br /&gt;Starting NUT UPS monitor                                             done &lt;/p&gt; &lt;p&gt;Check that the connection is working, and that you can read the status values of the remote UPS server.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;upsc apc_smartups_1400@linux&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;linux64:~ # upsc apc_smartups_1400@linux&lt;br /&gt;battery.alarm.threshold: 0&lt;br /&gt;battery.charge: 094.0&lt;br /&gt;battery.charge.restart: 00&lt;br /&gt;      [...] &lt;/p&gt; &lt;p&gt;Test the UPS again, and check that the new client also picks up the message&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt;Broadcast Message from upsd@linux64&lt;br /&gt;       (somewhere) at 0:13 ...&lt;br /&gt;UPS apc_smartups_1400@linux on battery &lt;/p&gt; &lt;p&gt;Connect the power cable for this server to the UPS, and you now have two servers protected from blackouts and they are both monitoring power status.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;References&lt;/h3&gt;   &lt;ul&gt;&lt;li&gt;&lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://www.networkupstools.org/&quot; href=&quot;http://www.networkupstools.org/&quot;&gt;Tne Network UPS Tools (NUT) homepage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Copyright (c)  2008 Kian Spongsveen&lt;br /&gt;Permission is granted to copy, distribute and/or modify the content of&lt;br /&gt;this page under the terms of the GNU Free Documentation License, Version 1.2&lt;br /&gt;or any later version published by the Free Software Foundation; with no&lt;br /&gt;Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.&lt;br /&gt;A copy of the license is available at &lt;a href=&quot;http://www.gnu.org/licenses/fdl.html&quot;&gt;http://www.gnu.org/licenses/fdl.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7809170796570932822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/7809170796570932822'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/monitoring-ups-power-status-using.html' title='Monitoring UPS Power Status Using Network UPS Tools (NUT) 2.2.0 on Multiple OpenSuSE 10.3 Servers'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-32679318912547491</id><published>2008-04-11T01:20:00.001-07:00</published><updated>2008-04-30T01:12:00.451-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>MySQL Backups Using ZRM For MySQL 2.0</title><content type='html'>&lt;div class=&quot;content&quot;&gt;   Author&lt;span style=&quot;font-weight: bold;&quot;&gt; : &lt;/span&gt;Paddy Sreenivasan &lt;p&gt;&lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://www.zmanda.com/backup-mysql.html&quot; href=&quot;http://www.zmanda.com/backup-mysql.html&quot;&gt;Zmanda Recovery Manager (ZRM) for MySQL&lt;/a&gt; simplifies life of a database administrator who needs an easy to use yet flexible and robust backup and recovery solution for MySQL server. Significant features are:&lt;/p&gt; &lt;p&gt;    * Schedule full and incremental logical or raw backups of your MySQL database&lt;br /&gt;   * Centralized backup management&lt;br /&gt;   * Perform backup that is the best match for your storage engine and your MySQL configuration&lt;br /&gt;   * Get e-mail notification about status of your backups&lt;br /&gt;   * Monitor and obtain reports about your backups (including RSS feeds)&lt;br /&gt;   * Verify your backup images&lt;br /&gt;   * Compress and encrypt your backup images&lt;br /&gt;   * Implement Site or Application specific backup policies&lt;br /&gt;   * Recover database easily to any point in time or to any particular database event&lt;br /&gt;   * Custom plugins to tailor MySQL backups to your environment&lt;br /&gt;   * MySQL backup using Linux LVM and Solaris ZFS snapshots&lt;/p&gt; &lt;p&gt;Release 2.0 of the community project was released last week. It can be downloaded from &lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://www.zmanda.com/download-zrm.php&quot; href=&quot;http://www.zmanda.com/download-zrm.php&quot;&gt;Zmanda downloads&lt;/a&gt; page. It supports all Linux and Solaris distributions. The documentation is available on &lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://mysqlbackup.zmanda.com/&quot; href=&quot;http://mysqlbackup.zmanda.com/&quot;&gt;ZRM wiki&lt;/a&gt;. &lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://forums.zmanda.com/&quot; href=&quot;http://forums.zmanda.com/&quot;&gt;ZRM forums&lt;/a&gt; can be used to get questions answered about the project.&lt;br /&gt;&lt;br /&gt; This example assumes that the ZRM server and MySQL server are the same machine. We are backing up MySQL database &lt;/p&gt;&lt;br /&gt;&lt;!-- pake ads google --&gt;&lt;br /&gt;&lt;p class=&quot;highlight&quot;&gt;myisamnetflix&lt;/p&gt;  &lt;p&gt;to the same machine running Ubuntu 7.04.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;ZRM For MySQL Installation&lt;/h3&gt; &lt;p&gt;* Installation has to be done as super user.&lt;/p&gt; &lt;p&gt;* ZRM for MySQL requires perl 5.8.7 or later. Ubuntu 7.04 already has perl 5.8.8 installed.&lt;/p&gt; &lt;p&gt;* Install perl-DBD and perl-XML-parser modules &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;# apt-get install libxml-parser-perl libdbd-mysql-perl&lt;/p&gt; &lt;p&gt;* Download ZRM for MySQL debian packages from &lt;a target=&quot;_blank&quot; mce_real_href=&quot;http://www.zmanda.com/download-zrm.php&quot; href=&quot;http://www.zmanda.com/download-zrm.php&quot;&gt;Zmanda downloads&lt;/a&gt; page.&lt;/p&gt; &lt;p&gt;* Install ZRM for MySQL (ZRM server package is sufficient because MySQL server and ZRM server are the same machine). &lt;/p&gt; &lt;p class=&quot;command&quot;&gt; # dpkg -i mysql-zrm_2.0_all.deb &lt;/p&gt; &lt;p&gt;&lt;span class=&quot;system&quot;&gt; Selecting previously deselected package mysql-zrm.&lt;br /&gt;(Reading database ... 108342 files and directories currently installed.)&lt;br /&gt;Unpacking mysql-zrm (from mysql-zrm_2.0_all.deb) ...&lt;br /&gt;Setting up mysql-zrm (2.0) ...&lt;br /&gt;Updating ownership of previously backedup data sets&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;MySQL Server Configuration&lt;/h3&gt; &lt;p&gt;* Check to see if MySQL server is running. If MySQL server is not installed, please install &quot;mysql-server&quot; using &quot;apt-get&quot; command. Update the &quot;root&quot; MySQL server with a password using mysqladmin command (mysqladmin --user root password boot12). We are using &quot;boot12&quot; as the root password. This user will be used for doing MySQL backups and restores. It is better to user a specific user with minimal privileges to do MySQL backups instead of using &quot;root&quot; MySQL user.&lt;/p&gt; &lt;p&gt;* The MySQL server has to run as &quot;mysql&quot; user and &quot;mysql&quot; OS user should belong to &quot;mysql&quot; group. The default installation of ZRM for MySQL requires MySQL server to run as &quot;mysql&quot; user.&lt;/p&gt; &lt;p&gt;* &quot;ps&quot; output shows mysql server is running using the default MySQL port&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt; mysql    22034 21995  0 14:38 pts/2    00:00:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock&lt;/p&gt;   &lt;p&gt;* Enable binary logging on the MySQL server. Binary logging must be enabled to do incremental backups of the MySQL server.&lt;/p&gt; &lt;p&gt;* Edit &lt;span class=&quot;system&quot;&gt;/etc/mysql/my.cnf&lt;/span&gt; configuration file. Add &quot;log-bin&quot; in mysqld section.&lt;/p&gt; &lt;pre&gt; [mysqld]&lt;br /&gt;log-bin&lt;/pre&gt; &lt;p&gt;* We have mysql database &quot;myisamnetflix&quot; that contains two tables. We will be backing this database. This database uses MyISAM storage engine:&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt; mysql&gt; show databases;&lt;br /&gt;+--------------------+&lt;br /&gt;| Database           |&lt;br /&gt;+--------------------+&lt;br /&gt;| information_schema |&lt;br /&gt;| myisamnetflix      |&lt;br /&gt;| mysql              |&lt;br /&gt;+--------------------+&lt;br /&gt;3 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; use myisamnetflix;&lt;br /&gt;Reading table information for completion of table and column names&lt;br /&gt;You can turn off this feature to get a quicker startup with -A&lt;br /&gt;&lt;br /&gt;Database changed&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;+-------------------------+&lt;br /&gt;| Tables_in_myisamnetflix |&lt;br /&gt;+-------------------------+&lt;br /&gt;| MovieID                 |&lt;br /&gt;| MovieRatings            |&lt;br /&gt;+-------------------------+&lt;br /&gt;2 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; select count(*) from MovieID;&lt;br /&gt;+----------+&lt;br /&gt;| count(*) |&lt;br /&gt;+----------+&lt;br /&gt;|    17770 |&lt;br /&gt;+----------+&lt;/p&gt;   &lt;p&gt;* MySQL client commands are installed in &lt;span class=&quot;system&quot;&gt;/usr/bin/&lt;/span&gt;  directory. If they are not, accordingly configure the client command location and binary log location in &lt;span class=&quot;system&quot;&gt;mysql-zrm.conf&lt;/span&gt;.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;ZRM Configuration&lt;/h3&gt; &lt;p&gt;* This should be done as &lt;span class=&quot;system&quot;&gt;mysql &lt;/span&gt;user: &lt;/p&gt; &lt;p class=&quot;command&quot;&gt; $ id&lt;/p&gt; &lt;p class=&quot;system&quot;&gt; uid=1002(mysql) gid=1001(mysql) groups=1001(mysql)&lt;/p&gt; &lt;p&gt;* Create the backup set directory. The backup set is called &quot;netflix&quot;. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;$ mkdir /etc/mysql-zrm/netflix&lt;/p&gt;   &lt;p&gt;* Create &lt;span class=&quot;system&quot;&gt;mysql-zrm.conf &lt;/span&gt;configuration file. Backup compression is enabled and &quot;myisamnetflix&quot; database is being backed up. The location of MySQL binary logs are also specified (&quot;mysql-binlog-path&quot;).&lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;$ cat /etc/mysql-zrm/netflix/mysql-zrm.conf&lt;/p&gt;  &lt;pre&gt; host=&quot;localhost&quot;&lt;br /&gt;databases=&quot;myisamnetflix&quot;&lt;br /&gt;password=&quot;boot12&quot;&lt;br /&gt;user=&quot;root&quot;&lt;br /&gt;compress=1&lt;br /&gt;mysql-binlog-path=&quot;/var/log/mysql&quot;&lt;/pre&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Perform ZRM Backups&lt;/h3&gt; &lt;p&gt;* This should be done as &quot;mysql&quot; user.&lt;/p&gt; &lt;p&gt;* Perform full backup of the database immediately using &quot;mysql-zrm-scheduler&quot;. &lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;$ mysql-zrm-scheduler --now --backup-set netflix --backup-level 0&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt; schedule:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log&lt;br /&gt;backup:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: START OF BACKUP&lt;br /&gt;netflix:backup:INFO: PHASE START: Initialization&lt;br /&gt;netflix:backup:INFO: backup-set=netflix&lt;br /&gt;netflix:backup:INFO: backup-date=20080326161652&lt;br /&gt;netflix:backup:INFO: mysql-server-os=Linux/Unix&lt;br /&gt;netflix:backup:INFO: host=localhost&lt;br /&gt;netflix:backup:INFO: backup-date-epoch=1206573412&lt;br /&gt;netflix:backup:INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: mysql-version=5.0.38-Ubuntu_0ubuntu1.4-log&lt;br /&gt;netflix:backup:INFO: backup-directory=/var/lib/mysql-zrm/netflix/20080326161652&lt;br /&gt;netflix:backup:INFO: backup-level=0&lt;br /&gt;netflix:backup:INFO: backup-mode=raw&lt;br /&gt;netflix:backup:INFO: PHASE END: Initialization&lt;br /&gt;netflix:backup:INFO: PHASE START: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE END: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE START: Find table type&lt;br /&gt;netflix:backup:INFO: PHASE END: Find table type&lt;br /&gt;netflix:backup:INFO: PHASE START: Creating raw backup&lt;br /&gt;netflix:backup:INFO: raw-databases=myisamnetflix&lt;br /&gt;netflix:backup:INFO: PHASE END: Creating raw backup&lt;br /&gt;netflix:backup:INFO: PHASE START: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: next-binlog=mysql-bin.000009&lt;br /&gt;netflix:backup:INFO: backup-size=122.27 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: PHASE START: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: compress=&lt;br /&gt;netflix:backup:INFO: backup-size-compressed=37.65 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: read-locks-time=00:00:01&lt;br /&gt;netflix:backup:INFO: flush-logs-time=00:00:00&lt;br /&gt;netflix:backup:INFO: compress-encrypt-time=00:02:20&lt;br /&gt;netflix:backup:INFO: backup-time=00:00:15&lt;br /&gt;netflix:backup:INFO: backup-status=Backup succeeded&lt;br /&gt;netflix:backup:INFO: Backup succeeded&lt;br /&gt;netflix:backup:INFO: PHASE START: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE END: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE START: Cleanup&lt;br /&gt;netflix:backup:INFO: PHASE END: Cleanup&lt;br /&gt;netflix:backup:INFO: END OF BACKUP&lt;br /&gt;/usr/bin/mysql-zrm started successfully&lt;br /&gt;&lt;br /&gt;* Delete some entries from the &quot;myisamnetflix&quot; database (so that we can do incremental backup of the database)&lt;br /&gt;mysql&gt; use myisamnetflix;&lt;br /&gt;Reading table information for completion of table and column names&lt;br /&gt;You can turn off this feature to get a quicker startup with -A&lt;br /&gt;&lt;br /&gt;Database changed&lt;br /&gt;&lt;br /&gt;mysql&gt; delete from MovieID where MovieTitle = &quot;Alien Hunter&quot;;&lt;br /&gt;Query OK, 1 rows affected (0.01 sec)&lt;/p&gt; &lt;p&gt;* Perform incremental backup of the backup set. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;$ mysql-zrm-scheduler --now --backup-set netflix --backup-level 1&lt;/p&gt; &lt;p class=&quot;system&quot;&gt; schedule:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log&lt;br /&gt;backup:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: START OF BACKUP&lt;br /&gt;netflix:backup:INFO: PHASE START: Initialization&lt;br /&gt;netflix:backup:INFO: backup-set=netflix&lt;br /&gt;netflix:backup:INFO: backup-date=20080326164433&lt;br /&gt;netflix:backup:INFO: mysql-server-os=Linux/Unix&lt;br /&gt;netflix:backup:INFO: host=localhost&lt;br /&gt;netflix:backup:INFO: backup-date-epoch=1206575073&lt;br /&gt;netflix:backup:INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;netflix:backup:INFO: mysql-version=5.0.38-Ubuntu_0ubuntu1.4-log&lt;br /&gt;netflix:backup:INFO: backup-directory=/var/lib/mysql-zrm/netflix/20080326164433&lt;br /&gt;netflix:backup:INFO: backup-level=1&lt;br /&gt;netflix:backup:INFO: PHASE END: Initialization&lt;br /&gt;netflix:backup:INFO: PHASE START: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running pre backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE END: Flushing logs&lt;br /&gt;netflix:backup:INFO: PHASE START: Creating incremental backup&lt;br /&gt;netflix:backup:INFO: incremental=mysql-bin.[0-9]*&lt;br /&gt;netflix:backup:INFO: PHASE END: Creating incremental backup&lt;br /&gt;netflix:backup:INFO: PHASE START: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: next-binlog=mysql-bin.000013&lt;br /&gt;netflix:backup:INFO: last-backup=/var/lib/mysql-zrm/netflix/20080326162210&lt;br /&gt;netflix:backup:INFO: backup-size=0.03 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Calculating backup size &amp;amp; checksums&lt;br /&gt;netflix:backup:INFO: PHASE START: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: compress=&lt;br /&gt;netflix:backup:INFO: backup-size-compressed=0.00 MB&lt;br /&gt;netflix:backup:INFO: PHASE END: Compression/Encryption&lt;br /&gt;netflix:backup:INFO: read-locks-time=00:00:00&lt;br /&gt;netflix:backup:INFO: flush-logs-time=00:00:00&lt;br /&gt;netflix:backup:INFO: compress-encrypt-time=00:00:00&lt;br /&gt;netflix:backup:INFO: backup-time=00:00:00&lt;br /&gt;netflix:backup:INFO: backup-status=Backup succeeded&lt;br /&gt;netflix:backup:INFO: Backup succeeded&lt;br /&gt;netflix:backup:INFO: PHASE START: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE END: Running post backup plugin&lt;br /&gt;netflix:backup:INFO: PHASE START: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE END: Mailing backup report&lt;br /&gt;netflix:backup:INFO: PHASE START: Cleanup&lt;br /&gt;netflix:backup:INFO: PHASE END: Cleanup&lt;br /&gt;netflix:backup:INFO: END OF BACKUP&lt;br /&gt;/usr/bin/mysql-zrm started successfully&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h3&gt;ZRM Backup Reports&lt;/h3&gt; &lt;p&gt;* Use &quot;mysql-zrm-reporter&quot; to look at the status of backups available. &lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;$ /usr/bin/mysql-zrm-reporter --where backup-set=netflix --show backup-status-info&lt;/p&gt; &lt;p class=&quot;system&quot;&gt; REPORT TYPE : backup-status-info&lt;br /&gt;&lt;br /&gt;         backup_set  backup_date                  backup_level  backup_status         comment&lt;br /&gt;-----------------------------------------------------------------------------------------------------------&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:44:33                1  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:16:52                0  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;/p&gt;  &lt;p&gt;* ZRM reports can also provide information on impact on MySQL application. &lt;/p&gt;&lt;p class=&quot;command&quot;&gt;$ /usr/bin/mysql-zrm-reporter --where backup-set=netflix --show  backup-app-performance-info&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt; REPORT TYPE : backup-app-performance-info&lt;br /&gt;&lt;br /&gt;         backup_set  backup_date                  backup_level     backup_size  backup_time   read_locks_time     flush_logs_time&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:44:33                1         0.03 MB  00:00:00      00:00:00            00:00:00&lt;br /&gt;                     PM PDT&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:16:52                0       122.27 MB  00:00:15      00:00:01            00:00:00&lt;br /&gt;                     PM PDT&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;h3&gt;Database Recovery&lt;/h3&gt;  &lt;p&gt;* Use ZRM reporting tool to identify the location of MySQL backup images. &lt;/p&gt; &lt;p class=&quot;command&quot;&gt;$ /usr/bin/mysql-zrm-reporter --where backup-set=netflix --show restore-info&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt; REPORT TYPE : restore-info&lt;br /&gt;&lt;br /&gt;         backup_set  backup_date                  backup_level  backup_directory                           backup_status         comment&lt;br /&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:44:33                1  /var/lib/mysql-zrm/netflix/20080326164433  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;br /&gt;            netflix  Wed 26 Mar 2008 04:16:52                0  /var/lib/mysql-zrm/netflix/20080326161652  Backup succeeded      ----&lt;br /&gt;                     PM PDT&lt;/p&gt;    &lt;p&gt;* You can parse incremental backups to identify database events of interest. In our example, we will look  for the &quot;DELETE&quot; event.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;$ /usr/bin/mysql-zrm-parse-binlogs --source-directory /var/lib/mysql-zrm/netflix/20080326164433 | grep delete&lt;/p&gt;  &lt;p class=&quot;system&quot;&gt; parse-binlogs:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;/var/lib/mysql-zrm/netflix/20080326164433/mysql-bin.000011 | 13634 | 08-03-26 16:28:03 | Query | use myisamnetflix/*!*/; delete from MovieID where MovieTitle = &quot;Alien Hunter&quot;/*!*/;&lt;/p&gt;  &lt;p&gt;* Restore the database from the full backup done at 16:16:52. &lt;/p&gt;  &lt;p class=&quot;command&quot;&gt;$ /usr/bin/mysql-zrm-restore --user=root --password=boot12 --source-directory=/var/lib/mysql-zrm/netflix/20080326161652&lt;/p&gt; &lt;p class=&quot;system&quot;&gt; restore:INFO: ZRM for MySQL Community Edition - version 2.0&lt;br /&gt;BackupSet1:restore:INFO: Restored database from raw backup: myisamnetflix&lt;br /&gt;BackupSet1:restore:INFO: Restore done in 9 seconds.&lt;br /&gt;MySQL server has been shutdown. Please restart after verification.&lt;br /&gt;&lt;br /&gt;* Restart the MySQL server&lt;br /&gt;# /etc/init.d/mysql restart&lt;br /&gt;* Stopping MySQL database server mysqld                                 [ OK ]&lt;br /&gt;* Starting MySQL database server mysqld                                 [ OK ]&lt;br /&gt;* Checking for corrupt, not cleanly closed and upgrade needing tables.&lt;/p&gt;  &lt;p&gt;* Check the database recovery.&lt;/p&gt; &lt;p class=&quot;system&quot;&gt; mysql&gt; use myisamnetflix;&lt;br /&gt;Reading table information for completion of table and column names&lt;br /&gt;You can turn off this feature to get a quicker startup with -A&lt;br /&gt;&lt;br /&gt;Database changed&lt;br /&gt;mysql&gt; select * from MovieID where MovieTitle = &quot;Alien Hunter&quot;;&lt;br /&gt;+---------+------+--------------+&lt;br /&gt;| MovieID | Year | MovieTitle   |&lt;br /&gt;+---------+------+--------------+&lt;br /&gt;|   17770 | 2003 | Alien Hunter |&lt;br /&gt;+---------+------+--------------+&lt;br /&gt;1 row in set (0.02 sec)&lt;/p&gt; &lt;div style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot; class=&quot;copyright-footer&quot;&gt;Copyright © 2008 Paddy Sreenivasan&lt;br /&gt;All Rights Reserved. &lt;/div&gt;  &lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/32679318912547491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/32679318912547491'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/mysql-backups-using-zrm-for-mysql-20.html' title='MySQL Backups Using ZRM For MySQL 2.0'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6127582381386337079</id><published>2008-04-10T01:37:00.005-07:00</published><updated>2008-04-29T03:19:31.580-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>Scheduled Backups With Rsyncbackup On Debian Etch - Page 2</title><content type='html'>&lt;div class=&quot;content&quot;&gt;   &lt;h4&gt;4.3 Configuration&lt;/h4&gt; &lt;h4&gt;4.3.1 Main&lt;/h4&gt; &lt;p&gt;This file contains the standard rsync options for all backups.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/rsyncbackup/config.conf&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;/p&gt; &lt;pre&gt;--stats&lt;br /&gt;--progress&lt;br /&gt;--links&lt;br /&gt;--hard-links&lt;br /&gt;--times&lt;br /&gt;--recursive&lt;br /&gt;--perms&lt;br /&gt;--owner&lt;br /&gt;--group&lt;br /&gt;--compress&lt;br /&gt;--backup&lt;/pre&gt;  &lt;p&gt;Note: You can also use the short style - e.g.: &quot;&lt;span class=&quot;system&quot;&gt;-p&lt;/span&gt;&quot; instead of &quot;&lt;span class=&quot;system&quot;&gt;--perms&lt;/span&gt;&quot;. I chose the long style for better understanding.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.3.2 Sources&lt;/h4&gt; &lt;p&gt;This file contains all files/folders that shall be available in the backup sets.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/rsyncbackup/sources.conf&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;configs|local:/etc|true|&lt;br /&gt;logs|local:/var/log|true|&lt;/pre&gt;  &lt;p&gt;The syntax: &lt;span class=&quot;system&quot;&gt;tag|source path|conditional shell code|optional rsync options&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Note: &quot;&lt;span class=&quot;system&quot;&gt;true&lt;/span&gt;&quot; means that this source is enabled - &quot;&lt;span class=&quot;system&quot;&gt;false&lt;/span&gt;&quot; would disable it.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.3.3 Destinations&lt;/h4&gt; &lt;p&gt;This file contains all destinations that shall be available in the backup sets.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/rsyncbackup/destinations.conf&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;/p&gt; &lt;pre&gt;store_configs|ssh[key=id_rsa,incremental=7,tag=increment]:root@192.168.0.102:/backups/configs/|/usr/bin/traceroute -m 2 192.168.0.102|--bwlimit=300 --delete&lt;br /&gt;store_logs|ssh[key=id_rsa,incremental=7,tag=increment]root@192.168.0.102:/backups/logs/|/usr/bin/traceroute -m 2 192.168.0.102|--bwlimit=300 --delete&lt;br /&gt;store_manual|ssh[key=id_rsa]:root@192.168.0.102:/backups/manual/|/usr/bin/traceroute -m 2 192.168.0.102|&lt;/pre&gt;  &lt;p&gt;The syntax: &lt;span class=&quot;system&quot;&gt;tag|destination path (optional with ssh &amp;amp; incremental settings)|conditional shell code|optional rsync options&lt;/span&gt;&lt;/p&gt; &lt;p&gt;In this example (first and second destination) we use our backup server as destination and authenticate against it with the private ssh key. We want to keep seven increments (&lt;span class=&quot;system&quot;&gt;incremental=7&lt;/span&gt;) whose names begin with &quot;increment&quot; (&lt;span class=&quot;system&quot;&gt;tag=increment&lt;/span&gt;). The optional shell code (&lt;span class=&quot;system&quot;&gt;/usr/bin/traceroute -m 2 192.168.0.102&lt;/span&gt;) will return true (and start the backup) if the backup server is running and at least two hops away. Also we use two optional rsync options (&lt;span class=&quot;system&quot;&gt;--bwlimit=300&lt;/span&gt; and &lt;span class=&quot;system&quot;&gt;--delete&lt;/span&gt;) - so we have a bandwidth limit for this destination and deleted files on the main server will also be deleted on the backup server (for a new increment). Please note that you can only use &lt;span class=&quot;highlight&quot;&gt;ONE&lt;/span&gt; source for a backup set that has an incremental destination.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.3.4 Backup Sets&lt;/h4&gt; &lt;p&gt;This file joins the souces with the destinations.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/rsyncbackup/backupset.conf&lt;/p&gt; &lt;p&gt;It could look like this:&lt;/p&gt; &lt;pre&gt;[manual]&lt;br /&gt;configs,logs|store_manual|true|&lt;br /&gt;&lt;br /&gt;[daily]&lt;br /&gt;logs|store_logs|true|&lt;br /&gt;&lt;br /&gt;[weekly]&lt;br /&gt;configs|store_configs|true|&lt;/pre&gt;  &lt;p&gt;As you can see, we&#39;ve created three backup sets.&lt;/p&gt; &lt;p&gt;The syntax: &lt;span class=&quot;system&quot;&gt;source tags|destination tags|conditional shell code|optional rsync options&lt;/span&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.4 Test&lt;/h4&gt; &lt;p&gt;Now let&#39;s test if our configuration is ok.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;rsyncbackup -x /etc/rsyncbackup -vv -d -s manual&lt;/p&gt; &lt;p&gt;The output should look like this:&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;PATH DIR:/etc/rsyncbackup/&lt;br /&gt;LOG DIR:/etc/rsyncbackup/logs&lt;br /&gt;CONFIG_FILE:/etc/rsyncbackup/config.conf&lt;br /&gt;SOURCE FILE:/etc/rsyncbackup/sources.conf&lt;br /&gt;DESTS_FILE:/etc/rsyncbackup/destinations.conf&lt;br /&gt;BACKUPSET_FILE:/etc/rsyncbackup/backupset.conf&lt;br /&gt;BACKUPSET:manual&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;Backup set 1    configs         to              store_manual&lt;br /&gt;Source          : configs&lt;br /&gt;Source dir      : [local] /etc&lt;br /&gt;Source opts     :&lt;br /&gt;Source cond     : true&lt;br /&gt;Destination     : store_manual&lt;br /&gt;Destination dir : [ssh] root@192.168.0.102:/backups/manual/ [key=id_rsa,sshport=22]&lt;br /&gt;Destination opts:&lt;br /&gt;Destination cond: /usr/bin/traceroute -m 2 192.168.0.102&lt;br /&gt;Config options  : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;Backupset opts  : true&lt;br /&gt;All options     : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;All conditions  : /usr/bin/traceroute -m 2 192.168.0.102 true true&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;Backup set 2    logs            to              store_manual&lt;br /&gt;Source          : logs&lt;br /&gt;Source dir      : [local] /var/log&lt;br /&gt;Source opts     :&lt;br /&gt;Source cond     : true&lt;br /&gt;Destination     : store_manual&lt;br /&gt;Destination dir : [ssh] root@192.168.0.102:/backups/manual/ [key=id_rsa,sshport=22]&lt;br /&gt;Destination opts:&lt;br /&gt;Destination cond: /usr/bin/traceroute -m 2 192.168.0.102&lt;br /&gt;Config options  : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;Backupset opts  : true&lt;br /&gt;All options     : --stats --progress --links --hard-links --times --recursive --perms --owner --group --compress --backup&lt;br /&gt;All conditions  : /usr/bin/traceroute -m 2 192.168.0.102 true true&lt;/p&gt; &lt;p&gt;If all looks ok, we&#39;ll do our first backup.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;rsyncbackup -x /etc/rsyncbackup -b -s manual&lt;/p&gt; &lt;p&gt;After that the backup should be on the backup server - if not, have a look at the logs (&lt;span class=&quot;system&quot;&gt;/etc/rsyncbackup/logs/&lt;/span&gt; or &lt;span class=&quot;system&quot;&gt;/var/log/rsyncbackup/&lt;/span&gt;).&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.5 Cronjob&lt;/h4&gt; &lt;p&gt;Now we create cronjobs for the backups.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;crontab -e&lt;/p&gt; &lt;p&gt;The content could look like this:&lt;/p&gt; &lt;pre&gt;# m h  dom mon dow   command&lt;br /&gt;# Backups&lt;br /&gt;00 02 * * *     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s daily &gt;&gt; /var/log/rsyncbackup/backup.daily.log&lt;br /&gt;00 04 * * 0     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s weekly &gt;&gt; /var/log/rsyncbackup/backup.weekly.log&lt;/pre&gt;  &lt;p&gt;The backup set &quot;daily&quot; will be backed up every day at 2:00am, the backup set &quot;weekly&quot; every sunday at 4:00am. Optional, if you want to get mails when errors occurs, you can add the option &quot;&lt;span class=&quot;system&quot;&gt;-e email@domain&lt;/span&gt;&quot; to the rsyncbackup command - it should look like this:&lt;/p&gt; &lt;pre&gt;# m h  dom mon dow   command&lt;br /&gt;# Backups&lt;br /&gt;00 02 * * *     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s daily -e email@domain &gt;&gt; /var/log/rsyncbackup/backup.daily.log&lt;br /&gt;00 04 * * 0     /usr/local/bin/rsyncbackup -x /etc/rsyncbackup -b -v -s weekly -e email@domain &gt;&gt; /var/log/rsyncbackup/backup.weekly.log&lt;/pre&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;4.6 Manual&lt;/h4&gt; &lt;p&gt;Please have a look at the manual for further information. It is included in the package that you downloaded in step 4.1.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;5 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Debian: &lt;a title=&quot;http://www.debian.org/&quot; target=&quot;_blank&quot; href=&quot;http://www.debian.org/&quot;&gt;http://www.debian.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Rsyncbackup: &lt;a title=&quot;http://code.google.com/p/rsync-backup/&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/p/rsync-backup/&quot;&gt;http://code.google.com/p/rsync-backup/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;book&quot;&gt;&lt;div class=&quot;nav&quot;&gt; &lt;div class=&quot;links&quot;&gt;&lt;div class=&quot;up&quot;&gt;&lt;a href=&quot;http://howtoforge.com/scheduled-backups-with-rsyncbackup-debian-etch&quot; title=&quot;View this page&#39;s parent section.&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class=&quot;titles&quot;&gt;&lt;div class=&quot;prev&quot;&gt;Scheduled Backups With Rsyncbackup On Debian Etch&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot; class=&quot;copyright-footer&quot;&gt;Copyright © 2008 Oliver Meyer&lt;br /&gt;All Rights Reserved. &lt;/div&gt;  &lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6127582381386337079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6127582381386337079'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/scheduled-backups-with-rsyncbackup-on.html' title='Scheduled Backups With Rsyncbackup On Debian Etch - Page 2'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-6000806570744004053</id><published>2008-04-02T23:02:00.000-07:00</published><updated>2008-04-29T23:05:54.730-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>Configure Snort to log packets to MySQL</title><content type='html'>Author : Vincent Danen, ZDNet Asia&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;Administrators can take advantage of the Snort facility to to detect intrusions to the network.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Snort, a network intrusion detection system, can be configured to log packets to a remote MySQL server. A graphical Web interface can be used to view captured packets and statistics. &lt;!--text blurb--&gt;  &lt;p&gt;To begin on the MySQL server, the database must first be created.  &lt;/p&gt;&lt;p&gt;In this scenario, the Snort server is “snort.host” and the MySQL server is &quot;mysql.host&quot;.  &lt;/p&gt;&lt;p&gt;Connect to the database as root:&lt;/p&gt;  &lt;pre&gt;# mysql -u root -p&lt;/pre&gt; &lt;pre&gt;mysql&gt; create database snort;&lt;/pre&gt; &lt;pre&gt;mysql&gt; grant INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on snort.*&lt;br /&gt;to snort@snort.host;&lt;/pre&gt; &lt;pre&gt;mysql&gt; set password for snort@snort.host=PASSWORD(&#39;snortpass&#39;);&lt;/pre&gt; &lt;pre&gt;mysql&gt; flush privileges;&lt;/pre&gt; &lt;pre&gt;mysql&gt; q&lt;/pre&gt;  &lt;p&gt;With the Snort documentation comes a file called &lt;i&gt;create_mysql&lt;/i&gt;, which has the schema for the database.  &lt;/p&gt;&lt;p&gt;On a typical Linux install, this file would be found in &lt;i&gt;/usr/share/doc/snort-[version]/create_mysql&lt;/i&gt;.  &lt;/p&gt;&lt;p&gt;Load this file as root:&lt;/p&gt; &lt;pre&gt;# mysql -u root -p snort &lt;/usr/share/doc/snort-doc/create_mysql&gt;&lt;/pre&gt;  &lt;p&gt;Next, on the system where Snort will be running, edit the &lt;i&gt;/etc/snort/snort.conf&lt;/i&gt; configuration file and tell it to log to the database:&lt;/p&gt; &lt;pre&gt;output database: log, mysql, user=snort password=snortpass&lt;br /&gt;dbname=snort host=mysql.host&lt;/pre&gt;  &lt;p&gt;Finally, make sure that &lt;i&gt;/etc/snort/snort.conf&lt;/i&gt; is mode 0640 and owned root:snort:&lt;/p&gt; &lt;pre&gt;# chown root:snort /etc/snort/snort.conf&lt;/pre&gt; &lt;pre&gt;# chmod 0640 /etc/snort/snort.conf&lt;/pre&gt; &lt;p&gt;The next step is to start Snort; a supplied initscript will start Snort monitoring or you can launch it to the background:&lt;/p&gt; &lt;pre&gt;# /usr/sbin/snort -c /etc/snort/snort.conf &amp;amp;&lt;/pre&gt; &lt;p&gt;Starting Snort once without sending it to the background is a good idea to ensure the connection takes. You can also look on the MySQL server to ensure that logging is active:&lt;/p&gt; &lt;pre&gt;# echo &quot;SELECT hostname FROM sensor;&quot; | mysql -u root -p snort&lt;/pre&gt;  &lt;p&gt;The IP address that Snort is listening on should be displayed.  &lt;/p&gt;&lt;p&gt;Now that Snort is logging data to MySQL, using BASE (&lt;a href=&quot;http://base.secureideas.net/&quot; target=&quot;_blank&quot;&gt;Basic Analysis and Security Engine&lt;/a&gt;) is a great way to view the data via a Web interface. BASE requires a Web server and PHP. Once you have unarchived it where it needs to be, copy the &lt;i&gt;base_conf.php.dist&lt;/i&gt; file to &lt;i&gt;base_conf.php&lt;/i&gt; and edit it, in particular, setting the &lt;i&gt;$alert_dbname&lt;/i&gt; and related variables to point to the Snort log database.&lt;/p&gt;  &lt;p&gt;You will also want to add a snort@localhost user with privileges to the MySQL database if you did not do so earlier (i.e., if your Snort and MySQL servers are physically separate).&lt;/p&gt;  &lt;p&gt;Once that is done, navigate to the BASE install that you just set up and follow the instructions presented to set up the caching table for BASE. When that is complete, BASE is now available to view and graph the logged Snort data.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6000806570744004053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/6000806570744004053'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/04/configure-snort-to-log-packets-to-mysql.html' title='Configure Snort to log packets to MySQL'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-2583768946363661133</id><published>2008-03-30T01:54:00.002-07:00</published><updated>2008-04-29T02:01:30.326-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>How To Install The Openbravo ERP On Debian Etch</title><content type='html'>Author: Oliver Meyer &lt;o&gt;&lt;br /&gt;Last edited 03/07/2008 &lt;/o&gt;&lt;p&gt;This document describes how to set up Openbravo ERP (enterprise management system) on Debian Etch. Taken from the Openbravo page: &quot;Openbravo is an open source ERP solution designed specifically for the SME (small to midsize firm). Developed in a web based environment, it includes many robust functionalities which are considered part of the extended ERP: procurement and warehouse management, project and service management, production management, and financial management.&quot;&lt;/p&gt; &lt;p&gt;I can&#39;t list all the features here - please have a look at http://www.openbravo.com/product/product-features/.&lt;/p&gt; &lt;p&gt;This howto is a practical guide without any warranty - it doesn&#39;t cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 Preparation&lt;/h3&gt; &lt;h4&gt;1.1 Debian Backports&lt;/h4&gt; &lt;p&gt;This repository provides Sun&#39;s JDK that we need for this setup.&lt;/p&gt;&lt;script type=&quot;text/javascript&quot;&gt; &lt;!-- document.write(&#39;&lt;div align=&quot;center&quot;&gt;&#39;); //--&gt; &lt;/script&gt;&lt;div align=&quot;center&quot;&gt;&lt;!-- BEGIN NetShelter Ad Tag for HowtoForge 300x250,336x280 --&gt;  &lt;script language=&quot;JavaScript&quot; src=&quot;http://ad.doubleclick.net/adj/ns.howtoforge/howtos;sz=300x250,336x280;tile=%27+netshel_tile+%27;ord=%27%20+%20netshel_ord%20+%20%27?&quot; type=&quot;text/javascript&quot;&gt;&lt;/scr&#39; + &#39;ipt&gt;&#39;); netshel_tile++; &lt;/script&gt;&lt;script language=&quot;JavaScript&quot; src=&quot;http://ad.doubleclick.net/adj/ns.howtoforge/howtos;sz=300x250,336x280;tile=3;ord=5066799867726883?&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;script language=&quot;JavaScript&quot; src=&quot;http://optimized-by.rubiconproject.com/a/1460/1472/3191.js?cb=0.14774591122950587&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--    e9 = new Object();    e9.size = &quot;336x280,300x250&quot;;    e9.noAd = 1; //--&gt;&lt;/script&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://tags.expo9.exponential.com/tags/HowToForgecom/ROS/tags.js&quot;&gt;&lt;/script&gt;&lt;center&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://a.tribalfusion.com/j.ad?site=howtoforgecom&amp;amp;adSpace=ros&amp;amp;size=336x280%7C300x250&amp;amp;p=2255179&amp;amp;a=3&amp;amp;flashVer=9&amp;amp;ver=1.14&amp;amp;center=1&amp;amp;noAd=1&amp;amp;url=http%3A%2F%2Fhowtoforge.com%2Finstalling-openbravo-erp-on-debian-etch&amp;amp;rurl=http%3A%2F%2Fhowtoforge.com%2Fhowtos%2Flinux%2Fdebian&amp;amp;rnd=2264362&quot;&gt;&lt;/script&gt;&lt;iframe src=&quot;http://www.howtoforge.com/admedia/reste_300x250.php&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; frameborder=&quot;0&quot; height=&quot;250&quot; scrolling=&quot;no&quot; width=&quot;300&quot;&gt;&lt;/iframe&gt;&lt;/center&gt;  &lt;!-- END AD TAG --&gt;&lt;script type=&quot;text/javascript&quot;&gt; &lt;!-- document.write(&#39;&lt;/div&gt;&#39;); //--&gt; &lt;/script&gt;&lt;/div&gt; &lt;p class=&quot;command&quot;&gt;vi /etc/apt/sources.list&lt;/p&gt; &lt;p&gt;Add the following lines.&lt;/p&gt; &lt;pre&gt;# Debian Backports&lt;br /&gt;deb http://www.backports.org/debian etch-backports main contrib non-free&lt;/pre&gt; &lt;p&gt;Afterwards refresh apt ...&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get update&lt;/p&gt; &lt;p&gt;... and import the gpg-key.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install debian-backports-keyring&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2 Needed Packages&lt;/h4&gt; &lt;p&gt;Now let&#39;s install and configure the needed packages.&lt;/p&gt; &lt;h4&gt;1.2.1 PostgreSQL&lt;/h4&gt; &lt;p&gt;Install it via:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install postgresql-8.2&lt;/p&gt; &lt;p&gt;Afterwards we have to set the PostgreSQL admin password.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sed -i &#39;s/ident sameuser$/trust/&#39; /etc/postgresql/8.2/main/pg_hba.conf&lt;br /&gt;/etc/init.d/postgresql-8.2 restart&lt;/p&gt; &lt;p&gt;Open a PostgreSQL shell.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;psql -U postgres&lt;br /&gt;alter role postgres with password &#39;%new_PostgreSQL_admin_passowrd%&#39;;&lt;br /&gt;\q&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;sed -i &#39;s/trust$/md5/&#39; /etc/postgresql/8.2/main/pg_hba.conf&lt;br /&gt;/etc/init.d/postgresql-8.2 reload&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2.2 Java JDK&lt;/h4&gt; &lt;p&gt;Install it via:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install sun-java6-jdk&lt;/p&gt; &lt;p&gt;Afterwards make it systemwide available.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;update-java-alternatives -s java-6-sun&lt;br /&gt;echo &#39;JAVA_HOME=&quot;/usr/lib/jvm/java-6-sun&quot;&#39; | tee -a /etc/environment&lt;/p&gt; &lt;p class=&quot;highlight&quot;&gt;After that log out and in again to take the changes effect.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2.3 Apache Tomcat&lt;/h4&gt; &lt;p&gt;Install it via:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps&lt;/p&gt; &lt;p&gt;Afterwards we have to configure it.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;rm /var/log/tomcat5.5/catalina.out&lt;br /&gt;vi /etc/init.d/tomcat5.5&lt;/p&gt; &lt;p&gt;Change:&lt;/p&gt; &lt;pre&gt;TOMCAT5_SECURITY=yes&lt;/pre&gt; &lt;p&gt;To:&lt;/p&gt; &lt;pre&gt;TOMCAT5_SECURITY=no&lt;/pre&gt; &lt;p&gt;Restart Tomcat.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;/etc/init.d/tomcat5.5 restart&lt;/p&gt; &lt;p&gt;Now let&#39;s look if all went well.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;netstat -tap | grep java&lt;/p&gt; &lt;p&gt;Tomcat should be listening on port 8180.&lt;/p&gt; &lt;p class=&quot;system&quot;&gt;tcp6       0      0 *:8180                  *:*                     LISTEN     3571/java&lt;/p&gt; &lt;p&gt;As a last resort make it systemwide available.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;echo &#39;CATALINA_HOME=&quot;/usr/share/tomcat5.5&quot;&#39; | tee -a /etc/environment&lt;br /&gt;echo &#39;CATALINA_BASE=&quot;/var/lib/tomcat5.5&quot;&#39; | tee -a /etc/environment&lt;br /&gt;echo &#39;CATALINA_OPTS=&quot;-server -Xms384M -Xmx512M&quot;&#39; | tee -a /etc/environment&lt;/p&gt; &lt;p class=&quot;highlight&quot;&gt;After that log out and in again to take the changes effect.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;1.2.4 Apache Ant&lt;/h4&gt; &lt;p&gt;Apache ant has already been installed as dependency at the step before - so only the configuration is left.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;echo &#39;ANT_HOME=&quot;/usr/share/ant&quot;&#39; | tee -a /etc/environment&lt;/p&gt; &lt;p class=&quot;highlight&quot;&gt;After that log out and in again to take the changes effect.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 Openbravo&lt;/h3&gt; &lt;h4&gt;2.1 Get It&lt;/h4&gt; &lt;p&gt;Please have a look at &lt;a href=&quot;http://sourceforge.net/projects/openbravo/&quot; title=&quot;http://sourceforge.net/projects/openbravo/&quot; target=&quot;_blank&quot;&gt;http://sourceforge.net/projects/openbravo/&lt;/a&gt; to find out which is the latest version. When I was writing this howto it was version 2.35mp1.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;cd /tmp/&lt;br /&gt;wget http://mesh.dl.sourceforge.net/sourceforge/openbravo/OpenbravoERP-2.35-MP1-linux-installer.bin&lt;br /&gt;chmod +x OpenbravoERP-2.35-MP1-linux-installer.bin&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;2.2 Installation&lt;/h4&gt; &lt;p&gt;A text based installer will guide you through the installation.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;./OpenbravoERP-2.35-MP1-linux-installer.bin&lt;/p&gt; &lt;p&gt;First press a few times &quot;Enter&quot; to read the single parts of the license agreement. Type in &quot;&lt;span class=&quot;system&quot;&gt;yes&lt;/span&gt;&quot; at the end if you agree with it.&lt;/p&gt; &lt;p&gt;Before the installation begins you&#39;ll be asked a few questions - answer them as follows.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;/opt/OpenbravoERP&lt;/span&gt;) when you&#39;re asked for the installation directory.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;/opt/OpenbravoERP/AppsOpenbravo/attach&lt;/span&gt;) when you&#39;re asked for the attachments directory.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;Full (standard) installation&lt;/span&gt;) when you&#39;re asked for the installation type.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;Full&lt;/span&gt;) when you&#39;re asked again for the installation type.&lt;/li&gt;&lt;li&gt;Choose PostgreSQL as database to use.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;/usr/lib/jvm/java-6-sun&lt;/span&gt;) when you&#39;re asked for the java home directory.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;/usr/share/ant&lt;/span&gt;) when you&#39;re asked for the Apache ant home directory.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;/var/lib/tomcat5.5&lt;/span&gt;) when you&#39;re asked for the Tomcat installation directory.&lt;/li&gt;&lt;li&gt;Type in your web server&#39;s domain (&lt;span class=&quot;system&quot;&gt;e.g.: server1.example.com&lt;/span&gt;) when you&#39;re asked for it.&lt;/li&gt;&lt;li&gt;Enter &quot;&lt;span class=&quot;system&quot;&gt;8180&lt;/span&gt;&quot; when you&#39;re asked for the http port.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;openbravo&lt;/span&gt;) when you&#39;re asked for the context name.&lt;/li&gt;&lt;li&gt;Enter &quot;&lt;span class=&quot;system&quot;&gt;/usr/bin&lt;/span&gt;&quot; when you&#39;re asked for the directory that contains the PostgreSQL binaries.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;localhost&lt;/span&gt;) when you&#39;re asked for the database server parameters.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;4532&lt;/span&gt;) when you&#39;re asked for PostgreSQL&#39;s listening port.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;openbravo&lt;/span&gt;) when you&#39;re asked for the database name.&lt;/li&gt;&lt;li&gt;Next enter the PostgreSQL admin password (twice) that you created earlier at step 1.2.1.&lt;/li&gt;&lt;li&gt;Hit &quot;Enter&quot; to choose the default (&lt;span class=&quot;system&quot;&gt;tad&lt;/span&gt;) when you&#39;re asked for the openbravo database user.&lt;/li&gt;&lt;li&gt;Next type in a password (twice) for the new user.&lt;/li&gt;&lt;li&gt;Now type in &quot;&lt;span class=&quot;system&quot;&gt;y&lt;/span&gt;&quot; to start the installation - this will take a while...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt;  &lt;h4&gt;2.3 Webinterface&lt;/h4&gt; &lt;p&gt;Now you can access Openbravo via &lt;span class=&quot;system&quot;&gt;http://%servername%:8180/openbravo&lt;/span&gt; . Log in with the username &quot;Openbravo&quot; and the password &quot;openbravo&quot;.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/openbravo_on_etch/big/login.jpg&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/openbravo_on_etch/login.jpg&quot; style=&quot;border: medium none ;&quot; /&gt;&lt;div&gt;&lt;img src=&quot;http://images.howtoforge.com/images/click_to_enlarge.png&quot; alt=&quot;Click to enlarge&quot; border=&quot;0&quot; height=&quot;12&quot; width=&quot;100&quot; /&gt; &lt;/div&gt;&lt;/a&gt;&lt;noscript style=&quot;font-size: 7pt;&quot;&gt;(JavaScript must be enabled in your browser to view the large image as an image overlay.)&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://images.howtoforge.com/images/openbravo_on_etch/big/welcome.jpg&quot; class=&quot;thickbox&quot;&gt;&lt;img src=&quot;http://images.howtoforge.com/images/openbravo_on_etch/welcome.jpg&quot; style=&quot;border: medium none ;&quot; /&gt;&lt;div&gt;&lt;img src=&quot;http://images.howtoforge.com/images/click_to_enlarge.png&quot; alt=&quot;Click to enlarge&quot; border=&quot;0&quot; height=&quot;12&quot; width=&quot;100&quot; /&gt; &lt;/div&gt;&lt;/a&gt;&lt;noscript style=&quot;font-size: 7pt;&quot;&gt;(JavaScript must be enabled in your browser to view the large image as an image overlay.)&lt;/noscript&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;3 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Debian: &lt;a title=&quot;http://www.debian.org/&quot; target=&quot;_blank&quot; href=&quot;http://www.debian.org/&quot;&gt;http://www.debian.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Openbravo: &lt;a title=&quot;http://www.openbravo.com/&quot; target=&quot;_blank&quot; href=&quot;http://www.openbravo.com/&quot;&gt;http://www.openbravo.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Openbravo user manual: &lt;a title=&quot;http://wiki.openbravo.com/wiki/User_Manual_2.3&quot; target=&quot;_blank&quot; href=&quot;http://wiki.openbravo.com/wiki/User_Manual_2.3&quot;&gt;http://wiki.openbravo.com/wiki/User_Manual_2.3&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot; class=&quot;copyright-footer&quot;&gt;Copyright © 2008 Oliver Meyer&lt;br /&gt;All Rights Reserved. &lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2583768946363661133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/2583768946363661133'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/03/how-to-install-openbravo-erp-on-debian.html' title='How To Install The Openbravo ERP On Debian Etch'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8274187644747833387.post-4159433800423643976</id><published>2008-03-08T04:34:00.005-07:00</published><updated>2008-03-12T16:46:40.720-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="How To"/><title type='text'>VMware Server v1.04 On Fedora 8 With Kernel 2.6.24</title><content type='html'>&lt;p&gt;Version 1.0&lt;br /&gt;Author: Oliver Meyer &lt;o meyer=&quot;&quot; projektfarm=&quot;&quot; de=&quot;&quot;&gt;&lt;br /&gt;Last edited 03/07/2008&lt;/o&gt;&lt;/p&gt; &lt;p&gt;This document describes how to set up VMware Server v1.04 on Fedora 8 with the brand-new kernel 2.6.24 (2.6.24.3-12.fc8).&lt;/p&gt; &lt;p&gt;This howto is a practical guide without any warranty - it doesn&#39;t cover the theoretical backgrounds. There are many ways to set up such a system - this is the way I chose. &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;1 VMware Server Is Not Installed Yet&lt;br /&gt;&lt;/h3&gt; &lt;p&gt;Download and install the VMware Server as described at step 14.3.16, but DON&#39;T apply the any-any patch. Afterwards proceed with step 2.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;2 VMware Server Is Already Installed&lt;/h3&gt; &lt;p&gt;Download &lt;a title=&quot;#&quot; target=&quot;_blank&quot; href=&quot;http://downloads.howtoforge.com/vmware_server_on_f8_2.6.24/vmware.tar.bz2&quot;&gt;this patch&lt;/a&gt;. After that open a terminal, become root and switch to the folder where you downloaded the patch. Unpack the patch and copy the included .tar-files to the VMware module-sources directory.&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;tar xvfj vmware.tar.bz2&lt;br /&gt;cd vmware/&lt;br /&gt;cp vm* /usr/lib/vmware/modules/source/&lt;/p&gt; &lt;p&gt;Now type in:&lt;/p&gt; &lt;p class=&quot;command&quot;&gt;vmware-config.pl&lt;/p&gt; &lt;p&gt;Answer all the questions with &quot;yes&quot; and accept the license agreement (if you agree with it). After that you&#39;ll be asked a few questions about install paths etc. - simply hit enter for every question. As a last resort you have to insert your serial number. Afterwards the VMware Server is available in the gnome applications menu.&lt;/p&gt; &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;3 Links&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;Fedora: &lt;a title=&quot;http://fedoraproject.org/&quot; target=&quot;_blank&quot; href=&quot;http://fedoraproject.org/&quot;&gt;http://fedoraproject.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;VMware Server: &lt;a title=&quot;http://www.vmware.com/download/server/&quot; target=&quot;_blank&quot; href=&quot;http://www.vmware.com/download/server/&quot;&gt;http://www.vmware.com/download/server/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4159433800423643976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8274187644747833387/posts/default/4159433800423643976'/><link rel='alternate' type='text/html' href='http://linuxtomorrow.blogspot.com/2008/03/vmware-server-v104-on-fedora-8-with.html' title='VMware Server v1.04 On Fedora 8 With Kernel 2.6.24'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>