Пак ли? *FUD*

Тъй, да видим утре коя друга оптика, освен тази на MSAT Cable ще се окаже пострадала.

Днес около 19.30 е прекъснат магистрален оптичен кабел в района на Аспарухов мост. За момента не знам подробности, но нещо ме навежда на мисълта, че подозренията ще се наклонят здраво към „уважаемите колеги“ от И****билд. Дано да е инцидент и те да нямат нищо общо.

Защото ако имат, това може да се окаже грешка, и то сериозна.

Допълнение: Да, наистина имаше прерязана оптика на MSAT Cable. Интересното е, че заедно вървят две HDPE тръби – едната е на MSAT, а другата – на SPNet. Тръбата на Спектър е здрава, но не и тази на MSAT. Дали ще съм прав, ако предположа, че целта вероятно е била оптиката на SPNet, но погрешка е била презярана другата тръба?

Бффф… все си мислех, че тази работа ще спре някога, но по всичко изглежда, че няма да е скоро. И все пак, не искам да обвинявам конкретно някого – няма свидетели, и е напълно възможно да е бил всеки.

Който и да го е направил, то си знае…

 Втора редакция : Всъщност излезе, че това е най-обикновен FUD. Извинявам се за което – причината за прекъсването на оптичния кабел е подпален (по неизвестна причина) стълб.

ntp и BTC

Вече няколко пъти доставчикът на Интернет достъп БТК ме учудва. Защо ме учудва ли? Защото на няколко различни машини, вързани било през оптика, било през ADSL, се случва да не могат да намерят по име 0.pool.ntp.org, и въобще нищо, свързано с ntp.org. Това е меко казано неприятно – разчитам именно на NTP сървърите със свободен достъп, тъй като самите БТК нямат обявени такива.

Всъщност има един хост (213.91.134.2), който е в мрежата на БТК и работи като NTP сървър. Естествено, когато нямам достъп до зоната ntp.org, няма как да стигна и до този хост…

IPSec VPN между Nokia E90 и Linux 2.6 (kame/racoon)

  1. Необходими условия
  2. На почти всеки днес е добре известно какво означава VPN. Виртуалните частни мрежи са изключително разпространени в наши дни, и се използват за най-различни неща – от достъп до корпоративни мрежи през свързване на фирмени офиси до достъп до домашни мрежи, всичко това през Интернет или през някаква друга враждебна (буквалният превод на hostile ми се струва много подходящ в случая) среда. С подобна идея (достъп до корпоративна мрежа) реших и аз да опитам да събера наличната информация и да осъществя VPN връзка между мобилен телефон Nokia E90 (или друг със Symbian v9 от S60v3 или FP1 и по-нов), и GNU/Linux машина с ядро 2.6 -
    тествано с Debian GNU/Linux Lenny (20070903) и ядро 2.6.19.2 (с компилиран IPSec).

    Continue reading →

Основи на HFSC

Извадка от документацията към дистрибуцията ALTQ – първата свободна
имплементация на HFSC, разработена в Университета Карнеги Мелън за xBSD.
По-късно е пренесена от Патрик МакХарди в Linux 2.4/2.6.

Следният документ представлява добър справочен материал, но е твърде теоретичен.
Ето защо тук ще изложим основите на HFSC.

„A Hierarchical Fair Service Curve Algorithm for Link-Sharing, Real-Time and
Priority Service“ Ion Stoica, Hui Zhang, and T. S. Eugene Ng. SIGCOMM’97.

Документът може да бъде намерен тук:

http://www.minus273.org/wp-content/uploads/2008/01/sigcom97.pdf

Още информация има тук:
http://www.cs.cmu.edu/~hzhang/HFSC/main.html

  1. Сервизна крива:

  2. HFSC поддържа 2 сервизни криви – една за реално-времеви критерии, а другата за
    критерии на разпределение на линията.

    Сервизната крива на HFSC се състои от 2 сегмента. „m1″ и „m2″ са кривините на
    двата сегмента, а „d“ е x-проекцията на точката на пресичане, която определя
    дължината на първия сегмент. Логично, „m2″ указва производителността,
    гарантирана на един поток в дългосрочен план, докато „m1″ указва скоростта, с
    която се обслужва един изблик (burst). Когато кривината на първия сегмент е
    по-голяма от тази на втория, я наричаме „вдлъбната“. Една сервизна крива може да
    бъде или вдлъбната, или изпъкнала.

                              m2    ________
                    ________--------                         /
                   /                                     m2 /
                  /                                        /
              m1 /                                        /
                /                              m1 = 0    /
               /                              __________/
               <-d->                          <-- d --->
    
                      concave                   convex

    Една вдлъбната сервизна крива осигурява ограничен изблик (burst), подобно на
    token-bucket. Триъгълната област, образувана от първия сегмент приблизително
    съответства на дълбочината на token-bucket, а кривината ограничава нейната
    пикова стойност.

    Разликата се състои в това, че пиковата стойност на token-bucket е горна граница
    на скоростта на изпращане и често се установява на скоростта, която позволява
    физическата линия. От друга страна, HFSC гарантира скоростта, дефинирана от
    първия сегмент, и следователно не може да бъде установена на скоростта на
    физическата линия.

    Изпъкналата сервизна крива, от друга страна, потиска първоначалния обем трафик.
    „m1″ на изпъкналата крива трябва да бъде 0 в настоящата имплементация.
    Една линейна сервизна крива е специален случай на изпъкнала крива с първи
    сегмент NULL (т.е. празна стойност).
    Линейната сервизна крива съответства на традиционния модел на виртуалния
    часовник и е добра отправна точка за потребители-новобранци.

  3. Виртуално време:

  4. Всеки клас пази общия брой байтове, които вече е изпратил. Когато даден клас се
    препълни, за пакета на върха на опашката се калкулира виртуално време vt. То
    представлява x-проекция на сервизната крива, съответстваща на (total + packet_len).
    В резултат на това vt на даден клас се увеличава монотонно.
    Като се даде път на пакета с най-малко виртуално време, разпределението на
    капацитет става пропорционално на кривината на сервизната крива на всеки клас.

                        bytes
                             |                   /
                             |                  /service curve
                             |                 /
               next   -->+   +----------------+
               packet    |   |               /|
               length    |   |              / |
                         |   |             /  |
               total --> +   +------------+   |
               bytes         |           /|   |
               already       |          / |   |
               sent          |         /  |   |
                                      /   |   |
                                          |   |
                                          |   |
                                  --------+---+--------------> time
                                              vt for next packet
                                          vt for previous packet

    Сервизната крива се обновява всеки път, когато даден клас се препълни.
    Операцията по обновяването взема като минимум

    (1) Сервизната крива, използвана при предишния период на препълване
    и

    (2) оригиналната сервизна крива, която започва в (current_time, total_bytes).
    Когато един клас бъде неактивен достатъчно дълго, обновената крива е равна на
    (2). От друга страна, когато класът е използвал много повече капацитет от
    заделеното за него, обновената сервизна крива е равна на (1). (1) и (2) могат да
    се пресекат, когато класът е използвал капацитет съвсем малко по-малък от
    своя дял. В този случай, обновената крива би имала различна стойност „d“.
    Операцията е илюстрирана в следните фигури. Може би е по-лесно да се разглежда
    като полу-празна token-bucket.

                                                         ________
                                         ________--------
                                        /                  ______
                                       /   ________--------
                           ________---+----
                          /          /
                         /          /
        total    ->     /          + new coordinate
                       /
                      /
               service curve       |
                     of            +
              previous period   current
                                 time
    
    			Update Operation
    
                                                           ______
                                           ________--------
                                      +----
                                     /
                                    /
        total    ->                + new coordinate                
    
                                   |
                                   +
                                 current
                                 time
    
    			New Service Curve
  5. HFSC планиране:

  6. HFSC има два независими механизма за планиране. Планирането в реално време се
    използва, за да се гарантира едновременно закъснението и разпределението на
    мрежов капацитет.

    Йерархичното планиране се използва, за да се разпредели излишния капацитет, ако
    има наличен такъв.

    Когато един пакет излиза от опашката, HFSC винаги опитва първо планиране в
    реално време. Ако никой пакет не подлежи на планиране в реално време, се
    изпълнява йерархично планиране. HFSC не използва йерархията на класовете за
    планиране в реално време.

  7. Йерархично планиране:

  8. В HFSC само крайните (leaf) класове имат истински пакети, но виртуалното време
    на междинните класове също се поддържа, като се сумира общия брой байтове,
    използван от техните наследници.

    Когато един пакет излиза от опашката, йерархичният scheduler на HSFC минава през
    класовете от корена до един краен клас. На всяко ниво от йерархията scheduler-ът
    избира класа с най-малко виртуално време измежду неговите наследници. Когато
    бъде достигнат краен клас, той се и обслужва.

    Обърнете внимание, че scheduler-ът търси само директни наследници на всяко ниво.
    Ето защо разпределението на капацитета е пропорционално на кривините на
    сервизните криви сред класовете с един родител, но не и сред такива с различни
    родители. Например 4 крайни класа в следващата илюстрация ще получат еднакъв
    капацитет, въпреки че А, B и C, D имат различни кривини.

    С други думи, съотношението между класовете с един родител контролира
    разпределението на капацитета, а абсолютните стойности на кривините нямат
    значение. (Също стойностите на виртуалното време трябва да са логични само сред
    класовете с един и същи родител).

                                  root (100Mbps)
                                   |
                           +-------+-------+
                           |               |
                           E (20Mbps)      F (20Mbps)
                           |               |
                       +---+---+       +---+---+
                       |       |       |       |
                       A       B       C       D
                   (10Mbps) (10Mbps) (1Mbps) (1Mbps)
  9. Планиране в реално време:

  10. Противоположно на йерархичното планиране, за планирането в реално време се
    използва едно единствено последователно време. Всеки клас пази кумулативен брой
    байтове, подобен на общия брой байтове, но само за пакетите, които са били
    подложени на планиране в реално време.

    HFSC изчислява време за избиране и краен срок за всеки клас.
    Времето за избиране и крайния срок са x-проекции на главата и опашката на
    следващия пакет.

    Един клас може да бъде избран за планиране в реално време, когато текущото време
    стане по-голямо от времето за избиране на класа.
    Планировчикът за реално време избира класа с най-малък краен срок сред
    възможните.

                        bytes
                             |                   /
                             |                  /service curve
                             |                 /
               next   -->+   +----------------+
               packet    |   |               /|
               length    |   |              / |
                         |   |             /  |
          cumulative --> +   +------------+   |
               bytes         |           /|   |
               already       |          / |   |
               sent          |         /  |   |
                                      /   |   |
                                          |   |
                                          |   |
                                  --------+---+--------------> time
                                    eligible  deadline
                                    time

    В оригиналния документ за HFSC за планирането в реално време и за
    разпределението на капацитета се използва една сервизна крива. ALTQ (а оттам и
    имплементацията за Linux) е разширена и може да използва независими криви за
    реално време и за разпределение на капацитета.

    Разделянето на сервизните криви позволява да се контролират независимо
    гарантираната скорост и разпределението на излишния капацитет. Например възможно
    е да се гарантира минимум капацитет 2Мбита на два класа, но излишния капацитет
    на бъде разпределен в различно съотношение.

    Възможно е също която и да е от сервизните криви да бъде установена на 0. Когато
    кривата на реалното време е 0, класът получава само излишния капацитет.
    Когато кривата на разпределението е 0, класът не може да получава излишен
    капацитет при наличие на такъв. Обърнете внимание, че нулево разпределение прави
    класа не work-conserving.

    Забележете, че разпределението на капацитет може да гарантира заделената скорост
    само ако кривата на реалното време е равна или по-малка от кривата на
    разпределение на капацитет за всички класове. Ако кривата на разпределението на
    капацитета е по-малка, скоростта може да не бъде осигурена.

    Пишете ми, ако намерите грешки и/или несъответствия в този текст.

Нещата, които мога да правя в linux и не мога в windows

Един приятел е превел интересна статия. Пускам връзка към нея, защото ми се стори любопитна.

Debian GNU/Linux Etch

Днес по време на стандартно обновяване с apt-get update && apt-get -u dist-upgrade -y забелязах, че вече имаме нов стабилен Дебиан. Той се казва Etch и е с версия 4.0. Честито!

Intel 82573E и e1000

Днес се сблъсках с една много противна случка, свързана с гигабитова мрежова карта Intel 82573E и драйвер (последен за момента) 7.3.20 на модула e1000, взет от e1000.sf.net.
Проблемът се изразява в постоянно вдигане и падане на връзката от тази мрежова карта, както и следните съобщения в системния журнал:

fw2 kernel: e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
fw2 kernel: NETDEV WATCHDOG: eth0: transmit timed out
fw2 kernel: e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex

Решението е описано на тази страница, и в общи линии е причинено от някаква функция на управление на захранването (power management), която не ще (мамицата й) да се изключва. Може да се провери дали става въпрос за дефектна карта, като се изпълни

 # ethtool -e eth0
 Offset          Values
 ------          ------
 0x0000          00 12 34 56 fe dc 30 0d 46 f7 f4 00 ff ff ff ff
 0x0010          ff ff ff ff 6b 02 8c 10 d9 15 8c 10 86 80 de 83
                                                           ^^

и се види дали подчертаните стойности са същите, като показаните тук. Тогава трябва да се изтегли едно малко скриптче, което „поправя“ EEPROM-а на картата. При мен проблемът се реши по този начин.

HTB + net-snmp мини как-да

Този документ е публикуван с надеждата, че ще бъде полезен някому, но без НИКАКВА ГАРАНЦИЯ, ВКЛЮЧИТЕЛНО И БЕЗ ГАРАНЦИИТЕ ПО ПОДРАЗБИРАНЕ! С други думи, ако след прилагането на инструкциите, посочени тук, вашият 4-процесорен Compaq ML570 вземе, че подскочи и се тръшне примрял на една страна, аз
не нося никаква отговорност! Толкоз.

    1. Linux ядро 2.4.х (*), изпитано с 2.4.28 – www.kernel.org. От 2.4.20 насам htb е част от ядрото на Линус Торвалдс, така че допълнителни кръпки не са ви необходими. Все пак, за пълнота тук добавям една полезна връзка към разработка на Лукаш Чжарновски, която добавя и няколко опашкиращи дисциплини, по една или друга причина неуспели да си проправят път в официалното ядро: esfq, wrr.
    2. Дистрибуцията на net-snmp, изпробвано с net-snmp-5.2.1.tar.gz, взета от тук:

      http://sourceforge.net/project/showfiles.php?group_id=12694

    3. Кръпка за net-snmp 5.2.1, допълваща поддръжка за QOS. Можете да я свалите от тук: http://x-ray.prokon.cz/data/snmp/downloads/snmp-extension-0.2.1-rc1.tar.gz
    1. Първо разархивирайте изходния код на net-snmp:
    2. tar jxf net-snmp-5.2.1.tar.gz -C /usr/src

      Разархивирайте някъде snmp-extension-0.2.1-rc1.tar.gz, след което копирайте съдържанието на директорията source в /usr/src/net-snmp-5.2/agent/mibgroup:

      cd /usr/src/net-snmp-5.2
      tar zxf snmp-extension-0.2.1-rc1.tar.gz
      cp source/* agent/mibgroup/
    3. След това настройте net-snmp посредством:
    4. ./configure --prefix=/usr/local/net-snmp --with-mib-modules=qos
    5. След това компилирайте и инсталирайте:
    6. make && make install
    7. Ако искате да виждате транслирани имената на клоните на snmp дървото, ще трябва да копирате QOS.TXT от snmp-extension-0.2.1-rc1.tar.gz там, където се очаква да го търси и snmpd, примерно в /usr/local/net-snmp/share/snmp/mibs/. Остава ви само да понатрупане един известен брой класове (примерно 10-20к) и да стартирате snmpd:
    8. /usr/local/net-snmp/sbin/snmpd -m /usr/local/net-snmp/share/snmp/mibs/QOS.TXT
    1. Разширението на net-snmp за LINUX-KERNEL-QOS не работи с ядро 2.6. Вероятна причина за това е, че netlink интерфейса е променен. Не съм сигурен и не мога да кажа нищо повече по въпроса.
    2. Не мисля, че тази разработка ще позволи да изградите работеща система, която да обхожда повече от 40-50 класа наведнъж. Лично аз го използвам за статистики само на основните си вътрешни класове, но не и за крайните листа.
  1. Въведение
  2. Този документ описва (накратко) как да инсталирате и конфигурирате net-snmp, така че да можете да наблюдавате различни параметри на вече изградена йерархия от HTB класове, така че след това да си запазвате и изобразявате тази информация посредством mrtg/rrdtool или каквото си пожелаете.

  3. Необходими предварителни условия
  4. За да получите накрая snmpd сървър, който разбира от LINUX-KERNEL-QOS дефиниции (с отделен от IANA номер на клончето enterprises 18756), ви е необходим следния софтуер:

  5. Инсталация и конфигуриране
  6. Същинско събиране на информация за състоянието на отделните класове
  7. Естествено, след цялата борба (ако всичко тръгне от раз, значи имате късмет) ще искате да можете да визуализирате състоянието на htb/cbq класовете си, нали? Не бива да забравяте, че идентификаторите на класовете в htb йерархията са с шестнайсетични major и minor числа. За да стане всичко още по-весело, същите тези класове трябва да ги търсите със същите идентификатори, но в десетичен формат. За по-подробно описание на отделните полета в таблицата, разгледайте файла QOS.TXT (който е същинския mib, в крайна сметка). Редът на индексите е следния – колона в таблицата (според QOS.TXT), тип на устройството (т.е. eth, ppp или друго), пореден номер на устройството, qos major и qos minor на класа. Ето един пример:

    snmpwalk -m <път до QOS.TXT> -v 2c -c community ip_address LINUX-KERNEL-QOS::qosDropped.2.1.1.800

    Обърнете внимание на последните четири числа. Започваме ги отзад напред. Последното е qos minor на търсения от нас клас в десетичен формат. Предпоследното е qos major, пред него е устройството с индекс 1, а пред него стои тип 2 (т.е. ethernet). Накратко питаме по snmp за това колко изпуснати (dropped) байтове има за клас 1:320, закачен за устройството eth1.

    Забележки:

    Сами се сетете как можете да използвате тази информация, за да си рисувате красивички mrtg/rrdtool графики.

    Пишете ми, ако намерите грешки и/или несъответствия в този текст.

Postfix with Amavisd-new/F-Prot/Spamassassin using MySQL backend, SASL2/Pop-before-smtp and Courier-IMAP/POP3

Abstract:

This is a brief memo, intented to help out in building a mail system comprised
of postfix as MTA, Courier-IMAP/POP3 and various other useful stuff like SASL2
user authentication, pop-before-smtp (whichever one chooses);
Amavisd-new/Spamassasing antivirus and spamchecking system; and finally MySQL
as a backend. In some places this little document is following almost by heart
the instructions found in different places the net, and especially the excellent
http://high5.net/howto


Installation of Postfix

The entire setup is performed on an (almost) fresh install Redhat Linux 7.3.
The Postfix version, used in this example is 2.0.13, and the appropriate
SSL/TLS patch version is 0.8.15-2.0.13-0.9.7b. Before initiating the postfix
installation itself, it is necessary to install several of the other
programmes, i.e. MySQL – I used the version shipped with RH 7.3, and the latest
BerkeleyDB from here:
http://www.sleepycat.com/download/index.shtml
Here I wont describe the compillation and setup of the above.
Go get the latest postfix source from one of the mirrors around the world:
http://www.postfix.org/download/
and the Postfix TLS patch:
ftp://ftp.aet.tu-cottbus.de/pub/postfix_tls/pfixtls-0.8.15-2.0.13-0.9.7b.tar.gz

 tar zxf postfix-2.0.13.tar.gz
 tar zxf pfixtls-0.8.15-2.0.13-0.9.7b.tar.gz
 cd /usr/src/postfix-2.0.13
 patch -p1 < <path to you pfix-tls patch>make makefiles 'CCARGS=-I/usr/include/mysql -DHAS_MYSQL \
         -I/usr/local/include/sasl -DUSE_SASL_AUTH \
         -I/usr/local/BerkeleyDB.4.1/include -DHAS_DB \
         -I/usr/include/openssl -DUSE_SSL' \
         'AUXLIBS=-L/usr/lib/mysql/ -lmysqlclient \
         -lssl -lcrypto -lz -lm \
         -L/usr/local/lib/sasl2 -lsasl2 \
         -L/usr/local/BerkeleyDB.4.1/lib -ldb'
 groupadd postdrop
 groupadd postfix
 useradd -g postfix postfix
 make && make install


Configuration

Information on TLS setup is described here:
http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/


Create the database

Create a Postfix user and the Postfix database.
Use mysql or mysql -p to login to the MySQL Monitor.

 USE mysql;
 INSERT INTO user (Host, User, Password) VALUES
 ('localhost','postfix',password('postfix123'));INSERT INTO db (Host, Db, User,
 Select_priv) VALUES ('localhost','postfix','postfix','Y');CREATE DATABASE
 postfix;


Create the Tables

In order to use MySQL with Postfix we need to create 3 tables. All of
these tables have information for Postfix, and some for Courier-IMAP as
noted by each table. There are a couple of columns that are not used by
neither Postfix or Courier-IMAP. These columns are:

  • domain (in some tables)
  • create_date
  • change_date
  • active

These columns are used to make your life easier together with Postfix
Admin. The „active“ column is not used at the moment.


Create the Alias Table

 #
 # Table structure for table alias
 #
 USE postfix;
 CREATE TABLE alias (
   address varchar(255) NOT NULL default '',
   goto text NOT NULL,
   domain varchar(255) NOT NULL default '',
   create_date datetime NOT NULL default '0000-00-00 00:00:00',
   change_date datetime NOT NULL default '0000-00-00 00:00:00',
   active tinyint(4) NOT NULL default '1',
   PRIMARY KEY (address)
 ) TYPE=MyISAM COMMENT='Virtual Aliases–mysql_virtual_alias_maps';

Postfix is using the „address“ and „goto“ column.
Courier is not using this table.
NOTE: This table can be used for virtual .foward files. This table is nothing
more than /etc/aliases that you will find on any *nix-like OS.
Multiple destination email addresses need to be separated by a „,“ (comma).


Create the Domain Table

 #
 # Table structure for table domain
 #
 USE postfix;
 CREATE TABLE domain (
   domain varchar(255) NOT NULL default '',
   description varchar(255) NOT NULL default '',
   create_date datetime NOT NULL default '0000-00-00 00:00:00',
   change_date datetime NOT NULL default '0000-00-00 00:00:00',
   active tinyint(4) NOT NULL default '1',
   PRIMARY KEY (domain)
 ) TYPE=MyISAM COMMENT='Virtual Domains–mysql_virtual_domains_maps';

Postfix is using the „domain“ and „description“ column.
Courier is not using this table.


Create the Mailbox Table

 #
 # Table structure for table mailbox
 #
 USE postfix;
 CREATE TABLE mailbox (
   username varchar(255) NOT NULL default '',
   password varchar(255) NOT NULL default '',
   name varchar(255) NOT NULL default '',
   maildir varchar(255) NOT NULL default '',
   domain varchar(255) NOT NULL default '',
   create_date datetime NOT NULL default '0000-00-00 00:00:00',
   change_date datetime NOT NULL default '0000-00-00 00:00:00',
   active tinyint(4) NOT NULL default '1',
   PRIMARY KEY (username)
 ) TYPE=MyISAM COMMENT='Virtual Mailboxes–mysql_virtual_mailbox_maps';

Postfix: is using the „username“ and „maildir“ column.
Courier: is using the „username, „password“, „name“ and „maildir“ column.


Populate the Tables

 USE postfix;
 INSERT INTO domain (domain,description) VALUES ('domain.tld','Test Domain');
 INSERT INTO alias (address,goto) VALUES ('alias@domain.tld','user@domain.tld');
 INSERT INTO mailbox (username,password,name,maildir) VALUES
 ('user@domain.tld','$1$DOrHOomo$U6MleaFKGwWLB3iS9P1Yx0','Mailbox
 User','user@domain.tld/');

The first INSERT is to let Postfix know that this domain is a virtual
domainand should be handled by Postfix. It’s also possible to have everything in
one table but probably this way it’s nicer.
The second INSERT is a virtual alias pointing to the third INSERT.
The third INSERT is the actual virtual mailbox, as you can see here
it’s used MD5 password for backward compatibility with local defined mail
accounts. If you are using MD5 passwords, make sure you don’t use the builtin
MySQL routine to generate MD5 passwords. This is not compatible with
Courier-IMAP. If you want you can also use cleartext or encrypted passwords.
To make sure that the new MySQL users are working, do the following
from the command line:

 $ mysqladmin reload


Postfix Install

You have to create a directory to have all your virtual users mail dropped in,
this directory needs to be owned by Postfix.


Postfix Setup


main.cf

The below example is the part that goes into your main.cf file of Postfix. The
path to the mysql files might be different on your setup. The same might be for
uid_maps, gid_maps and minimum_uid values. These
values should be the ones from the postfix user and group. You can find these
in your /etc/passwd file.

 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
 virtual_gid_maps = static:12345
 virtual_mailbox_base = /virtual
 virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
 virtual_mailbox_limit = 51200000
 virtual_minimum_uid = 12345
 virtual_transport = virtual
 virtual_uid_maps = static:12345
 $ mkdir /virtual
 $ chown -R postfix:postfix /virtual
 $ chmod -R 751 /virtual


mysql_virtual_alias_maps.cf

You will need to put this into a text file for postfix to pickup.

 user = postfix
 password = postfix123
 hosts = localhost
 dbname = postfix
 table = alias
 select_field = goto
 where_field = address


mysql_virtual_domains_maps.cf

You will need to put this into a text file for postfix to pickup.

 user = postfix
 password = postfix123
 hosts = localhost
 dbname = postfix
 table = domain
 select_field = description
 where_field = domain


mysql_virtual_mailbox_maps.cf

You will need to put this into a text file for postfix to pickup.

 user = postfix
 password = postfix123
 hosts = localhost
 dbname = postfix
 table = mailbox
 select_field = maildir
 where_field = username


Postfix Admin

Here you can find information on the excellent tool PostfixAdmin that Mischa
Peters has written in PHP. It’s in production at least 2 sites that he maintains,
and at a couple of sites tham I’m administering. If you want to install this
make sure that you have a running webserver that handles PHP correctly and is
able to handle .htaccess fiels. Here you wont find any instrucions on your
webserver/PHP install.
Postfix Admin is a way to give virtual domain owners total control over
their domains.


Postfix Admin Download

You can get PostfixAdmin here:
http://high5.net/postfixadmin/


Postfix Admin Install

Unpack Postfix Admin in the directory where you want it. For example:
/var/www/html/<site>/pfadmin. There is also an Admin Admin part, change
directory to the „admin“ directory and sue some authentication or other
means for controlling access to this dir.
Some other information that you might want to look at is in the
site_lib.php file.
In order to be able to read and write from the database I have created a
seperate user in MySQL. I do this because Postfix Admin needs to have
more rights on the Postfix database. If you are worried about the
password for the database. I have Postfix Admin running as the
WebServer owner

:group, that way your postfix username and password are
somewhat protected against local users.

 USE mysql
 INSERT INTO user (Host, User, Password) VALUES
 ('localhost','postfixadmin',password('postfixadmin123'));INSERT INTO db (Host,
 Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES
 ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');

Make sure you reload MySQL.

 $ mysqladmin reload


Postfix Admin Setup

In order to use Postfix Admin you have to add another table to the
Postfix database.

 #
 # Table structure for table admin
 #
 USE postfix;
 CREATE TABLE admin (
   username varchar(255) NOT NULL default '',
   password varchar(255) NOT NULL default '',
   domain varchar(255) NOT NULL default '',
   create_date datetime NOT NULL default '0000-00-00 00:00:00',
   change_date datetime NOT NULL default '0000-00-00 00:00:00',
   active tinyint(4) NOT NULL default '1',
   PRIMARY KEY (username)
 ) TYPE=MyISAM COMMENT='Virtual Admins–Store Virtual Domain Admins';


Postfix Admin Usage

Once you have done all this you can take your browser and browse to the
location where you have Postfix Admin installed. Goto the admin part first in
order to put some real domains that you host in the database. This will be
http://your.domain.tld/postfixadmin/admin. The default login is admin
/ admin.


Cyrus SASL2 install and config

For user authentication one can choose between several methods, of which SASL
is probably the best regarding security. From users’ perspective, though,
pop-before-smtp is easier to work with.


SASL2

http://asg.web.cmu.edu/cyrus/download/
There are two ways for using SASL2 authentication – one is through PAM, which is
fairly easy to setup, though probably not so scalable, and the other is
directly through auxprop.

 ./configure  --with-bdb-libdir=/usr/local/BerkeleyDB.4.1/lib \
 --with-bdb-incdir=/usr/local/BerkeleyDB.4.1/include --with-openssl \
 --enable-login --with-ldap --with-mysqlmake


SASL2 auth through PAM/MySQL

http://pam-mysql.sourceforge.net/

 /etc/pam.d/smtp
 auth required pam_mysql.so user=postfix passwd=postfix123 db=postfix
 table=mailbox usercolumn=username passwdcolumn=password crypt=1
 account required pam_mysql.so user=postfix passwd=postfix123 db=postfix
 table=mailbox usercolumn=username passwdcolumn=password crypt=1

You HAVE to use the full email address as username, or else auth will fail. In
the given setup, though, you can use the name itself by selecting
usercolumn=name.
NB: This works, but is NOT fully tested.


SASL2 through auxprop

In /usr/local/lib/sasl2/smtpd.conf:

 mech_list: plain login
 pwcheck_method: auxprop
 auxprop_plugin: mysql
 mysql_user: postfix
 mysql_passwd: postfix123
 mysql_hostnames: junip3r.mnet.bg
 mysql_database: postfix
 mysql_statement: "SELECT %p FROM mailbox WHERE username = '%u' and domain =
 '%r'"#mysql_verbose: yes

Note that in main.cf of postfix’s configuration we are setting
„smtpd_sasl_local_domain = <NULL>“, i.e. empty value. For this reason we have
to select on ‘name’ and not on ‘username’.
NB: If you change any of the mechs or the contents of smtpd.conf, make sure to
do a ‘postfix reload’, because there’s some kind of caching, obviously.
Finally: NOT WORKING! Auxprop doesnt want to send the correct realm,
i.e. domain. Have to investigate further.


POP-before-SMTP

Here you can use ONE OF:


POP before SMTP

The setup of POP-before-SMTP is fairly
easy, compared at least with the other software described here. Following the instructions on the web page I was able to set it up in a matter of 2 minutes. You just have to uncoment the line:

 $file_tail{'name'} = '/var/log/maillog';

and add this line, in order our setup to work with courier 2.0.0:

 $pat = '^(... .. ..:..:..) \S+ (?:imapd-ssl|pop3d-ssl|imapd|pop3d):
 LOGIN, user=\S+, ip=\[\:\:ffff\:(\d+\.\d+\.\d+\.\d+)\].*';

then you can change the grace period if you like. Default is 30 minutes, which
is fairly long, IMHO.

 $grace = 30*60;


DRAC

http://mail.cc.umanitoba.ca/drac/


WHOSON

http://whoson.sourceforge.net/
As a matter of simplicity probably popbsmtp is the best, since it is a
single daemonized perl script watching the mail logs, and DRAC needs
that the POP daemon used has to be recompiled. DRAC and WHOSON are not
tested in this setup.


Courier-IMAP install and config

Do a

 tar jxf courier-imap-2.0.0.tar.bz2 -C /home/nikky/src
 ./configure --sysconfdir=/etc/courier
 will do the job. Then
 $ make && make check
 $ su root
 # make install


authmysqlrc

NOTE: Make sure that there are no (trailing) spaces in this file, only
tabs!!
Below is part of the authmysqlrc file that is relevant to our setup.
The things that you might need to change are the mysql_password,
mysql_uid and mysql_gid.

 MYSQL_CRYPT_PWFIELD		password
 MYSQL_DATABASE			postfix
 MYSQL_OPT			0
 MYSQL_SERVER			junip3r.mnet.bg
 MYSQL_USERNAME			postfix
 MYSQL_USER_TABLE		mailbox
 MYSQL_PASSWORD			postfix123
 MYSQL_UID_FIELD			'12345'
 MYSQL_GID_FIELD			'12345'
 MYSQL_HOME_FIELD		'/virtual'
 MYSQL_LOGIN_FIELD		username
 MYSQL_MAILDIR_FIELD		maildir
 MYSQL_NAME_FIELD		name

Read the hints if you have trouble logging in:
Make sure that there are NO spaces in the authmysqlrc file, only tabs. Make
sure that there are only single quotes ‘ around static values like
'/virtual', 'UID', 'GID'. NO single quotes around
localhost! Make sure that localhost exists in your /etc/hosts file.
Including IPv6 during the compilation could cause a problem. The
MYSQL_GID_FIELD and MYSQL_UID_FIELD are for the
UIDand GID of the postfix user and group, NOT for the MySQL
user andgroup.


Amavisd/Spamassassin/F-Prot install and config

amavisd-new is a high-performance interface between message transfer agent
(MTA) and one or more content checkers: virus scanners, and/or SpamAssasin.
http://www.ijs.si/software/amavisd/
Specific information on installing Amavisd-new on Redhat can be found
here:
http://www.rmorales.com.ar/rpms/amavis/

 perl -MCPAN -e shell is your friend!

In this example we are using the home version of F-Prot, which is a
non-daemonised command line virus scanner, used for checking files and
triggering the necessary alerts. You can download it from here: http://www.f-prot.com/download/download_fplinux_personal.html
The installation of the three flavours (RPM,DEB and TGZ) is fairly
straight-forward and does not need any instructions.


Links

http://small.dropbear.id.au/myscripts/postfixmysql.html

Инсталация на wccp2 и squid

Този документ е публикуван с надеждата, че ще бъде полезен някому, но
без НИКАКВА ГАРАНЦИЯ, ВКЛЮЧИТЕЛНО И БЕЗ ГАРАНЦИИТЕ ПО ПОДРАЗБИРАНЕ! С други
думи, ако след прилагането на инструкциите, посочени тук, вашето Cisco 12xxx
или Juniper t640 вземе, че подскочи и се тръшне примряло на една страна, аз
не нося никаква отговорност! Толкоз.

    1. Linux ядро 2.4.х, изпитано с 2.4.20 -
      href=“http://www.kernel.org“>www.kernel.org
    2. Кръпка за ядрото, който осигурява необходимата модификация на
      наличния GRE код. Може да се свали от тук -
      href=“http://squid.visolve.com/developments/ip_wccp-2_4_18.patch“>

      http://squid.visolve.com/developments/ip_wccp-2_4_18.patch

    3. Squid Cache server 2.5, изпитано със Squid 2.5STABLE1 -
      href=“http://www.squid-cache.org/Versions/v2/2.5/“>http://www.squid-cache.org/Versions/v2/2.5/
    4. Кръпка за squid 2.5, допълващ поддръжка за wccp версия 2. Можете да
      я свалите от тук:

      http://squid.visolve.com/developments/wccpv2.patch

    5. Естествено, за цялата тази работа ви е необходим и специфичен хардуер -
      рутер Cisco, за предпочитане модел 7xxx
      ;)
    1. Първо разархивирайте изходния код на ядрото:
    2.  tar jxf linux-2.4.20.tar.bz2 -C /usr/src
       ln -s /usr/src/linux-2.4.20 /usr/src/linux

      Приложете patch за ядрото, като първо проверите дали няма да има
      несъвместимости:

       cd /usr/src/linux
       patch --dry-run -p0 < ../ip_wccp-2_4_18.patch

      Ако програмата patch не се оплаче от несъвместимости (т.е. пропуснати
      редове и т.н.), можете да приложите кръпката окончателно:

      patch -p0 < ../ip_wccp-2_4_18.patch

      След това настройте ядрото по обичайния начин:

      make {menu|x}config

      В раздела Networking options изберете поддръжка на wccp в ядрото, но
      задължително като модул.

          IP: WCCP GRE tunnels over IP
       

      След това компилирайте:

       make dep bzImage modules modules_install
       cp arch/i386/boot/bzImage /boot/vmlinux-2.4.20-wccp

      Редактирайте /etc/lilo.conf и добавете съответния ред като опция за
      избор при стартиране.

      След това не забравяйте да изпълните lilo -v. После рестартирайте
      системата и заредете модула ip_wccp при следващото стартиране.

    3. Компилиране на Squid 2.5STABLE1
    4.  cd /usr/src/
       tar jxf squid-2.5.STABLE1.tar.bz2
       cd squid-2.5.STABLE1

      Прилагане на кръпката:

      patch --dry-run -p0 < ../wccpv2.patch

      Ако мине безпроблемно:

       patch --dry-run -p0 < ../wccpv2.patch
       ./configure --enable-wccpv2
       make && make install
    5. Конфигуриране на squid за работа с wccp2
    6. Във файла squid.conf, който по подразбиране се намира в
      /usr/local/squid/etc, укажете ip адреса на рутера cisco, както
      и версията, по която се работи.

       wccp2_router 192.168.1.1
       wccp2_version 4

      Това никъде не е много ясно обяснено, но на едно-две места се твърди,
      че при версия на IOS-а по-малка от 11.2 е необходимо да се използва
      wccp_version 3. Може би това е някаква вътрешна номерация на версиите на
      протокола? Не съм съвсем наясно.

    7. Прозрачно пренасочване на заявките за порт 80 към порт 3128(8080)
    8. С iptables това става много лесно:

       iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128

      С ipchains може да се получи същия ефект:

       ipchains -A forward -p tcp --dport 80 -j REDIRECT 3128
    9. Пускане на ip forwarding.
    10. Това е задължително! Може да ви е смешно, но на мен ми трябваха 2 дни,
      докато открия, че цялата постановка не работи само заради тоя мизерен
      пропуск.

      echo "1" > /proc/sys/net/ipv4/ip_forward
    11. Настройка на цискнята (здрасти, щинков! :)
    12.  enable
       # conf t

      Изберете си wccp версия 2:

      (config)#ip wccp version 2

      Изберете си access list, по който да съвпадате адреси. Разширените
      access листи дават повече гъвкавост, но пък стандартните са
      по-простички:

      (config)#ip wccp web-cache redirect-list 99

      Въведете самата access листа:

      (config)#access-list 99 permit 192.168.2.0 0.0.0.255

      Това е достатъчно, тъй като накрая има имплицитна забрана. С две думи ще
      уцелите пакетите с източник 192.168.2.0/24, а всичко останало ще минава
      необезпокоявано.

      Остава ви да изберете интерфейса, на който ще става пренасочването към
      linux машината със squid. Това може да стане както на интерфейса, през
      който клиентските заявки влизат в cisco-то, така и на изходящия, от
      който потеглят в Нета.

       (config)#interface fastEthernet 0/1
       (config-if)#ip wccp web-cache redirect in
       (config-if)#^Z

      След като проверите дали всичко работи както трябва, можете да запишете
      конфигурацията.

  1. Въведение
  2. Този документ описва (накратко) как да инсталирате и конфигурирате
    кеширащ сървър Squid, променен така, че да поддържа протокола на Cisco
    Systems wccp, версия 2, както и необходимите настройки на рутер Cisco.
    Предимствата на версия 2 са няколко – може да се използва повече от
    един контролен маршрутизатор, а също е възможно пренасочването и
    проксифицирането на други протоколи, различни от http. За повече информация
    погледнете тук:

    http://www.cisco.com/univercd/cc/td/doc/product/software/ios121/121cgcr/fun_c/fcprt3/fcd305.htm

  3. Необходими предварителни условия
  4. За да получите накрая кеширащ сървър, който разбира от wccp2 и умее
    прозрачно да пренасочва www трафик (а също и друг според
    документацията, която може да бъде намерена на www.cisco.com), ви е
    необходим следния софтуер:

  5. Инсталация и конфигуриране

И накрая един съвет: tcpdump е ваш приятел! :)

Пишете ми, ако намерите грешки и/или несъответствия в този текст.