полезное по линуксу и iphone собрано все интересное мне лично (методом copy-paste из инета и не пыхтите насчет копирайта я ссылки на источник ставлю)

четверг, 8 апреля 2010 г.

Rsync - современный способ синхронизации файлов


Итак, для чего нужен RSync?
RSync — был разработан как замена старой команды rcp. С помощью которой производилось копирование файлов между машинами UNIX-систем. RSync очень удобен, так как его алгоритм построен так, что он отслеживает как изменился файл и копирует только необходимые части. Причём для выявления изменений, ему не надо сравнивать два файла. И работает это очень быстро.
Кроме того, очень полезным будет его способность работать через ssh. Что обеспечивает шифрование канала, что очень важно, если вы синхранизируете два сервера в сети интернет. Для уменьшение трафика, rsync так-же умеет сжимать данные, при передаче по сети. Это очень мощная утилита, и надо быть с ней осторожным, с её помощью можно испортить данные.
Мы будем рассматривать rsync как средство синхронизации файлов между серверами, а не как систему раздачи файлов. В первом случае мы используем ssh, а во втором нам необходимо запускать сервер rsync.
Разберём на примере:
rsync -e ssh --progress -lzuogthvr --compress-level=9 \
 --delete-after root@:/home/ /home/
или
rsync -e ssh --progress -lzuogthvr --compress-level=9 \
 --delete-after /home/ root@:/home/
зависит от того, в какую сторону синхронизируем файлы
Обратите внимание на последний слеш, так как он имеет значение для rsync. Если на конце исходной директории стоит «/», то это означает копирование содержимого директории; отсутствие слеша означает копирование директории и ее содержимого.
Ключи:
  • e — заменяет протокол с rsh на ssh
  • progress — вывод хода процесса работы на терминал
  • l — пересоздание symlinks, это значит, что символические ссылки будут так же переноситься
  • z — использовать сжатие
  • u — update. Обновление, он будет пропускать файлы которые новей, чем на удалённом сервере
  • o — установить владельца конечного файла таким же, как и у исходного
  • g — установить группу конечного файла таким же, как и у исходного
  • t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации
  • h — вывод информации на терминал в удобном для чтения (human-readable) виде
  • v — verbose. Вывод сообщений в терминал.
  • r — рекурсивный режим
  • n — отладочный режим
  • compress-level — уровень сжатия
  • delete-after — удалять файлы, которые не были найдены на удалённом сервере, “-after” означает, что удалить их нужно, только после окончания синхранизации. Так-же есть delete-before, delete-during, delete-excluded и просто delete
отладочный режим
Перед тем как запустить скрипт на рабочей машине, опробуйте всё в отладочном режиме, для этого используется ключь “-n”. В этом случае, rsync
не будет менять или удалять файлы, но покажет, весь ход работы.
исключение файлов
RSync может как исключать, так и включать файлы, по заданному шаблону. Например —exclude *.run исключит все файлы с расширением run.


Взято с http://www.webnext.ru/blog/2007/07/02/rsync-howto.html

вторник, 6 апреля 2010 г.

Сетевой адаптер Intel ServerAdapter 1000 ET Quad Port PCIe в CentOS 5


Купили такую железку Intel ServerAdapter 1000 ET Quad Port PCIe .
Intel Serv.Adapter 1000 ET Quad Pro
Смонтировали в сервер. Задача заставить данный адаптер работать в CentOS 5, и распределить сетевую нагрузку по нескольким очередям.

Загружаемся:
Информация в dmesg

Intel(R) Gigabit Ethernet Network Driver - version 1.3.16-k2
Copyright (c) 2007-2009 Intel Corporation.
ACPI: PCI Interrupt 0000:09:00.0[A] -> GSI 17 (level, low) -> IRQ 169
PCI: Setting latency timer of device 0000:09:00.0 to 64
EDAC MC0: Giving out device to i5000_edac.c I5000: DEV 0000:00:10.0
intel_rng: FWH not detected
ACPI: PCI Interrupt 0000:00:1f.3[B] -> GSI 20 (level, low) -> IRQ 162
igb 0000:09:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:09:00.0: eth2: (PCIe:2.5Gb/s:Width x4) 00:1b:21:3e:ae:28
igb 0000:09:00.0: eth2: PBA No: e64750-002
igb 0000:09:00.0: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s)
ACPI: PCI Interrupt 0000:09:00.1[B] -> GSI 18 (level, low) -> IRQ 106
PCI: Setting latency timer of device 0000:09:00.1 to 64
igb 0000:09:00.1: Intel(R) Gigabit Ethernet Network Connection
igb 0000:09:00.1: eth2: (PCIe:2.5Gb/s:Width x4) 00:1b:21:3e:ae:29
igb 0000:09:00.1: eth2: PBA No: e64750-002
igb 0000:09:00.1: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s)
ACPI: PCI Interrupt 0000:0a:00.0[A] -> GSI 19 (level, low) -> IRQ 218
PCI: Setting latency timer of device 0000:0a:00.0 to 64
igb 0000:0a:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:0a:00.0: eth3: (PCIe:2.5Gb/s:Width x4) 00:1b:21:3e:ae:2c
igb 0000:0a:00.0: eth3: PBA No: e64750-002
igb 0000:0a:00.0: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s)
ACPI: PCI Interrupt 0000:0a:00.1[B] -> GSI 16 (level, low) -> IRQ 177
PCI: Setting latency timer of device 0000:0a:00.1 to 64
igb 0000:0a:00.1: Intel(R) Gigabit Ethernet Network Connection
igb 0000:0a:00.1: eth2: (PCIe:2.5Gb/s:Width x4) 00:1b:21:3e:ae:2d
igb 0000:0a:00.1: eth2: PBA No: e64750-002
igb 0000:0a:00.1: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s)
На первый взгляд все замечательно адаптер определился и работает, но смутили надписи 4 rx queue(s), 1 tx queue(s) на каждом из портов. Все дело в том, что у данного адаптера по 8 rx (прием) очередей на каждый порт.
Проверим версию драйвера
modinfo igb

filename: /lib/modules/2.6.18-164.6.1.el5PAE/kernel/drivers/net/igb/igb.ko
version: 1.3.16-k2
license: GPL
description: Intel(R) Gigabit Ethernet Network Driver
author: Intel Corporation, 
srcversion: 78555F0A019E05BADBD95AA
alias: pci:v00008086d000010D6sv*sd*bc*sc*i*
alias: pci:v00008086d000010A9sv*sd*bc*sc*i*
alias: pci:v00008086d000010A7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E8sv*sd*bc*sc*i*
alias: pci:v00008086d000010E7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E6sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Asv*sd*bc*sc*i*
alias: pci:v00008086d000010C9sv*sd*bc*sc*i*
depends: 8021q
vermagic: 2.6.18-164.6.1.1.el5PAE SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm: max_vfs:Maximum number of virtual functions to allocate per physical function (uint)
module_sig: 883f3504af3fe359a79aca2e69819291121b4409f6ecc47545455cf3b51a9aa99f40859e7bd7931a09f76b4b34dde9013eed67638dee172193713aff51f
Очень напрягает практически полное отсутствие секции parm, т.е. драйвер не знает практически никаких параметров.
Поднимем один порт например eth2 и посмотрим как обстоят дела в /proc/interrupts
cat /proc/interrupts|grep eth2
CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7
122:          0          0          0          0          0          0          0          0       PCI-MSI-X  eth2-tx-0
130:        182          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-0
138:        182          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-1
146:        182          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-2
154:        182          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-3
162:          2          0          0          0          0          0          0          0       PCI-MSI-X  eth2
Попытаемся подгрузить драйвер igb с нужными нам параметрами, для того чтобы задействовать по 8 очередей на порт.
modprobe igb IntMode=3,3,3,3 RSS=8,8,8,8

FATAL: Error inserting igb (/lib/modules/2.6.18-164.6.1.1.el5PAE/kernel/drivers/net/igb/igb.ko): Unknown symbol in module, or unknown parameter (see dmesg)

в dmesg

igb: Unknown parameter `IntMode'
igb: Unknown parameter `RSS'
опс, драйвер не знает таких параметров :(
Надо попробовать свежую версию драйвера igb может с ним нам повезет больше, т. к. собирать драйвер вручную было категорически лень, то вспомнился репозиторий ELREPO в котором данный драйвер присутствует.
Устанавливаем:

rpm -ihv http://elrepo.org/linux/elrepo/el5/i386/RPMS/kmod-igb-PAE-2.0.6-1.el5.elrepo.i686.rpm
Загружается http://elrepo.org/linux/elrepo/el5/i386/RPMS/kmod-igb-PAE-2.0.6-1.el5.elrepo.i686.rpm
предупреждение: /var/tmp/rpm-xfer.cvXEF5: Заголовок V3 DSA signature: NOKEY, key ID baadae52
Подготовка...     ########################################### [100%]
   1:kmod-igb-PAE           ########################################### [100%]
Creating the symbolic links. This may take some time ...
Done.

modinfo igb
filename:       /lib/modules/2.6.18-164.6.1.1.el5PAE/weak-updates/igb/igb.ko
version:        2.0.6
license:        GPL
description:    Intel(R) Gigabit Ethernet Network Driver
author:         Intel Corporation, 
srcversion:     AD1D1A409C0E0945FADD6A2
alias:          pci:v00008086d000010D6sv*sd*bc*sc*i*
alias:          pci:v00008086d000010A9sv*sd*bc*sc*i*
alias:          pci:v00008086d000010A7sv*sd*bc*sc*i*
alias:          pci:v00008086d000010E8sv*sd*bc*sc*i*
alias:          pci:v00008086d0000150Dsv*sd*bc*sc*i*
alias:          pci:v00008086d000010E7sv*sd*bc*sc*i*
alias:          pci:v00008086d000010E6sv*sd*bc*sc*i*
alias:          pci:v00008086d00001518sv*sd*bc*sc*i*
alias:          pci:v00008086d0000150Asv*sd*bc*sc*i*
alias:          pci:v00008086d000010C9sv*sd*bc*sc*i*
depends:
vermagic:       2.6.18-8.el5PAE SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm:           InterruptThrottleRate:Interrupt Throttling Rate (array of int)
parm:           IntMode:Interrupt Mode (array of int)
parm:           LLIPort:Low Latency Interrupt TCP Port (array of int)
parm:           LLIPush:Low Latency Interrupt on TCP Push flag (array of int)
parm:           LLISize:Low Latency Interrupt on Packet Size (array of int)
parm:           RSS:RSS - multiqueue receive count (array of int)
parm:           VMDQ:VMDQ - VMDq multiqueue receive (array of int)
parm:           QueuePairs:QueuePairs - TX/RX queue pairs for interrupt handling (array of int)
parm:           debug:Debug level (0=none, ..., 16=all) (int)
Подгружаем драйвер с нужными параметрами

modprobe igb IntMode=3,3,3,3 RSS=8,8,8,8
Проверяем

cat /proc/interrupts |grep eth2
51:          6          0          0          0          0          0          0          0       PCI-MSI-X  eth2
 52:          5          0          0          0          0          0          0          0       PCI-MSI-X  eth2-TxRx-0
 53:         34          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-1
 54:          8          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-2
 59:          8          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-3
 60:          8          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-4
 61:         34          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-5
 62:          8          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-6
 67:          5          0          0          0          0          0          0          0       PCI-MSI-X  eth2-rx-7
Теперь на каждый порт мы имеем по 8 очередей.
Победа.
Попытаемся заNAT-ить несколько сот мегабит трафика при штатном драйвере igb и проверим нагрузку на систему.
Для сравнения вспомним данный обзор, в котором процессоры умирали от si (system interrupts) при трафике в 400 мегабит.
«Дунем» через наш адаптер 400 мегабит входящего трафика, исходящий окажется в пределах 300 мегабит.

vnstat -i eth0 -tr
609740 packets sampled in 5 seconds
Traffic average for eth0

      rx       45864.72 kB/s          61261 packets/s
      tx       29906.86 kB/s          60686 packets/s
Посмотрим количество conntrack соединений

sysctl -a|grep net.ipv4.netfilter.ip_conntrack_count
net.ipv4.netfilter.ip_conntrack_count = 272495
Посмотрим нагрузку на ядра

top
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni, 68.4%id,  0.0%wa,  0.7%hi, 30.9%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni, 65.6%id,  0.0%wa,  3.3%hi, 31.1%si,  0.0%st
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni, 66.7%id,  0.0%wa,  0.3%hi, 33.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni, 69.7%id,  0.0%wa,  0.3%hi, 30.0%si,  0.0%st
Cpu4  :  0.3%us,  0.0%sy,  0.0%ni, 65.1%id,  0.0%wa,  0.7%hi, 33.9%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni, 63.8%id,  0.0%wa,  0.7%hi, 35.5%si,  0.0%st
Cpu6  :  0.0%us,  0.0%sy,  0.0%ni, 64.7%id,  0.0%wa,  3.0%hi, 32.3%si,  0.0%st
Cpu7  :  0.0%us,  0.0%sy,  0.0%ni, 63.7%id,  0.0%wa,  0.7%hi, 35.7%si,  0.0%st
Mem:   4147676k total,   340000k used,  3807676k free,    40524k buffers
Swap:  1052248k total,        0k used,  1052248k free,   123408k cached
Как видим средняя нагрузка на CPU от system interrupts в районе 33% т.е. сервер будет в состоянии занатить 1 гигабит трафика.

Дополнительные репозитории пакетов для CentOS 5


Дополнительные репозитории пакетов для CentOS 5
  • epel — пожалуй наиболее популярный репозиторий пакетов для CentOS, поддерживается сообществом Fedora. Содержит несколько тысяч пакетов различного назначения, не конфликтует с репозиториями base и updates . Рекомендуется к использованию.
    Установка: rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

  • redhat-club — софт как для сервера так и для десктопа, модули ядра (kmod). Не конфликтует с репозиториями base и updates . Рекомендуется к использованию. Репозиторий redhat-club закрыт, софт из репозитория Николай Ульяницкий пытается пристроить в Elrepo и RPMFusion.
    Требует для своей корректной работы подключенных репозиториев epel и rpmfusion .
    Установка: rpm -ihv http://repo.redhat-club.org/redhat/5/i386/redhatclub-repository-release-5-4.el5.rhc.noarch.rpm

  • centosplus — поддерживается компанией centos. Содержит ядро с включенной поддержкой записи на разделы NTFS, postfix с поддержкой MySQL и PostgreSQL и др. Конфликтует с репозиториями base и updates . Рекомендуется к использованию только в случае крайней необходимости.
    Установка: в штатном файле /etc/yum.repos.d/CentOS-Base.repo этот репозиторий присутствует, но отключен.

  • elrepo — содержит модули ядра kmod для сетевых адаптеров. Не конфликтует с репозиториями base и updates . Рекомендуется к использованию.
    Установка: rpm -Uvh http://elrepo.org/elrepo-release-0.1-1.el5.elrepo.noarch.rpm

  • karan – репозторий содержит пакеты частично содержащиеся в epel репозитории частично присутствующие в самом дистрибйтиве CentOS. Не рекомендуется к использованию.
    Установка: Создайте файл /etc/yum.repo.d/karan.repo следующего содержания.

    [kbs-CentOS-Extras]
    name=CentOS.Karan.Org-EL$releasever - Stable
    gpgcheck=1
    gpgkey=http://centos.karan.org/RPM-GPG-KEY-karan.org.txt
    enabled=1
    baseurl=http://centos.karan.org/el$releasever/extras/stable/$basearch/RPMS/
    [kbs-CentOS-Testing]
    name=CentOS.Karan.Org-EL$releasever - Testing
    gpgcheck=1
    gpgkey=http://centos.karan.org/RPM-GPG-KEY-karan.org.txt
    enabled=0
    baseurl=http://centos.karan.org/el$releasever/extras/testing/$basearch/RPMS/

  • jasonlitka — последние версии apache, mysql,php, mod-security. Конфликтует с репозиториями base и updates . Не рекомендуется к использованию.
    Установка: создайте файл Jasonlitka.repo с каталоге /etc/yum.repos.d следующего содержания

    [utterramblings]
    name=Jason's Utter Ramblings Repo
    baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
    enabled=1
    gpgcheck=0

  • pgsqlrpms — содержит БД PostgreSQL. Конфликтует с пакетом PostgreSQL репозиториев base и updates . Не рекомендуется к использованию.
    Установка Прочтите инструкцию по установке.

  • CentALT — содержит свежие версии серверного софта. Конфликтует репозиториями base и updates . Не рекомендуется к использованию.
    Установка Прочтите инструкцию по установке.

  • REMI — содержит свежие версии серверного софта, php, mysql httpd. Конфликтует репозиториями base и updates . Не рекомендуется к использованию без необходимости.
    Установка Прочтите инструкцию по установке.

  • RPM Fusion – объединил репозитории Dribble, Freshrpms, Livna.
    Установка Прочтите инструкцию по установке.

  • Pramberger – содержит в себе серверное ПО, модули Perl, Php, Python.
    Установка Прочтите инструкцию по установке.

  • Atomicorp – содержит в себе серверное ПО, модули Perl, Php, Python.
    Установка Установите пакет atomic-release

  • Odiecolon – содержит в себе ПО необходимое на рабочей станции, пакеты только под i386 архитектуру.
    Установка 
    оздайте файл odiecolon.repo с каталоге /etc/yum.repos.d следующего содержания

    [odiecolon]
    name=odiecolon el5
    type=rpm-md
    baseurl=http://odiecolon.lastdot.org/el5/
    gpgcheck=1
    enabled=1
    protect = 0
    gpgkey = http://odiecolon.lastdot.org/el5/RPM-GPG-KEY-odiecolon

  • RPMForge – содержит в себе огромный архив серверного ПО.
    Установка Прочтите инструкцию по установке.

  • Сервер OpenVPN на CentOS


     Представим ситуацию, когда пользователям вашей организации понадобился доступ извне к корпоративной почте или каким-либо другим данным. Я уверен, что вы можете настроить RPC over HTTPS, но есть и другие способы для достижения цели. Например, OpenVPN, который я нахожу достаточно удобным и надежным.

     В этом простейшем HOWTO я покажу, как настроить это все хозяйство. Опытные пользователи вряд ли найдут здесь что-то интересное для себя.
     В качесте допущения примем, что мы работаем с правами пользователя root и Selinux отключен, что указано в /etc/selinux/config. В противном случае необходимо выполнить команду:

    #semanage port -a -t openvpn_port_t -p tcp 1723

     На случай, если OpenVPN не найдется в основном репозитарии, необходимо добавить репозитарий rpmforge (не описано в этой статье).

    yum install openvpn
    cd /etc/openvpn/
    cp -R /usr/share/doc/openvpn-2.0.9/easy-rsa/ /etc/openvpn/
    cd /etc/openvpn/easy-rsa/2.0/
    . ../vars
    chmod +rwx *
    ./clean-all
    source ./vars
    vi ../vars

     Изменим значения вверху файла, чтобы они соответствовали нашим параметрам

    vi vars

     Создаем сертификат CA:

    ./build-ca

     Создаем файл server.key:

    source ./vars
    ./clean-all
    ./build-ca
    ./build-key-server server

     Редактируем файл openvpn.conf:

    vi /etc/openvpn/openvpn.conf

     Хотя в файле конфигурации указано использовать tcp, считается, что на медленных линиях udp работает быстрее. (Прим. пер. – udp всегда работает быстрее, так как не требует подтверждения получения пакетов)

    port 1723 # (1194 is the default but on some APN networks this is blocked)
    proto tcp
    dev tun
    ca ca.crt
    cert server.crt
    key server.key
    dh dh1024.pem
    server 172.16.0.0 255.255.255.0
    push "dhcp-option DNS 192.168.168.1"
    push "dhcp-option DNS 168.210.2.2"
    #push "dhcp-option WINS 192.168.1.2"
    push "route 192.168.168.0 255.255.255.0"
    ifconfig-pool-persist ipp.txt
    keepalive 10 120
    comp-lzo
    user nobody
    group users
    persist-key
    persist-tun
    status openvpn-status.log

     Копируем ключи и запускаем OpenVPN:

    cp keys/{ca.crt,ca.key,server.crt,server.key} /etc/openvpn/
    ./build-dh
    cp keys/dh1024.pem /etc/openvpn/
    /etc/init.d/openvpn start
    chkconfig --list | grep vpn

     Генерируем ключи по одному на каждого клиента:

    ./build-key

     Рассылаем ключи клиентам:

    cd keys/
    zip keys.zip ca.crt ca.key .crt .csr .key
    yum install -y nail
    nail -s “Keys" -a keys.zip me@mydomain.co.za

     Проверяем, запустился ли OpenVPN:

    netstat -ntpl | grep 1723

     Настраиваем правила iptables:

    # External Interface for VPN
    # VPN Interface
    VPNIF="tun0"
    VPNNET="172.16.0.0/24"
    VPNIP="172.16.0.1"
    ### OpenVPN
    $IPTABLES -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --destination-port 1723 -j
    ACCEPT # OpenVPN
    $IPTABLES -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --destination-port 1723 -j
    ACCEPT # OpenVPN
    # Allow TUN interface connections to OpenVPN server
    $IPTABLES -A OUTPUT -o $INTIF -s $EXTIP -d $VPNNET -j ACCEPT
    $IPTABLES -A OUTPUT -o $VPNIF -s $EXTIP -d $VPNNET -j ACCEPT
    # OpenVPN
    $IPTABLES -A FORWARD -i $EXTIF -o $VPNIF -m state --state ESTABLISHED,RELATED -j
    ACCEPT
    $IPTABLES -A FORWARD -o $INTIF -s $EXTIP -d $VPNNET -j ACCEPT
    $IPTABLES -A FORWARD -o $VPNIF -s $EXTIP -d $VPNIP -j ACCEPT
    $IPTABLES -A FORWARD -o $EXTIF -s $EXTIP -d $VPNNET -j ACCEPT
    $IPTABLES -A FORWARD -o $VPNIF -s $INTNET -d $VPNNET -j ACCEPT

     Устанавливаем OpenVPN GUI на Windows XP
     Поскольку OpenVPN сервер у нас установлен и ключи для клиентов сгенерированы, применим полученные знания на практике и осчастливим кого-нибудь установкой клиентской части.
    • Скачиваем клиентскую часть вот отсюда
    • Устанавливаем ее
    • В каталог C:\Program Files\OpenVPN\config выкладываем наши ключи и смотрим вообще, что там есть:

      ca.crt
      ca.key
      .crt (eg. johnl.crt)
      .csr
      .key
    • Редактируем файл client.ovpn таким образом, чтобы параметры соответствовали нашему серверу:

      # The hostname/IP and port of the server.
      # You can have multiple remote entries
      # to load balance between the servers.
      remote 1723
      ;remote my-server-2 1194
      # SSL/TLS parms.
      # See the server config file for more
      # description. It's best to use
      # a separate .crt/.key file pair
      # for each client. A single ca
      # file can be used for all clients.
      ca ca.crt
      cert .crt
      key .key
     Вот это собственно и все. Не забудьте настроить маршрутизацию!
     Поразившись лаконичности данного HOWTO, привожу еще несколько ссылок:
     У оригинала статьи есть интересный комментарий:
    Вместо использования на клиентах 3-ёх раздельных файлов (ca, cert, key) можно использовать единый файл формата PKCS12. Для этого надо генерировать ключ клиента командой:
    build-key-pkcs12 client1
    Будет создан и обычный комплект файлов, и новый файл .p12 – это и есть этот комбинированный файл. Его можно использовать в конфиге клиента одной командой pkcs12 вместо трёх команд ca, cert, key.
    Также при генерации этому файлу можно задать пароль для защиты секретного ключа, в таком случае каждый раз при установке соединения будет запрашиваться пароль для доступа к секретному ключу (Внимание! Так нельзя делать при запуске сервиса, т.к. он не сможет запросить пароль и не сможет установить соединение.). Следует также иметь ввиду, что пользователь имеет право самостоятельно изменить/удалить/установить пароль защиты секретного ключа.





     Уважайте труд автора, сохраняйте копирайты.
    Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!




    Краткость этого мануала компенсируется ошибками в нем.
    К примеру
    cp -R /usr/share/doc/openvpn-2.0.9/easy-rsa/ /etc/openvpn/
    наверное стоит заменить на
    cp -R /usr/share/openvpn/easy-rsa/ /etc/openvpn/
    cd /etc/openvpn/easy-rsa/2.0/
    ../vars на ./vars
    Некоторые куски повторяются, хотя и с разными путями:
    Изменим значения вверху файла, чтобы они соответствовали нашим параметрам
    vi ../vars
    Изменим значения вверху файла, чтобы они соответствовали нашим параметрам
    vi vars
    Поправьте это все )
    И подскажите пожалуйста, что именно править в vars’ах?

    понедельник, 22 марта 2010 г.

    Репликация MySQL на уже работающем сервере


    В интернете есть достаточно много хаутушек про настройку репликации. Как подключить slave для уже работающего сервера с данными инструкции тоже есть. Но я не смог найти такую инструкцию, которая бы соответствовала современным особенностям и полностью меня устроила. Пришлось разобраться самому.
    При использовании описанного ниже подхода стоит рассчитывать на даунтайм основного сервера на время его перезапуска. В примере использовался сервер под управлением Ubuntu и MySQL 5.0 из основного репозитория с настройками по умолчанию. Я исходил из того, что реплицировать нужно все базы данных, за исключением системных.
    На главном сервере.
    Надо поправить файл /etc/mysql/my.cnf:
    [mysqld]
    # Необходимо открыть доступ к серверу по сети,
    # что бы slave имел возможность подключиться
    # и не забыть закрыть этот доступ, например файрволом, для тех, кому он не нужен
    bind-address            = 0.0.0.0
    server-id               = 1
    log_bin                 = /var/log/mysql/mysql-bin.log
    expire_logs_days        = 10
    max_binlog_size         = 100M
    # Исключим ненужные БД
    #binlog_do_db           = include_database_name
    binlog_ignore_db        = information_schema
    binlog_ignore_db        = mysql
    binlog_ignore_db        = test
    # Это рекомендуется для более стабильной работы репликации баз на InnoDB
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1
    Перезапускаем mysql:
    /etc/init.d/mysql restart
    Выдаем slave права на репликацию:
    mysql -u root
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.2' IDENTIFIED BY 'slave_password';
    FLUSH PRIVILEGES;
    Посмотреть статус можно командой:
    SHOW MASTER STATUS;
    +------------------+----------+--------------+-------------------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB              |
    +------------------+----------+--------------+-------------------------------+
    | mysql-bin.000015 |       98 |              | information_schema,mysql,test |
    +------------------+----------+--------------+-------------------------------+
    1 row in set (0.00 sec)
    Далее делаем дамп существующих баз данных. Ключи –single-transaction –master-data –flush-logs должны глобально заблокировать на время дампа базу данных на запись и вписать в дамп номер и позицию лога, с которых надо начать репликацию на slave. Это обеспечит точность совпадения данных на главном и slave серверах, даже если с главным сервером в этот момент идет работа и записываются данные.
    mysqldump -u root --single-transaction --master-data --flush-logs --databases db1 db2 db3 > ALL_DB.sql
    Если посмотреть внутрь ALL_DB.sql, то там должна присутствовать строка:
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98;
    Далее копируем дамп на slave:
    scp ALL_DB.sql 10.0.0.2:
    Продолжаем на втором сервере.
    Убеждаемся что там нет остатков настроек репликации, в принципе, если на сервере нет нужных данных, не помешает переустановить mysql с очисткой папок БД.
    Так как начиная с версии MySQL 5.2 параметры доступа для репликации убираются из my.cnf сразу перейдем на использование такой схемы.
    Правим файл /etc/mysql/my.cnf:
    [mysqld]
    # ID slave должен отличаться от главного сервера
    server-id               = 2
    replicate-ignore-db     = information_schema
    replicate-ignore-db     = mysql
    replicate-ignore-db     = test
    relay-log               = /var/log/mysql/mysqld-relay-bin.log
    Перезапускаем сервер:
    /etc/init.d/mysql restart
    Поправим файл ALL_DB.sql:
    Дописываем к строке
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98;
    параметры доступа:
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98, MASTER_HOST='10.0.0.1', MASTER_USER='replication',
    MASTER_PASSWORD='slave_password', MASTER_CONNECT_RETRY=60;
    Загружаем данные:
    mysql -u root < ALL_DB.sql
    Проверяем состояние репликации, она НЕ должна быть запущена (Slave_IO_Running, Slave_SQL_Running: no, no):
    mysql -u root
    show slave status;
    Запускаем репликацию (теперь должно быть Slave_IO_Running, Slave_SQL_Running: yes, yes):
    START SLAVE;
    show slave status;
    Для проверки можно попробовать перезапустить mysql и проверить состояние репликации еще раз:
    /etc/init.d/mysql restart
    mysql -u root
    show slave status;
    Остается по желанию проверить репликацию, создав, например, тестовую таблицу или добавив данные в существующую и убедиться, что изменения отразились на slave.
    Кстати, базы, которые будут созданы после запуска репликации тоже должны среплицироваться. То есть, в идеале, данное решение не требует подстройки, если у вас меняются, добавляются или удаляются базы данных.

    вторник, 9 марта 2010 г.

    CDP(Cisco Discovery Protocol) на Linux



    CDP(Cisco Discovery Protocol) на Linux

    Всем известно про замечательный протокол CDP (Cisco Discovery Protocol) для Cisco. Оказывается что и для Linux тоже есть возможность использовать его прелести. Есть проект LLDP, который нам в этом и поможет.

    Для тех, кто не в кусре: на cisco можно посмотреть соседей с включенным CDP коммандой sh cdp nei. Комманда выведет оборудование которое подключено, на каком порту и т.д., более подробно sh cdp ent Device_ID, уже по конкретному девайсу.

    Так вот, мы сейчас попробуем включить это и в Linux, в данном, конкретном случае, настраивать будем на CentOS 5.4, на Debian-подобных дистрах почти тож самое, за исключением процесса сборки и расположения файлов.


    Для начала скачаем src.rpm, установим его:
    # rpm -Uhv lldpd-0.4.0-1.fc10.src.rpm
    появится файл спецификаций /usr/src/redhat/SPECS/lldpd.spec, кому нужно, может его править по своему усмотрению, если надо.
    Далее нам собственно надо собрать сам пакет:
    # rpmbuild -bb /usr/src/redhat/SPECS/lldpd.spec
    устанавливаем вновь собранный пакет:
    # rpm -Uhv /usr/src/redhat/RPMS/i386/lldpd-0.4.0-1.i386.rpm
    настраиваем опции запуска демона, открываем файл:

    # vim /etc/sysconfig/lldpd

    и правим

    OPTIONS=”-v -c”

    -v – включаем поддержку vlan если они у Вас есть на машине с Linux

    -c – включаем протокол CDP

    более подробную информацию можно посмотреть по man lldpd

    запускаем демон:

    # /etc/init.d/lldpd start

    после запуска, в файле /var/log/messages мы увидим приблизительно такие строки:

    lldpd[30206]: lldpd_decode: switching to CDPv2 on port eth1
    lldpd[30206]: lldpd_decode: switching to CDPv2 on port eth0


    всё в порядке, демон стартанул.

    Чтоб все работало, на оборудовании с другой стороны, на порту, должен быть включен CDP, то есть не должно стоять no cdp enable на интерфейсе.

    Собственно, осталось только проверить как все работает и получить информацию.

    # lldpctl

    получаем:
    --------------------------------------------------------
    LLDP neighbors
    --------------------------------------------------------
    Interface: eth0
    ChassisID: sw-b-48 (local)
    SysName: sw-b-48
    SysDescr:
    cisco WS-C2960-48TT-L running on
    Cisco IOS Software, C2960 Software (C2960-LANBASE-M)
    Copyright © 1986-2007 by Cisco Systems, Inc.
    Compiled Thu 19-Jul-07 20:06 by nachen
    MgmtIP: 172.16.25.48
    Caps: Bridge(E)
    PortID: FastEthernet0/4 (ifName)
    PortDescr: FastEthernet0/4
    --------------------------------------------------------

    видим, что на другой стороне у нас свитч C2960, версию IOS, порт свитча, к которуму подключена машина с Linux.

    Для остроты ощущений, посмотрим вывод на cisco, у нас там появилось:

    my.linux.machine
    Fas 0/4 92 R Linux eth0


    то есть, опять таки, видим, что у нас на порту fa0/4 подключена машина с Linux, сетевое имя машины, и её сетевушка eth0.

    Добавлю: можно установить демон из сорсов самому, но в моем случае это не true-way, все должно быть упорядочено. В Debian-подобных дистрах, файл настройки демона расположен в /etc/default/

    стоит отметить еще утилиту cdpr, но с её помощью можно только получать информацию по CDP, а не обмениваться ей, для RH-дистров она есть в репозитарии rpmforge.

    Вот и все. Удачи в настройках.

    Взято здесь

    Vuurmuur — боевые коты на страже вашей сети


    Vuurmuur — боевые коты на страже вашей сети

    image

    Vuurmuur — за таким «кошачьим» именем скрывается довольно мощная GUI надстройка для iptables. Основным отличием от других iptables-надстроек является наличие консольного интерфейса написанного на Ncurses. Поэтому администрирование всё также легко возможно посредством SSH или консоли. Vuurmuur умеет работать с шейпингом, поддерживает функции мониторинга трафика, ведёт отдельные логи, прекрасно работает как на 2.4 так и на 2.6 ядрах и даже «говорит» на русском.



    Возможности


    Администрирование

    • как всегда — знания iptables не требуются. Совсем :)
    • понятный обычному человеку синтаксис правил
    • шейпинг
    • Ncurses GUI, нет необходимости в X Window.
    • легкое перенаправление портов
    • легкая настройка NAT
    • безопасная политика по-умолчанию
    • полное управление через ssh или консоли (в том числе через PuTTY для Windows)
    • скрипты для интеграции с другими инструментами
    • возможность сборки bash-скрипта для установки правил iptables на системе без vuurmuur
    • средства противодействия IP-спуфингу
    • возможность обрыва нежелательных соединений
    • работа со Snort с помощью QUEUE или NFQUEUE
    • поддерживаемые языки: английский, немецкий, норвежский, французский, голландский, португальский и русский
    • понятная и удобная справка на русском

    Мониторинг

    • удобный просмотр логов в реальном времени
    • удобный просмотр соединений в реальном времени
    • фильтрация при просмотре логов
    • базовый подсчёт трафика
    • поиск по старым логам

    Учёт

    • аудит: все изменения записываются
    • запись всех новых соединений и подозрительных пакетов
    • подсчёт трафика

    Установка


    Gentoo

    emerge -av layman
    layman -f && layman -a sunrise
    ACCEPT_KEYWORDS="~ARCH" emerge -av net-firewall/vuurmuur


    Debian/Ubuntu

    #Debian
    echo "deb ftp://ftp.vuurmuur.org/debian/ etch main" >> /etc/apt/sources.list
    #Ubuntu
    echo "deb ftp://ftp.vuurmuur.org/ubuntu/ feisty main" >> /etc/apt/sources.list

    apt-get update
    apt-get install libvuurmuur vuurmuur vuurmuur-conf


    Для любителей ручной установки: deb-пакеты лежат на официальном FTP

    Картинки


    Просмотр логов

    image

    Просмотр соединений

    image

    Просмотр трафика

    image

    Правила

    image

    Шейпинг

    image

    Мультики


    Добавление интерфейса
    Добавление зоны
    Добавление правил
    Добавление хоста
    Добавление перенаправления
    Добавление службы

     Взято здесь