Search
Write a publication
Pull to refresh
0
Dolgov Roman @rdolgovread⁠-⁠only

User

Send message

Linux HA на основе Pacemaker

Reading time5 min
Views126K
В своей предыдущей статье я вкратце коснулся темы создания High Availability решения на основе демона heartbeat. Однако, как выяснилось, что-то сложнее чем 2-х узловой кластер на нем делать не так уж удобно. Изучение проблемы вывело меня на след проекта Pacemaker. Его-то мы сейчас в кратце и рассмотрим.
Читать дальше →

OpenDPI (определение типов трафика) + iptables

Reading time6 min
Views23K
OpenDPI — библиотека для классификации трафика на основе технологии глубокого анализа пакетов (DPI — Deep Packet Inspection). Проект IPP2P более не поддерживается, и, в качестве замены, предлагает использовать именно OpenDPI. В отличие от IPP2P, основной целью которого является определение именно p2p трафика, OpenDPI поддерживает широкий набор различных протоколов. OpenDPI изначально спроектирован для очень низкого уровня ложных положительных срабатываний. В отличие от L7-filter не требует наложения патчей на iptables и ядро; работает в виде модуля ядра и библиотеки xtables. Также определения протоколов представляют собой не список регэкспов, а модули на C, что повышает быстродействие. Недавно для этой библиотеки была реализована поддержка iptables.
А теперь давайте попробуем использовать OpenDPI на практике.
Читать дальше →

Серверный редирект на мобильную версию сайта

Reading time2 min
Views37K
image
Предлагаю вашему вниманию простое и дешевое (по ресурсам) решение для перенаправления пользователей мобильных устройств на легкую версию сайта. Решение ориентировано на highload сайты, оптимизация которых основана на кешировании гостевых запросов.
Проверка, является ли клиент мобильным устройством, производится веб-сервером nginx и в случае успеха клиент перенаправляется на поддомен или локейшн. Это существенно экономит ресурсы и позволяет добиться большей масштабируемости по сравнение с PHP методами.
Читать дальше →

Отлов вирусной активности в сети с помощью Netflow

Reading time4 min
Views6.9K
В этом топике расскажу как можно в пару скриптов наладить простой сбор статистики по аномальной активности в сети.

Аномальным для нас будет на момент снятия статистики:

1. Более 20 исходящих коннектов по 25 порту с 1 IP.
2. Более 100 исходящих коннектов по 80 порту с 1 IP.
3. Более 100 исходящих коннектов по 53 порту с 1 IP.
4. Придумывайте сами, всё гибко.

Статистику будем вынимать из кэша netflow маршрутизаторов. Будет ли это Cisco или FreeBSD — не важно. О настройке netflow на FreeBSD я рассказывал в предыдущих своих статьях.
Читать дальше →

Nano: И всё-таки его придётся выучить [3]

Reading time1 min
Views44K
Заканчиваем. Предыдущие части: [1], [2]. Комбинации для запоминания: undo/redo, поиск/замена.
Скриншот Scribus с справкой по nano
В конце топика — ссылка на PDF'ку c обобщённой шпаргалкой и её исходник (на картинке скриншот редактора).

Отмена действий по-умолчанию не работает и требует запуска редактора с опцией «поддержка отмены» (да, nano по-умолчанию не поддерживает undo). Ключ командной строки -u.

nano -u sometext.

После этого начинают работать команды:

Alt-U — undo
Alt-E — redo.

Заметим, что в справке (Ctrl-G) оно появляется тоже, только если запустить nano с опцией -u.

Если nano запущен без -u, то единственной формой undo является отмена вырезанных по Ctrl-K строк обратным их вставлением — Ctrl-U.

С поиском чуть лучше.
Читать дальше →

Пишем свой драйвер под Linux

Reading time8 min
Views68K
image

Хочу признаться сразу, что я вас отчасти обманул, ибо драйвер, если верить википедии это компьютерная программа, с помощью которой другая программа (обычно операционная система) получает доступ к аппаратному обеспечению некоторого устройства. А сегодня мы создадим некую заготовку для драйвера, т.к. на самом деле ни с каким железом мы работать не будем. Эту полезную функциональность вы сможете добавить сами, если пожелаете.

То, что мы сегодня создадим, корректнее будет назвать LKM (Linux Kernel Module или загрузочный модуль ядра). Стоит сказать, что драйвер – это одна из разновидностей LKM.

Писать модуль мы будем под ядра линейки 2.6. LKM для 2.6 отличается от 2.4. Я не буду останавливаться на различиях, ибо это не входит в рамки поста.

Мы создадим символьное устройство /dev/test, которое будет обрабатываться нашим модулем. Хочу сразу оговориться, что размещать символьное устройство не обязательно в каталоге /dev, просто это является частью «древнего магического ритуала».

Читать дальше →

Nano: И всё-таки его придётся выучить [2]

Reading time2 min
Views201K
Продолжаем. Предыдущий топик (навигация по тексту): тут.

Сегодняшняя тема — работа с выделением, копирование и удаление кусков текста.

Для понимания принципов команд работы с текстом нужно сначала понять принцип выделения текста. Он осуществляется либо мышью, либо с клавиатуры. С клавиатуры выделение происходит так: сначала отмечается начало выделение: Alt-A или Ctrl-^. Далее следует навигация — и до момента выполнения действия над текстом в буффере, выделение сохраняется (обратите внимание, выделение сохраняется даже при вводе текста, в этом оно сильно отличается от выделения в gui-приложениях windows и ближе к persistent blocks в TurboC, DN и соответствующей опции Far Manager'а).

Обратите внимание, применимы все функции навигации, включая переход по номеру строки или поиск (в следующих выпусках).

Далее выделенный текст можно удалить или скопировать в буффер. Это делает комбинация Ctrl-K (или F9).

Выделенный текст можно скопировать в буффер обмена — комбинация Alt-6 (да, мы ЛЮБИМ nano).

Далее мы можем вставить текст из буффера обмена — Ctrl-U или F10. Обратите внимание — в подсказке снизу написана неправда, это не отмена удаления, это вставка.

Читать дальше →

Nano: И всё-таки его придётся выучить [1]

Reading time2 min
Views115K
            Речь идёт о текстовом редакторе nano в Linux.
Я не люблю nano и предпочитаю vim. Однако, в отсутствии vim, выбирая между vi и nano, я всё-таки предпочту nano, ибо как говорится в старой поговорке, «у vi есть два режима: бибикать и всё портить».

Кроме того, идёт активная замена vi на nano во многих дистрибутивах. Например, в новых версиях Debian и Ubuntu по-умолчанию vi устанавливается в самом куцем виде. А главное, его больше нет в busybox install/initrd этих ОС, что однозначно заставляет задуматься об изучении nano, не из любви к нему, а по необходимости.

Я понимаю, что сидеть и зубрить список комбинаций кнопок бесполезно, так что вместо этого я думаю сделать маленькие nano-уроки — по 8 комбинаций или фич за урок (я и сам их планирую изучать по мере публикации).

Nano не имеет «режима команд» как vim, и этим похож на oldschool-редакторы из консоли DOS/Windows (NC, Far Manager, DN, hiew/biew, внезапно втесавшегося в список mcedit и т.д.). Все команды отдаются нажатием комбинаций клавиш — функциональными кнопками или комбинацией Ctrl-буква, Alt-буква.

Важное отличие от 'generic editor' — это поддержка эмуляции Ctrl'а и Alt'а.

Читать дальше →

Шпаргалка: кеширование картинок, CSS и JS в NGINX

Reading time1 min
Views79K
Заметка для тех, кто не специалист в NGINX, а проблему нужно решить быстро.

Допустим, у вас на сервере стоит NGINX и вы хотите, чтобы вся статика кешировалась у клиента. В конфиге хоста NGINX пропишите это:

server {
listen 80;
server_name mysite.com;
...
# Задаем правила обработки статического контента (типов файлов можно поставить и больше)
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|js)$ {
root /path/to/document/root/; # Путь к корню вашего сайта
access_log off; # не пишем логи
expires 3d; # кешируем у клиента на 3 дня
}
}

Проверить можно в FireBug во вкладке NET: обновите страницу 2 раза и посмотрите код ответа. Если 200 ОК, то не работает. Если 304 Not Modified, то работает.

Неплохо ускоряет работу сайта.

Балансировка нагрузки с LVS

Reading time6 min
Views103K
Итак, у вас есть нагруженный сервер и вам вдруг захотелось его разгрузить. Вы поставили и залили такой же (такие же), но пользователи упорно ходят на первый. В этом случае конечно же нужно задуматься о балансировке нагрузки.

Читать дальше →

Защита от DDOS атаки случайными аргументами при помощи Nginx

Reading time1 min
Views3.4K
Я встретился с новым типом ботнета. Если старый долбил только в главную, то новый действует иначе. Он посылает множество запросов вида
GET someurl/?t1555ss5326=5326, где someurl — найденный ботом php скрипт.
Но если атакуемый сайт поддерживает ЧПУ, то такие запросы к нему должны отсутствовать в принципе. ЧПУ сейчас является стандартом де-факто, по этому можно смело отрезать такие запросы, логируя IP ботов.
Для этого очень удобен nginx, и его переменная is_args, которая имеет значение "?", если в URI идут аргументы. Базовая конструкция выглядит так:

if ($is_args = "?") {
return 403 444;
}

Очень просто и красиво, правда?
Вот как выглядит LA после включения этой защиты:
load average: 1.50, 3.09, 6.96
Текущий ботнет из ~20000 зомби, делают 5-8k одновременных запросов.

Не забываем о языковых и культурных особенностях

Reading time6 min
Views25K
Рано или поздно все сталкиваются с проблемами связанными с языковым и культурным разнообразием при написании программ. Я был сильно удивлен узнав, что часть моих знакомых, пишущих на C++, решают эти проблемы своими велосипедами. Для тех, кто еще не знает что такое std::locale я хотел бы кратко на примере показать как c ним работать и что бывает, если о нем забыть…
Читать дальше

И ещё про «домашний» Asterisk

Reading time4 min
Views19K
Прочитав этот пост, решил поделиться и своим опытом.

В данный момент решены 2 простые задачи:
  • все звонки, поступающие на PSTN номер (обычный городской), переадресовываются на мобильный телефон, который у меня всегда в кармане и, одновременно, на SIP телефон, который стоит дома
  • с SIP телефона я могу звонить как по России, так и в некоторые нужные мне страны по минимальным тарифам.

Как это сделано?
Читать дальше →

Начинающим Java программистам

Reading time2 min
Views1.2M
Программирую на Java вот уже 7 лет. Но на работе часто приходится обучать новое поколение. В связи с этим и решил сделать некоторую шпаргалку, которая, надеюсь, пригодится и для хабрчан. Если кто-то может помочь дополнить чем-то информацию из этой статьи, то пишите! Итак:

Основные ресурсы для начального обучения


  • www.javable.com — сайт со статьями и tutorial'ом по Java. Все в основном на русском.
  • www.exampledepot.com — очень полезный ресурс, где собраны краткие примеры использования классов для тех или иных пакетов
  • java.sun.com — без первоисточника не обойтись. Для любого Java программиста JavaDoc должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial'ов на все возможные темы.

Читать дальше →

Краткий обзор ядерного NAT-а в FreeBSD

Reading time5 min
Views36K
Распространенных вариантов NAT-а под FreeBSD есть довольно много. Это и natd, ipnat, pfnat, ng_nat либо как вариант «купи ASA 5550 и не выделывайся».


К сожалению, в последнее время мне попадалось очень мало хороших и главное доступных статей о ipfw nat который появился, если мне не изменяет память еще в 7.0.
Засим рассматривать под лупой сегодня будем мы именно его.

Истинным адептам pf под кат рекомендуется не заглядывать, чтобы не травмировать себя излишними знаниями.

Читать дальше →

Настройка роутинга для домашнего multihomed сервера

Reading time12 min
Views32K
Сейчас наличие нескольких подключений к интернет на одном, в том числе и домашнем сервере — не редкость. Городские локалки, ADSL, 3G модемы… Добавим к этому сети домашние локальные и внешние виртуальные (VPN), и получим ядрёную смесь интерфейсов, между которыми необходимо роутить трафик, балансировать трафик между разными каналами в интернет (когда они есть), и переключаться с нерабочих каналов на рабочие (когда они отваливаются).

Судя по постам в инете, большинство людей, столкнувшихся с этой ситуацией, очень плохо представляет себе, как это настраивается. Надо отметить, что в линухе действительно управление роутингом весьма сложное и запутанное — следствие эволюционного развития и поддержки (частичной) совместимости. Я хочу описать принципы настройки роутинга multihomed серверов на конкретном, достаточно сложном, примере: на сервере три физических сетевых интерфейса (один в домашнюю локалку и два к ADSL-модемам), два ADSL-подключения (ADSL-модемы в режиме bridge, так что pppd поднимает этот же сервер) к разным провайдерам (одно со статическим IP, второе с динамическим), плюс VPN на сервер компании — итого шесть интерфейсов.

Тема достаточно сложная, поэтому для понимания материала потребуется хотя бы минимальное понимание работы роутинга (что такое default route и gateway), файрвола (маркировка пакетов, отслеживание соединений, связь между разными таблицами и цепочками файрвола и роутингом), pppd (скрипты ip-up/ip-down) и протоколов IP и TCP.
Читать дальше →

Уязвимость связки PHP+nginx с кривым конфигом

Reading time1 min
Views61K

Summary


Announced: 2010-05-20
Credits: 80sec
Affects: сайты на ngnix+php с возможностью загрузки файлов в директории с fastcgi_pass




Background


Зачастую How-To по настройке связки nginx с php-fpm / php-cgi есть подобные строчки:

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    include fastcgi_params;
}

Читать дальше →

Правило чтения по спирали

Reading time6 min
Views15K
Техника, известная как «Чтение по спирали/по часовой стрелке» (“Clockwise/Spiral Rule”) позволяет любому программисту разобрать любое объявление языка Си.

Следуйте этим простым шагам:
Читать дальше →

Обработка Excel файлов с использованием Python

Reading time4 min
Views209K
image
По работе пришлось столкнуться с задачей обработки xls файлов средствами python. Немного по гуглив, я натолкнулся на несколько библиотек, с помощью которых можно работать с файлами excel.
Читать дальше

Information

Rating
Does not participate
Location
Россия
Works in
Registered
Activity