Просьба оставить комментарий





Если вам понравился или не понравился топик. Я что то забыл или не дописал, то вы можете оставить свой комментарий и я постараюсь исправить это в ближайшее время.

понедельник, 23 января 2012 г.

Небольшая коллекция pdlm файлов для Cisco

При знакомстве с технологией nbar столкнулся с проблемой, что не весь трафик распознавался и в топе большое количество трафа маркировалось как "Неизвестный". После небольшого гугления по зарубежным сайтам наткнулся на рецепт как распознавать часть этого неизвестного трафика.

Во-первых нужно найти специальные файлы которые содержать "инструкцию" для распознавания. Эти фалы имеют расширение pdlm. Cisco эти файлы хранить во флеш памяти. Во-вторых не всегда там присутствуют, то есть при их отсутствии их надо закачать. Способ только один нашел через tftp сервер. Так как этот сервер у меня уже настроен для бэкапов конфигов особого труда их туда не составило добавить. Делается это аналогично копированию конфига.

copy tftp: flash:

Далее надо объяснить, что надо их скушать приблизительно так:

ip nbar pdlm flash:bittorrent.pdlm
ip nbar pdlm flash:eDonkey.pdlm
ip nbar pdlm flash:directconnect.pdlm

Далее надо написать полисимап:

class-map match-any torrents
match protocol bittorrent
match protocol edonkey
match protocol directconnect
match protocol kazaa2

policy-map drop-protocols
class torrents
drop

Все теперь нужно только указать в настройках интерфейса
interface f0/0
service-policy input drop-protocols

В архиве к этому посту лежат несколько полезных pdlm, но стоит аккуратнее применять их так как может резаться не только озвученные протоколы, но и узкоспециализированные не являющиеся теми которые перечислены. Например спецпротоколы госучреждений. Есть негативный опыт после которого пришлось от этой технологии отказаться.

Так же хоть в архиве и лежит скайп, но он наверняка не будет распознаваться, собственно как и шифрованный торрент трафик.

+ По советам в интернет лучше использовать не полный отброс этих пакетов, а сильное занижение скорости для их передачи.

Еще один минус подобной технологии, что траф все равно будет забивать канал на входе на маршрутизатор. То есть до применения policy-map


Ссылка на файлы pdlm.zip.html

Обновление php до версии 5.4

Эту операцию можно произвести как на собственноручно собранном сервере, так и произвести Upgrade любого готового вэбсервера(например XAMPP).

Для начала необходимо произвести полное резервное копирование сервера. Так как никто не гарантирует стабильной работы еще не отлаженного PHP 5.4.

Затем производим следующие действия:


0. Останавливаем сервер.
1. Скачиваем последнюю версию php (убедитесь что вы скачиваете .zip пакет, а не msi)
2. Разархивируйте его во временную директорию.
3. Скопируйте контент из директории в подпапку вашего вэбсервера с php и перезапишите существующие файлы предыдущей версии.
4. Перезапишите файлы из категории apache\bin на новые.
5. В случае использования xampp нужно переименовать файлы (например php5apache2_2.dll или php5apache2_2_filter.dll) в файлы без дополнения "_2"(т.е. php5apache2.dll или php5apache2_filter.dll). Это нужно из-за особенности работы этой сборки.
6. Ну и само собой запуск сервера.

Скачать php 5.4 для Windows можно здесь: http://windows.php.net/qa/

Плюшки новой версии и тест некоторых из них, будет описанно в отдельном топике.

пятница, 20 января 2012 г.

Пример перераспределения нагрузки между маршрутизаторами в сети Часть 1

На работе возникла задача перераспределить нагрузку между двумя маршрутизаторами. Схема использованная на моем предприятии выглядит так:
Так как схема собиралась в Packet Tracer использовал доступные маршрутизаторы, так как их достаточно для описания сути проблемы. На самом деле в качестве пограничного маршрутизатора используется Cisco 7000 серии, а вместо gengateway Cisco 3640.

Проблема начала возникать сразу после НГ, народ подтянулся на работу и начал качать торренты, тем самым в середине дня начиная заваливать маршрутизатор Gengateway. В этой сети Gengateway занимается разруливанием внутреннего трафика и связи с внешним миром через пограничный маршрутизатор. Так как всех обзванивать и просить понизить скорость скачки очень тяжело да и в принципе не возможно, приходилось искать решения для ограничения или перераспределения нагрузки.

Первым делом попытался использовать технологию nbar. На пограничном маршрутизаторе настроил маркеровку трафика и поставил фильтр на "мусорный" трафик. Это привело к тому, что некоторые клиенты начали жаловаться на глюки их спецпрограмм, которые общались по своим закрытым протоколам. Пришлось отключать эти фильтры хотя некоторое облегчение они приносили.

Изучив графики загрузки CPU на этих пограничных маршрутизаторах было заметно, что при загрузке gengateway на 90-100 процентов пограничник был загружен всего на 40. Прикинув что пограничный маршрутер имеет более мощный процессор и объем ОЗУ решил попробовать перебросить часть разруливания внутреннего трафика на него.

На gengateway настроено большое количество подинтерфейсов и он занимается разруливанием трафика между ними и пограничным маршрутизатором. Поэтому я решил взять взять самый нагруженный vlan и перенести его на пограничный и посмотреть на результат нагрузки после этого.

Для проведения это операции нужно выполнить следующие условия:
1. Прописать vlan в транк между genswitch и пограничным маршрутизатором.
2. Настроить подинтервейс на пограничном с настройками подобными подинтерфейсу gengateway.
3. Поднять этот подинтерфейс. Делать это можно без опаски в сбое так как пока таблица мак адресов на genswitch не очищена пакеты будут маршрутизироваться на gengateway.
4. И собственно последняя операция это опустить подинтерфейс на gengateway командой  shutdown и очистить таблицу мак адресов командой clear mac-address-table. В моем случае было быстрее перезагрузить.

Итог проведения этой операции: Нагрузка в самый загруженный период времени снизилась до 75 процентов. Что уже не плохо, но пока и не особо хорошо. На пограничном особого повышения я не заметил пока.

В части 2 попробую описать произведенные операции в пошаговом режиме.

четверг, 19 января 2012 г.

5.1.3. Bad address syntax в почтовом клиенте Thunderbird

Столкнулся с проблемой у пользователя с почтовым ящиком вида n.surname@domain.name.ru. При отправке сообщения выдавал ошибку 5.1.3. Bad address syntax. У пользователя выяснил, что на этот адрес уже происходили отправка и получения писем. При отправке тестового письма на свой гмайл, письмо уходило без проблем.

После гугления выяснил, что это стандартная ошибка возвращаемая сервером для любого почтового клиента, по нету проблемы возникали на клиента outlook и thebat. Единственный вариант, что рыться надо в логах postfix сервера. По дате апдейта последний был mail.info стандартный лог файл сервера postfix через простую регулярку по имени пользователя почтового ящика more mail.info | grep "username" >> mail.info.err обнаружил подобную запись:

username@domain.name.??? u.

По логике единственный вариант, что в имени почтового ящика есть не распознаваемый символ и действительно ошибка было в написании tld вместо латинской "r" стояла "г" кириллицей.

пятница, 13 января 2012 г.

Access-list в Cisco ч.1

Рассмотрим простую конфигурацию из маршрутизатора и 2 компьютеров в разных подсетях.
Для того чтобы компы друг друга увидели надо настроить маршрутизацию:
Router>
Router>en
Router#conf t
Router(config)#route
Router(config)#router rip
Router(config-router)#version 2
Router(config-router)#redistribute connected

Все теперь они друг друга видят. Теперь можно переходить к основной теме топика к Списком доступа(Access-list).

Списки доступа бывают простые и расширенные(extended). Отличие extended от простых в возможности их именования латинскими буквами и можно указать конкретный протокол в виде www вместо указания порта 80 и фильтровать отдельные виды пакетов. Т.е. можно написать список доступа об открытии или закрытии порта 80 или www для одного или сети компьютеров.

В фаерах Cisco Asa и Pix используется подобный принцип, как собственно и в iptables линукса.

Так же есть интересная особенность списки можно применять на входящий и исходящий трафик с портов. Т.е. на рисунке есть 2 порта к которым подключены 2 компа.

Если например применить список доступа к интерфейсу f0/1 исходящий трафик и фильтровать icmp пакеты отправляемые с 1 компьютера, то они будут доходить до маршрутизатора, проходить через него и фильтроваться на выходе ко второму компьютеру.

Если применить список доступа на исходящий с интерфейса f0/0, то icmp пакет будет доходить до 2 компьютера, 2ой компьютер будет отправлять icmp ответ 1ому, но будет резаться на f0/0.

Пример:
Если создать акцесс лист с таким содержимым
Router(config)#access-list 100 deny icmp any any

и применить его на вход интерфейса f0/1
Router(config-if)#ip access-group 100 in

, то пинг от 1-ого компьютера будет доходить до 2-ого, но обратно пакет зарежется на входе f0/1 и в результате ответ не дойдет до пингующего компа.

Если же его применить на f0/1 так же на вход, то до 2-ого компа он вообще не дойдет и зарежется на интерфейсе маршрутизатора.

Можно рассмотреть более интересный вариант - создать список доступа и фильтровать TCP пакеты по определенным портам

access-list 101 deny tcp any host 192.168.1.1 eq 5500

Здесь указано что будет зарезаться пакеты типа TCP с любого адреса предназначенные хосту  192.168.1.1 с номером порта 5500. eq - вроде как эквивалентно либо можно указать рейндж портов с помощью команды  range

четверг, 12 января 2012 г.

Шпаргалка. Что нужно сделать для оптимизации и защите своего сервера linux

1. Настройка iptables Необходимо открыть только те порты которые необходимы и в случае с менеджментом, т.е. ssh или telnet лучше использовать не стандартные порты.
2. Поставить fail2ban для блокирование доступа для брутфорсеров различных.
3. Если пользуетесь phpMyAdmin, то переименуйте папку в какое нибудь например phpMyyAdmin или какое нибудь свое главное чтобы не стандартное. Чтобы злостные хакеры не ломились. Так же не стоит переименовывать папку в pma, так как перебором тоже легко вычисляется и есть в стандартном наборе сканеров уязвимостей.
4. Не храните сервисные скрипты на сервере. Лучше при выполнении каких либо операций с БД закачивать скрипты с локальной машины и после выполнения необходимых действий их удалять.
5. Настройте файлы .htaccess так чтобы закрыть доступ к файлам содержащие пароли к базе дынных.
6. Генерируйте для разных модулей сервера разные пароли. Не стоит использовать один пароль на доступ к серверу и базе данных. Для разных сайтов также создавать отдельные пароли и пользователей в базе.
7. Для закачки файлов и данных использовать ssh. Для Windows есть много программ такие как WinSCP и плагин для Total Commander.
8. Настроить memcached для быстрого исполнения часто используемого кода
9. Отказаться от использования расширения .inc в файлах конфигов, т.к. если вдруг вы забудете их закрыть в .htaccess , то они могут быть просмотрены удаленно через браузер.


Постепенно буду дополнять топик

суббота, 7 января 2012 г.

Плюсы и минусы Rapida в связке с Adsense

Поделюсь своим опытом с платежной системой Rapida и вывода платежей Adsense.

(+)Пришло время получения первого платежа от Гугла, интересовался способами вывода задолго до первого платежа и с радостью обнаружил, что уже довольно давно получить кровно заработанные можно через платежную систему Рапида, моментально зарегистрировавшись пошел в аккаунт Адсенс и привязал его своему счету в Рапиде. По поводу переводов, начислений и получения наличных денежных средств особо не парился(как оказалось зря).

(-)По времени  вышло, что платеж должен был быть произведен прямо перед самым новым годом. И за неделю начал мониторить счет в рапиде на появления небольшой суммы в рублях и надеялся на быстрое их получение на почте прямо перед самым новым годом и отпраздновать это событие соком. Но каждый день видел только значение в нулях. За 2 дня до НГ начал обзванивать поддержку и закидывать их письмами на почтовый адрес указанные на их сайте, но ответов не поступало, видать народ рано расслабился перед праздниками.

(-)Решил забить до окончания праздников. В первых числах после просмотра статистики по заработанным ден. знакам. Решил еще раз промониторить аккаунт и в поддержке обнаружил, что для верификации счета и получения заработанных на счет нужно отправить скан паспорта, что сразу же и сделал. Подтверждения скана провели очень быстро, прошло всего 2-3 часа. Как оказалось без подтверждения этих данных рапида высылает деньги в обход счета напрямую на почту, причем без уведомления, что и подтвердили мне сонные работники рапиды 3 января. Сходил на почту и узнал, что деньги оказывается поступили аж 29 декабря. И лежат в ожидании получения.

(+)После подтверждения паспортных данных открывается возможность создания шаблонов платежей. Т.е. можно в автоматическом режиме получать деньги на основные платежные системы интернета РБК, ЯД, Вебмани и многие другие. Либо если удобно создать шаблон на вывод на почту и в этот раз уже можно выбрать режим с уведомлением о поступлении ден. знаков. Так же есть много других шаблонов для оплаты коммунальных услуг, штрафов и тд.

(+)Ограничения на наличие денег на счету для меня пока достаточно комфортно, максимально 150000, т.е. в 10 раз больше, чем в большинстве платежных систем, которых обидели новым законом.

(-)Ну и последний минус, это отсутствие юзабилити в интерфейсе, очень не удобный и слабый интерфейс личного кабинета.

Большое количество минусов играет не в пользу Рапида, но так как деваться собственно некуда, то пока не будет альтернативных простых способов получения заработанных денег, придется продолжать ей пользоваться.

Волновой алгоритм поиска пути на PHP

На учебе по методам оптимизации дали список тем для курсача, я выбрал волновой алгоритм поиска пути.

Собственно сам код с комментариям:

<?php
$map[50][50];

echo "<h2>Start</h2>";
echo "<table>";
for($u1=1; $u1<=50; $u1++)
{
    echo "<tr>";
    for($u2=1; $u2<=50; $u2++)
    {
    $val = round(rand(0,10));
    if($val<2)
    {
    $map[$u1][$u2] = 1;
    echo "<td style=\"width:10px; height: 10px; background-color: #0f0\"></td>";
    }
    else
    {
    $map[$u1][$u2] = 0;
    echo "<td style=\"width:10px; height: 10px; background-color: #f00\"></td>";
    }
    }
    echo "</tr>";
}
echo "<table>";

function SearchWay($x, $y, $x_to, $y_to, $map)
{
    $size =50;
    $matrix[$size][$size][3];

    $step;
    $added=true;
    $result=true;

    for($i=0;$i<$size;$i++)
    {
        for($j=0;$j<$size;$j++)
        {
            if($map[$i][$j]!=0)
            {
                $matrix[$i][$j][0] = -2;// занято
            }
            else
            {
                $matrix[$i][$j][0] = -1;// Мы еще нигде не были
            }
        }
    }
    $matrix[$x_to][$y_to][0]= 0;// До финиша ноль шагов - от него будем разбегаться
    $step = 0; // Изначально мы сделали ноль шагов
   
    // Пока вершины добаляются и мы не дошли до старта

    while($added && $matrix[$x][$y][0]==-1)
    {
        $added = false;// Пока что ничего не добавили
        $step++;// Увеличиваем число шагов

        for($i=0;$i<$size;$i++)// Пробегаем по всей карте
        {
            for($j=0;$j<$size;$j++)
            {
                // Если (i, j) была добавлена на предыдущем шаге
                // Пробегаем по всем четырем сторонам
                if($matrix[$i][$j][0]== $step-1)
                {
                    $i2;
                    $j2;

                    $i2=$i+1;$j2=$j;
                    // Если не вышли за пределы карты -  обрабатываем
                    if($i2>=0 && $j2>=0 && $i2<$size && $j2<$size)
                    {
                        // Если ($i2, $j2) уже добавлено или непроходимо, то не обрабатываем
                         if($matrix[$i2][$j2][0]==-1 && $matrix[$i2][$j2][0]!=-2)
                         {
                             $matrix[$i2][$j2][0]= $step; // Добав-
                             $matrix[$i2][$j2][1]= $i; // ля-
                             $matrix[$i2][$j2][2]= $j; // ем
                             $added = true; // Что-то добавили
                         }
                    }
                    $i2=$i-1;$j2=$j;
                    // Если не вышли за пределы карты -  обрабатываем
                    if($i2>=0 && $j2>=0 && $i2<$size && $j2<$size)
                    {
                        // Если ($i2, $j2) уже добавлено или непроходимо, то не обрабатываем
                        if($matrix[$i2][$j2][0]==-1 && $matrix[$i2][$j2][0]!=-2)
                        {
                            $matrix[$i2][$j2][0]= $step; // Добав-
                            $matrix[$i2][$j2][1]= $i; // ля-
                            $matrix[$i2][$j2][2]= $j; // ем
                            $added = true; // Что-то добавили
                        }
                    }
                    $i2=$i;$j2=$j+1;
                    // Если не вышли за пределы карты -  обрабатываем
                    if($i2>=0 && $j2>=0 && $i2<$size && $j2<$size)
                    {
                        // Если ($i2, $j2) уже добавлено или непроходимо, то не обрабатываем
                        if($matrix[$i2][$j2][0]==-1 && $matrix[$i2][$j2][0]!=-2)
                        {
                            $matrix[$i2][$j2][0]= $step; // Добав-
                            $matrix[$i2][$j2][1]= $i; // ля-
                            $matrix[$i2][$j2][2]= $j; // ем
                            $added = true; // Что-то добавили
                        }
                    }
                    $i2=$i;$j2=$j-1;
                    // Если не вышли за пределы карты -  обрабатываем
                    if($i2>=0 && $j2>=0 && $i2<$size && $j2<$size)
                    {
                        // Если ($i2, $j2) уже добавлено или непроходимо, то не обрабатываем
                        if($matrix[$i2][$j2][0]==-1 && $matrix[$i2][$j2][0]!=-2)
                        {
                            $matrix[$i2][$j2][0]= $step; // Добав-
                            $matrix[$i2][$j2][1]= $i; // ля-
                            $matrix[$i2][$j2][2]= $j; // ем
                            $added = true; // Что-то добавили
                        }
                    }
                }
            }
        }
    }

    if($matrix[$x][$y][0]== -1)
    {
        $result = false; // то пути не существует
    }


    if($result)
    {
        $i2=$x;
        $j2=$y;

        while($matrix[$i2][$j2][0]!=0)
        {   

            $li = $matrix[$i2][$j2][1];
            $lj = $matrix[$i2][$j2][2];
            $i2=$li;
            $j2=$lj;
            $map[$i2][$j2] = 7;
        }
    }
    return $map;
}

$st_x = 10;
$st_y = 10;

$en_x = 40;
$en_y = 30;

//Обнуляем в изначальной карте начальные и конечные координаты
$map[$st_x][$st_y] = 0;
$map[$en_x][$en_y] = 0;

$map2 = SearchWay(10, 10, 40, 30, $map);

echo "<h2>Result</h2><br/><br/>";

echo "<table>";
for($u1=1; $u1<=50; $u1++)
{
    echo "<tr>";
    for($u2=1; $u2<=50; $u2++)
    {

    //echo $map2[$u1][$u2]." ";
   
    if($map2[$u1][$u2]==1)echo "<td style=\"width:10px; height: 10px; background-color: #0f0\"></td>";
    if($map2[$u1][$u2]==0)echo "<td style=\"width:10px; height: 10px; background-color: #f00\"></td>";
    if($map2[$u1][$u2]==7)echo "<td style=\"width:10px; height: 10px; background-color: #00f\"></td>";

    }
    echo "</tr>";
}
echo "</table>";
?>


За основу взял найденный в гугле пример реализации на C++ выдрал функцию переписал под php и все заработало. Добавил только передачу массива с начальной картой в функцию SearchWay. На основе этого алгоритма вроде как основана игра UFO 1 и 2 части. Результат будет таким: