Описание команд и параметров OpenVPN

среда, 9 декабря 2009 г.
OpenVPN - очень гибкое, удобное, а главное быстрое и безопасное, решение для построения виртуальных частных сетей VPN.
В данной статье я попытаюсь наиболее подробно описать основные команды, используемые в OpenVPN.

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

remote <> - определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.

local <> - определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.

dev <> - определяет какой использовать тип устройства tun или tap. Например:
dev tun
или
dev tap
При одном из таких указаний будет использован свободный интерфейс tun или tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.

port <> - указывает на каком порту будет работать OpenVPN (локально и удаленно).

proto <> - какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server. С первыми двумя все ясно, а на последних двух остановимся чуть подробнее:
tcp-client - сам пытается установить соединение
tcp-server - только ждет подключений
Примечательно, что с использованием протокола udp VPN будет работать чуть быстрее, чем tcp. Но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво)

remote-random - если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключатся. Применятся для балансировки нагрузки.

float - позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.

ipchange <> - выполняет скрипт или команду указанную в <>, если IP сменился. Пример:
ipchange script-ip.sh

connect-retry <> - пробует переподключится через указанное время в секундах, если соединение было разорвано.

connect-retry-max <> - максимальное количество повторов если соединение было разорвано

resolv-retry <> - если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключится.

lport <> - указывает на локальный порт для использования OpenVPN

rport <> - аналогично для удаленного порта. Пример:
rport 8000 - OpenVPN будет пытаться подключится к удаленному порту 8000

nobind - использовать динамический порт для подключения (только для клиента)

shaper <> - указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)

tun-mtu <> - устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500. Использование:
tun-mtu 1200

dev-node <> - устанавливает имя виртуального интерфейса. Например:
dev-node openvpn1

ifconfig - устанавливает локальный IP и маску подсети для туннельного интерфейса. Например:
ifconfig 10.3.0.1 255.255.255.0

server <> <> - автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работаеть только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно. Например:
server 10.3.0.0 255.255.255.0
Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.1 и 10.3.0.254.

server-bridge <> <> <> - сервер в режиме моста для TAP устройств. Пример:
server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254
Клиентам будут выданы адреса в диапазоне 10.3.0.128 - 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.

mode server - переключает OpenVPN в режим сервера (начиная с 2-й версии)

mode p2p - данная опция идет по умолчанию.


Опции в режиме сервера


push <> - передача клиенту конфигурационных параметров. Пример:
push "route 192.168.0.0 255.255.255.0"

Аналогично с помощью push клиенту могут передаватся следующие параметры:

route
route-gateway
route-delay
redirect-gateway
inactive
ping, ping-exit, ping-restart
persist-key, persist-tun
comp-lzo
dhcp-option
ip-win32

Последние две опции применимы только для Window-клиентов. Например передадим Windows-клиенту адрес DNS-сервера 11.11.11.11:
push "dhcp-option DNS 11.11.11.11"

comp-lzo - параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive. Последнее используется по умолчанию.
Например:
comp-lzo yes - принудительно включить сжатие
comp-lzo no - принудительно отключить сжатие
comp-lzo adaptive - адаптивный режим.


Команды и параметры при работе с сертификатами x509 и параметрами шифрования


cipher <> - указываем алгоритм шифрования. Например:
cipher AES-256-CBC
Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).

keysize <> - размер ключа в битах. Например:
keysize 128

auth <> - алгоритм хэширования. Пример:
auth SHA1

df <> - файл с ключем Диффи-Хелмана

ca <> - файл сертификата для CA

cert <> - сертификат локальной машины

key <> - локальный ключ машины

tls-server - явно указывает, что данный хост является tls-server

tls-client - соответственно tls-client

pkcs12 <> - указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример:
pkcs12 /file

crl-verify <> - список отозванных сертификатов, т.е. blacklist.

no-replay - отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!

no-iv - отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!

Последние две опции очень сильно снижаю безопасность OpenVPN, крайне не рекомендуется их использование.

secret <> - включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой --genkey, файл. Например:
secret key.txt

Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки:
openvpn --show-ciphers

Алгоритмы хэширования:
openvpn --show-digests

Показать все доступные TLS-шифры (TLS используется только для шифрования канала управления)
openvpn --show-tls

Показать все доступные крипто-устройства в системе (если такие имеются):
openvpn --show-engines

Для улучшения безопасности рекомендовано запускать все сервисы с минимальными правами. Следующими двумя командами мы укажем с правами какого пользователя и группы будет работать openvpn:

user nobody
group nogroup

Где, соответственно, nobody и nogroup имена пользователя и группы.


Команды для управления маршрутизацией


Обозначение: VPN-хост - удаленная сторона (удаленный хост)

route <> - устанавливает указанную маршрутизацию на VPN-хосте, после успешного запуска туннеля. Пример:
route 10.0.10.0 255.255.255.252

route-gateway <> - устанавливает шлюз на VPN-хосте. Пример:
route-gateway 192.168.0.22
После успешного запуска виртуального туннеля клиенту будет задан шлюз 192.168.0.22

route-delay <> - указывает подождать n-секунд перед установкой маршрутов. Пример:
route-delay 5
Т.е. через 5 секунд после установки туннеля будут заданы маршруты.

route-up <> - выполнить скрипт или программу <> после установкий маршрутов. Пример:
route-up /script.sh

redirect-gateway - установить шлюзом по умолчанию удаленный сервер. Т.е. когда удаленный пользователь подключается к нашему серверу, то ему будет задан шлюз по умолчанию на наш сервер.


Команды для управления туннелем


ping <> - указывает отсылать ping на удаленный конец тунеля после указанных n-секунд, если по туннелю не передавался никакой трафик. Пример:
ping 10

ping-restart <> - если за указанное время не было получено ни одного пакета с удаленной стороны, то перезапускать туннель. Пример:
ping-restart 60 - если в течении 60 секунд не было получено ни одного пакета, то туннель будет перезапущен.

ping-timer-rem - позволяет перезапускать туннель, только когда указан удаленный адрес.

persist-tun - данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.

persist-key - указывает не перечитавать файлы ключей при перезапуске туннеля.

resolv-retry <> - устанавливает время в секундах для запроса об удаленном имени хоста. Актуально только если используется DNS-имя удаленного хоста. Пример:
resolv-retry 86400
inactive <> - после n-секунд неактивности устройство TUN/TAP автоматически отключется. Пример:
inactive 120

ping-exit <> - если за указанные n-секунд не было получено ни одного пакета, то отключать OpenVPN. Пример:
ping-exit 120

keepalive <> <> - является совмещением сразу двух команд - ping и ping-restart. Использует сразу два параметра в секундах, перечисленных через пробел. Пример:
keepalive 10 180
Означает следующее: каждые 10 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета - то перезапускать туннель.

persist-local-ip <> - оставлять неизменными локальный IP адрес и номер порт, если туннель был перезапущен.

persist-remote-ip <> - оставлять неизменными удаленный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip 192.168.50.1


Методы аутентификации


auth-user-pass-verify <> <> - указывается только на серверной стороне.
<> - путь к скрипту, который будет производить авторизацию. Скрипт должен возвращать 0 если авторизация успешна, и соответственно, 1 если авторизация не успешна.
<> - метод авторизации, может быть двух типов: via-env и via-file

auth-user-pass <>- указывается на клиентской стороне. Параметр не обязателен, если он отсутствует то будет предложено ввести пару логин/пароль.
должен содержать имя пользователя и пароль в двух строчках:
username
password

client-cert-not-required - отключает авторизацию по сертификатам.


Работа с прокси


OpenVPN без проблем может работать через http и socks прокси.

http-proxy <> - указываем адрес и порт прокси-сервера.
http-proxy 192.168.0.12 8080

Если требуется авторизация на прокси-сервере:

http-proxy <> - где authfile - файл содержащий две строки (имя пользователя и пароль) или stdin (будет запрошено имя пользователя и пароль).

Так же после authfile требуется указать метод авторизации. Можно оставить auto для автоматического выбора метода авторизации или указать явно через auth-method.
auth-method может быть трех видов "none", "basic" или "ntlm".
Используется в OpenVPN начиная с версии 2.1.

http-proxy-retry - переподключатся если соединение было разорвано.

http-proxy-timeout <> - считать соедение с прокси-сервером разорванным после n-секунд неактивности. Например:
http-proxy-timeout 5

socks-proxy <> - указываем сокс-прокси сервер. Пример:
socks-proxy 192.168.0.12 8080

socks-proxy-retry - переподключатся если соединение было разорвано.

auto-proxy - автоматически определять прокси-сервер. Требуется версия OpenVPN 2.1 и выше.


Скриптинг


up <>- выполнить команду после запуска устройства TUN/TAP. Пример:
up script-up.sh

up-delay <> - подождать n-секунд перед запуском команды указанной в up. Пример:
up-delay 5

down <> - выполнить команду когда интерфейс TUN/TAP выключится. Пример:
down script-down.sh

down-pre - выполнить команду, указанную в down перед выключением интерфейса TUN/TAP

up-restart <> - выполнить команду после каждого реконнекта

route-up <> - выполнить команду после устрановки серевых маршрутов. Пример:
route-up script.sh

learn-address <> - выполнить указанную команду, если ip удаленной стороны изменился.

ipchange <> - выполнить команду, если ip сервера изменился.

client-connect <> - выполнить команду, когда клиент подключился.

client-disconnect <> - выполнить команду, когда клиент отключился.


Команды отладки и поиска неисправностей


verb <> - устанавливает уровень информативности отладочных сообщений. Может принимать параметр от 0 до 11. По умолчанию verb равен 1.
При уровне verb 5 и выше в логе будут встречатся подобные записи: RwrW. R (read), W (write) - соответственно чтение и запись. Большая буква обозначает, что пакет был считан (R) или записан (W) на виртуальном устройстве TUN/TAP, а маленькие считан (r) и записан (w) в туннеле.

mute <> - если значение установлено в 10, то в лог будет записываться только по 10 сообщений из одной категории.


Логирование


log <> - указываем лог-файл. Если данный параметр не указан, то весь вывод openvpn будет производится в stdout.

log-append <> - дописывать сообщения в лог-файл, а не перезаписывать.

status <> - указывает путь к статус-файлу, в котором содержится информация о текущих соединениях и информация о интерфейсах TUN/TAP.


В. Чем отличаются виртуальные устройства tun и tap?
О. TUN - туннель, соединение по которому указывается по типу: локальный IP < --- > удаленный IP. Например, при явном указании ifconfig:
--ifconfig 10.3.0.2 10.3.0.1
в этом примере 10.3.0.2 - локальный IP, 10.3.0.1 - удаленный IP
TAP - эмулирует виртуальную ethernet карточку, для которой требуется указывать локальный IP и маску подсети. Например:
--ifconfig 10.3.0.2 255.255.255.0


В. Для чего нужны файлы serial и index.txt при генерации ключей с easy-rsa?
О. Эти два файла используются в качестве временной базы данных, используемой при генерации ключей. Должны находиться в том каталоге, где и ключи.

О назначении и применении rundll32.exe в Windows XP

rundll32.exe - утилита командной строкив среде Windows, выполняет следующую задачу - запуск библиотеки (DLL - Dynamic Link Library) как приложения, в том числе позволяя запускать некоторые функции, скомпилированные в DLL-файлах. Список открывающихся при этом возможностей очень широк, приведем лишь некоторые из примеров, сгруппированные по категориям:

Параметры, вводимые при запуске URL.DLL через rundll32.exe:

rundll32 url.dll,FileProtocolHandler %1 - открыть веб-страницу, %1 - URL сайта (включая http://).
rundll32 url.dll,MailToProtocolHandler %1 - создать новое письмо, %1 - e-mail адресата.
rundll32 url.dll,NewsProtocolHandler %1 - подключиться к NEWS-серверу, %1 - URL сервера.
rundll32 url.dll,TelnetProtocolHandler %1 - подключиться по telnet, %1 - адрес сервера.

Параметры, вводимые при запуске SHELL32.DLL через rundll32.exe:

rundll32 shell32.dll,Control_RunDLL hotplug.dll - диалоговое окно "Отключение или извлечение аппаратного устройства"
rundll32 shell32, Control_FillCache_RunDLL - запустить начальную инициализацию "Панели управления".
rundll32 shell32,Control_RunDLL - открыть в Проводнике папку "Панель управления"
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1 - апплет "Специальные возможности" (вкладка "Клавиатура")
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2 - апплет "Специальные возможности" (вкладка "Звук")
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3 - апплет "Специальные возможности" (вкладка "Экран")
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4 - апплет "Специальные возможности" (вкладка "Мышь")
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5 - апплет "Специальные возможности" (вкладка "Общие")
rundll32 shell32,Control_RunDLL appwiz.cpl,,1 - вызов диалогового окна "Установка и удаление программ"(вкладка "Установка программ").
rundll32 shell32,Control_RunDLL appwiz.cpl,,2 - вызов диалогового окна "Установка и удаление программ"(вкладка "Установка компонентов Windows").
rundll32 shell32,Control_RunDLL appwiz.cpl,,3 - вызов диалогового окна "Установка и удаление программ"(вкладка "Выбор программ по умолчанию").
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 - апплет "Экран" (вкладка "Рабочий стол").
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1 - апплет "Экран" (вкладка "Заставка").
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3 - апплет "Экран" (вкладка "Параметры").
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0 - апплет "Свойства обозревателя" (вкладка "Общие").
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,1 - апплет "Свойства обозревателя" (вкладка "Безопасность").
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,2 - апплет "Свойства обозревателя" (вкладка "Конфиденциальность").
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,3 - апплет "Свойства обозревателя" (вкладка "Содержание").
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,4 - апплет "Свойства обозревателя" (вкладка "Подключения").
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,5 - апплет "Свойства обозревателя" (вкладка "Программы").
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0 - апплет "Язык и региональные стандарты" (вкладка "Региональные параметры")
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1 - апплет "Язык и региональные стандарты" (вкладка "Языки")
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2 - апплет "Язык и региональные стандарты" (вкладка "Дополнительно")
rundll32.exe shell32.dll,Control_RunDLL joy.cpl - апплет "Игровые устройства"
rundll32 shell32,Control_RunDLL main.cpl @0 - открыть диалог "Свойства мыши".
rundll32 shell32,Control_RunDLL main.cpl @1 - открыть диалог "Свойства клавиатуры".
rundll32 SHELL32,SHHelpShortcuts_RunDLL PrintersFolder - открыть папку "Принтеры".
rundll32 SHELL32,SHHelpShortcuts_RunDLL FontsFolder - открыть папку "Шрифты".
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0 - апплет "Звуки и аудиоустройства" (вкладка "Громкость")
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1 - апплет "Звуки и аудиоустройства" (вкладка "Звуки")
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2 - апплет "Звуки и аудиоустройства" (вкладка "Аудио")
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3 - апплет "Звуки и аудиоустройства" (вкладка "Речь")
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4 - апплет "Звуки и аудиоустройства" (вкладка "Оборудование")
rundll32.exe shell32.dll,Control_RunDLL modem.cpl - апплет "Телефон и модем"
rundll32.exe shell32.dll,Control_RunDLL ncpa.cpl - открытие окна "Сетевые подключения"
rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl - апплет "ODBC Data Source Administrator"
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0 - апплет "Система" (вкладка "Общие"). Параметры от 1 до 6 - остальные вкладки
rundll32.exe shell32.dll,Control_RunDLL telephon.cpl - апплет "Телефон и модем"
rundll32 shell32,Control_RunDLL timedate.cpl - открыть диалог "Дата и время"
rundll32 shell32,Control_RunDLL timedate.cpl,,/f - открыть вкладку "Часовой пояс"
rundll32 shell32,OpenAs_RunDLL - вызвать диалог "Открыть с помощью..."
rundll32 shell32,ShellAboutA WHATIS.RU - информация о версии Windows
rundll32 shell32,SHExitWindowsEx 0 - закрыть все программы, перегрузить оболочку
rundll32 shell32,SHExitWindowsEx 1 - выключить ПК
rundll32 SHELL32,SHExitWindowsEx -1 - перегрузить оболочку Windows
rundll32 shell32,SHExitWindowsEx 2 - перегрузить ПК
rundll32 shell32,SHExitWindowsEx 4 - принудительно закрыть все программы
rundll32 shell32,SHExitWindowsEx 8 - выход из Windows и выключение ATX-совместимого ПК
rundll32 shell32,SHFormatDrive - вызов диалога форматирования диска А:
rundll32 SHELL32,SHHelpShortcuts_RunDLL AddPrinter - запуск "Мастера установки принтера"
rundll32 shell32,SHHelpShortcuts_RunDLL Connect - запуск мастера подключения сетевого диска
rundll32 SHELL32,SHHelpShortcuts_RunDLL PrintTestPage - распечатать тестовую страницу

Параметры, вводимые при запуске USER.EXE через rundll32.exe:

rundll32 user,CASCADECHILDWINDOWS - расположить все окна каскадом.
rundll32 user,TILECHILDWINDOWS - расположить все окна по экрану.
rundll32 user,disableoemlayer - сбой системы (!) - выключить все функции ввода-вывода (клавиатура, дисплей, мышь). В результате будет черный экран с курсором и ни на что не реагирующая система, однако Windows продолжает работать.
rundll32 user,enableoemlayer - включить и загрузить OEM Layer, если есть возможность выполнить эту команду дистанционно.
rundll32 user,ExitWindowsExec - быстрая перезагрузка Windows.
rundll32 user,RepaintScreen - выполнить команду "Обновить".
rundll32 user,SetCaretBlinkTime n - задать частоту мигания курсора, соответствующую значению параметра n.
rundll32 user,SetCursorPos - переместить курсор мыши в верхний левый угол экрана.
rundll32 user,SetDoubleClickTime n - задать скорость двойного нажатия левой кнопки мыши (Double Click), соответствующую параметру n.
rundll32 user,SwapMouseButton - поменять местами клавиши мыши (обратная смена невозможна).
rundll32 user,WNetConnectDialog - вызов диалога "Подключение сетевого диска".
rundll32 user,WNetDisconnectDialog - вызов диалога "Отключение сетевого диска".

Вызов функций из других библиотек:

rundll32 diskcopy,DiskCopyRunDll - вызов диалога "Копирование диска".
rundll32 keyboard,disable - отключение клавиатуры, действует до следующей перезагрузки.
rundll32 mouse,disable - отключение мыши, действует до следующей перезагрузки.
rundll32 krnl386.exe,exitkernel - выгрузить ядро системы, выход из Windows.
rundll32 mshtml.dll,PrintHTML "HtmlFileNameAndPath" - распечатать документ HTML, где "HtmlFileNameAndPath" - путь к файлу и его имя.
rundll32 мсprint2.dll,RUNDLL_PrintTestPage - распечатать тестовую страницу на принтере.
rundll32 netplwiz.dll,AddNetPlaceRunDll - вызов мастера подключения нового сетевого ресурса "Добавление в сетевое окружение".
rundll32.exe ntlanui.dll,ShareCreate - вызов окна "Новый общий ресурс"
rundll32.exe ntlanui.dll,ShareManage - вызов окна "Общие папки"
rundll32 shell,ShellExecute - открыть "Проводник" (папка "Рабочий стол").
rundll32 sysdm.cpl,InstallDevice_Rundll - вызов мастера установки оборудования.
rundll32 AppWiz.Cpl,NewLinkHere %1 - запуск мастера создания нового ярлыка, где %1 - путь к исходному файлу.
rundll32 syncui.dll, Briefcase_Intro - вызов мастера по работе с "Портфелем"
rundll32 SYNCUI.DLL, Briefcase_Create - создать новую папку "Портфель", если эта функция установлена в системе.
rundll32 msgina,ShellShutdownDialog - вызов диалога "Завершение работы Windows".
rundll32 tcpmonui.dll, LocalAddPortUI - запуск мастера установки TCP-порта принтера.
rundll32 shdocvw.dll,DoOrganizeFavDlg - вызов окна "Упорядочить избранное"
rundll32 shdocvw.dll,OpenURL filename - запуск .url файла с именем filename
rundll32 user32.dll LockWorkStation - блокировка компьютера
rundll32 desk.cpl, InstallScreenSaver [filename.scr] - задать файл скринсейвера в диалоговом окне свойств дисплея.
rundll32 IEdkcs32.dll, Clear - сброс некоторых настроек Internet Explorer, полезно использовать при некоторых сбоях в работе обозревателя.
rundll32.exe powrprof.dll,SetSuspendState - ввести компьютер в спящий режим

DDOS

четверг, 12 ноября 2009 г.
Анатомия DoS-атак
DoS-атаки подразделяются на локальные и удаленные. К локальным относятся различные эксплойты, форк-бомбы и программы, открывающие по миллиону файлов или запускающие некий циклический алгоритм, который сжирает память и процессорные ресурсы. На всем этом мы останавливаться не будем. А вот удаленные DoS-атаки рассмотрим подробнее. Они делятся на два вида:
Удаленная эксплуатация ошибок в ПО с целью привести его в нерабочее состояние.
Flood - посылка на адрес жертвы огромного количества бессмысленных (реже – осмысленных) пакетов. Целью флуда может быть канал связи или ресурсы машины. В первом случае поток пакетов занимает весь пропускной канал и не дает атакуемой машине возможность обрабатывать легальные запросы. Во втором - ресурсы машины захватываются с помощью многократного и очень частого обращения к какому-либо сервису, выполняющему сложную, ресурсоемкую операцию. Это может быть, например, длительное обращение к одному из активных компонентов (скрипту) web-сервера. Сервер тратит все ресурсы машины на обработку запросов атакующего, а пользователям приходится ждать.

В традиционном исполнении (один атакующий - одна жертва) сейчас остается эффективным только первый вид атак. Классический флуд бесполезен. Просто потому что при сегодняшней ширине канала серверов, уровне вычислительных мощностей и повсеместном использовании различных анти-DoS приемов в ПО (например, задержки при многократном выполнении одних и тех же действий одним клиентом), атакующий превращается в надоедливого комара, не способного нанести какой бы то ни было ущерб. Но если этих комаров наберутся сотни, тысячи или даже сотни тысяч, они легко положат сервер на лопатки. Толпа - страшная сила не только в жизни, но и в компьютерном мире. Распределенная атака типа "отказ в обслуживании" (DDoS), обычно осуществляемая с помощью множества зомбифицированных хостов, может отрезать от внешнего мира даже самый стойкий сервер, и единственная эффективная защита - организация распределенной системы серверов (но это по карману далеко не всем, привет Google).

Методы борьбы
Опасность большинства DDoS-атак – в их абсолютной прозрачности и "нормальности". Ведь если ошибка в ПО всегда может быть исправлена, то полное сжирание ресурсов - явление почти обыденное. С ними сталкиваются многие администраторы, когда ресурсов машины (ширины канала) становится недостаточно, или web-сайт подвергается слэшдот-эффекту (twitter.com стал недоступен уже через несколько минут после первого известия о смерти Майкла Джексона). И если резать трафик и ресурсы для всех подряд, то спасешься от DDoS, но потеряешь добрую половину клиентов.

Выхода из этой ситуации фактически нет, однако последствия DDoS-атак и их эффективность можно существенно снизить за счет правильной настройки маршрутизатора, брандмауэра и постоянного анализа аномалий в сетевом трафике. В следующей части статьи мы последовательно рассмотрим:
способы распознавания начинающейся DDoS-атаки;
методы борьбы с конкретными типами DDoS-атак;
универсальные советы, которые помогут подготовиться к DoS-атаке и снизить ее эффективность.

В самом конце будет дан ответ на вопрос: что делать, когда началась DDoS-атака.
Борьба с flood-атаками

Итак, существует два типа DoS/DDoS-атак, и наиболее распространенная из них основана на идее флуда, то есть заваливания жертвы огромным количеством пакетов. Флуд бывает разным: ICMP-флуд, SYN-флуд, UDP-флуд и HTTP-флуд. Современные DoS-боты могут использовать все эти виды атак одновременно, поэтому следует заранее позаботиться об адекватной защите от каждой из них.

1. ICMP-флуд.
Очень примитивный метод забивания полосы пропускания и создания нагрузок на сетевой стек через монотонную посылку запросов ICMP ECHO (пинг). Легко обнаруживается с помощью анализа потоков трафика в обе стороны: во время атаки типа ICMP-флуд они практически идентичны. Почти безболезненный способ абсолютной защиты основан на отключении ответов на запросы ICMP ECHO:

# sysctl net.ipv4.icmp_echo_ignore_all=1

Или с помощью брандмауэра:

# iptables -A INPUT -p icmp -j DROP --icmp-type 8

2. SYN-флуд.
Один из распространенных способов не только забить канал связи, но и ввести сетевой стек операционной системы в такое состояние, когда он уже не сможет принимать новые запросы на подключение. Основан на попытке инициализации большого числа одновременных TCP-соединений через посылку SYN-пакета с несуществующим обратным адресом. После нескольких попыток отослать ответный ACK-пакет на недоступный адрес большинство операционок ставят неустановленное соединение в очередь. И только после n-ой попытки закрывают соединение. Так как поток ACK-пакетов очень велик, вскоре очередь оказывается заполненной, и ядро дает отказ на попытки открыть новое соединение. Наиболее умные DoS-боты еще и анализируют систему перед началом атаки, чтобы слать запросы только на открытые жизненно важные порты. Идентифицировать такую атаку просто: достаточно попробовать подключиться к одному из сервисов. Оборонительные мероприятия обычно включают в себя:

Увеличение очереди "полуоткрытых" TCP-соединений:

# sysctl -w net.ipv4.tcp_max_syn_backlog=1024

Уменьшение времени удержания "полуоткрытых" соединений:

# sysctl -w net.ipv4.tcp_synack_retries=1

Включение механизма TCP syncookies:

# sysctl -w net.ipv4.tcp_syncookies=1

Ограничение максимального числа "полуоткрытых" соединений с одного IP к конкретному порту:

# iptables -I INPUT -p tcp --syn --dport 80 -m iplimit --iplimit-above
10 -j DROP
3. UDP-флуд.

Типичный метод захламления полосы пропускания. Основан на бесконечной посылке UDP-пакетов на порты различных UDP-сервисов. Легко устраняется за счет отрезания таких сервисов от внешнего мира и установки лимита на количество соединений в единицу времени к DNS-серверу на стороне шлюза:

# iptables -I INPUT -p udp --dport 53 -j DROP -m iplimit --iplimit-above 1
4. HTTP-флуд.

Один из самых распространенных на сегодняшний день способов флуда. Основан на бесконечной посылке HTTP-сообщений GET на 80-ый порт с целью загрузить web-сервер настолько, чтобы он оказался не в состоянии обрабатывать все остальные запросы. Часто целью флуда становится не корень web-сервера, а один из скриптов, выполняющих ресурсоемкие задачи или работающий с базой данных. В любом случае, индикатором начавшейся атаки будет служить аномально быстрый рост логов web-сервера.

Методы борьбы с HTTP-флудом включают в себя тюнинг web-сервера и базы данных с целью снизить эффект от атаки, а также отсеивание DoS-ботов с помощью различных приемов. Во-первых, следует увеличить максимальное число коннектов к базе данных одновременно. Во-вторых, установить перед web-сервером Apache легкий и производительный nginx – он будет кэшировать запросы и отдавать статику. Это решение из списка "must have", которое не только снизит эффект DoS-атак, но и позволит серверу выдержать огромные нагрузки. Небольшой пример:

# vi /etc/nginx/nginx.conf

# Увеличиваем максимальное количество используемых файлов

worker_rlimit_nofile 80000;

events {

# Увеличиваем максимальное количество соединений

worker_connections 65536;

# Использовать эффективный метод epoll для обработки соединений

use epoll;

}

http {

gzip off;

# Отключаем таймаут на закрытие keep-alive соединений

keepalive_timeout 0;

# Не отдавать версию nginx в заголовке ответа

server_tokens off;

# Сбрасывать соединение по таймауту

reset_timedout_connection on;

}

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

server {

listen 111.111.111.111 default deferred;

server_name host.com www.host.com;

log_format IP $remote_addr;

location / {

proxy_pass http://127.0.0.1/;

}

location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {

root /home/www/host.com/httpdocs;

}

}

В случае необходимости можно задействовать nginx-модуль ngx_http_limit_req_module, ограничивающий количество одновременных подключений с одного адреса (http://sysoev.ru/nginx/docs/http/ngx_http_limit_req_module.html). Ресурсоемкие скрипты можно защитить от ботов с помощью задержек, кнопок "Нажми меня", выставления кукисов и других приемов, направленных на проверку "человечности".
Универсальные советы

Чтобы не попасть в безвыходное положение во время обрушения DDoS-шторма на системы, необходимо тщательным образом подготовить их к такой ситуации:
Все сервера, имеющие прямой доступ во внешнюю сеть, должны быть подготовлены к простому и быстрому удаленному ребуту (sshd спасет отца русской демократии). Большим плюсом будет наличие второго, административного, сетевого интерфейса, через который можно получить доступ к серверу в случае забитости основного канала.
ПО, используемое на сервере, всегда должно находиться в актуальном состоянии. Все дырки - пропатчены, обновления установлены (простой, как сапог, совет, которому многие не следуют). Это оградит тебя от DoS-атак, эксплуатирующих баги в сервисах.
Все слушающие сетевые сервисы, предназначенные для административного использования, должны быть спрятаны брандмауэром ото всех, кто не должен иметь к ним доступ. Тогда атакующий не сможет использовать их для проведения DoS-атаки или брутфорса.
На подходах к серверу (ближайшем маршрутизаторе) должна быть установлена система анализа трафика (NetFlow в помощь), которая позволит своевременно узнать о начинающейся атаке и вовремя принять меры по ее предотвращению.

Добавь в /etc/sysctl.conf следующие строки:

# vi /etc/sysctl.conf

# Защита от спуфинга

net.ipv4.conf.default.rp_filter = 1

# Проверять TCP-соединение каждую минуту. Если на другой стороне - легальная
машина, она сразу ответит. Дефолтовое значение - 2 часа.

net.ipv4.tcp_keepalive_time = 60

# Повторить пробу через десять секунд

net.ipv4.tcp_keepalive_intvl = 10

# Количество проверок перед закрытием соединения

net.ipv4.tcp_keepalive_probes = 5

Следует отметить, что все приемы, приведенные в прошлом и этом разделах, направлены на снижение эффективности DDoS-атак, ставящих своей целью израсходовать ресурсы машины. От флуда, забивающего канал мусором, защититься практически невозможно, и единственно правильный, но не всегда осуществимый способ борьбы заключается в том, чтобы "лишить атаку смысла". Если ты заимеешь в свое распоряжение действительно широкий канал, который легко пропустит трафик небольшого ботнета, считай, что от 90% атак твой сервер защищен. Есть более изощренный способ защиты. Он основан на организации распределенной вычислительной сети, включающей в себя множество дублирующих серверов, которые подключены к разным магистральным каналам. Когда вычислительные мощности или пропускная способность канала заканчиваются, все новые клиенты перенаправляются на другой сервер (или же постепенно "размазываются" по серверам по принципу round-robin). Это невероятно дорогая, но очень стойкая структура, завалить которую практически нереально.

Другое более-менее эффективное решение заключается в покупке дорогостоящих хардварных систем Cisco Traffic Anomaly Detector и Cisco Guard. Работая в связке, они могут подавить начинающуюся атаку, но, как и большинство других решений, основанных на обучении и анализе состояний, дают сбои. Поэтому следует хорошенько подумать перед тем, как выбивать из начальства десятки тысячи долларов на такую защиту.
Кажется, началось. Что делать?

Перед непосредственным началом атаки боты "разогреваются", постепенно наращивая поток пакетов на атакуемую машину. Важно поймать момент и начать активные действия. Поможет в этом постоянное наблюдение за маршрутизатором, подключенным к внешней сети (анализ графиков NetFlow). На сервере-жертве определить начало атаки можно подручными средствами.

Наличие SYN-флуда устанавливается легко - через подсчет числа "полуоткрытых" TCP-соединений:

# netstat -na | grep ":80\ " | grep SYN_RCVD

В обычной ситуации их не должно быть совсем (или очень небольшое количество: максимум 1-3). Если это не так - ты атакован, срочно переходи к дропанью атакующих.

С HTTP-флудом несколько сложнее. Для начала нужно подсчитать количество процессов Apache и количество коннектов на 80-ый порт (HTTP-флуд):

# ps aux | grep httpd | wc -l

# netstat -na | grep ":80\ " | wc -l

Значения, в несколько раз превышающие среднестатистические, дают основания задуматься. Далее следует просмотреть список IP-адресов, с которых идут запросы на подключение:

# netstat -na | grep ":80\ " | sort | uniq -c | sort -nr | less

Однозначно идентифицировать DoS-атаку нельзя, можно лишь подтвердить свои догадки о наличии таковой, если один адрес повторяется в списке слишком много раз (да и то, это может говорить о посетителях, сидящих за NAT'ом). Дополнительным подтверждением будет анализ пакетов с помощью tcpdump:

# tcpdump -n -i eth0 -s 0 -w output.txt dst port 80 and host IP-сервера

Показателем служит большой поток однообразных (и не содержащих полезной информации) пакетов от разных IP, направленных на один порт/сервис (например, корень web-сервера или определенный cgi-скрипт).

Окончательно определившись, начинаем дропать неугодных по IP-адресам (будет гораздо больше эффекта, если ты сделаешь это на маршрутизаторе):

# iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --destination-port http -j
DROP

Или сразу по подсетям:

# iptables -A INPUT -s xxx.xxx.0.0/16 -p tcp --destination-port http -j
DROP

Это даст тебе некоторую фору (совсем маленькую; зачастую IP-адрес источника спуфится), которую ты должен использовать для того, чтобы обратиться к провайдеру/хостеру (с приложенными к сообщению логами web-сервера, ядра, брандмауэра и списком выявленных тобой IP-адресов). Большинство из них, конечно, проигнорируют это сообщение (а хостинги с оплатой трафика еще и порадуются - DoS-атака принесет им прибыль) или просто отключат твой сервер. Но в любом случае это следует сделать обязательно, – эффективная защита от DDoS возможна только на магистральных каналах. В одиночку ты справишься с мелкими нападками, направленными на истощение ресурсов сервера, но окажешься беззащитным перед более-менее серьезным DDoS'ом.

Как добавить Skype-контакты в Pidgin.

среда, 11 ноября 2009 г.
Один мой знакомый очень не любит Pidgin. Ну, не нравится он ему и все тут! Он - упертый поклонник SIM. А я, напротив, весьма не прочь использовать Pidgin для общения через ICQ и Jabber. Все ОК, но нет в Pidgin поддержки Skype… Вернее не было, а теперь вот есть! Рассмотрим способ добавления Skype-контактов в Pidgin.

Для добавления Skype-контактов в Pidgin, воспользуемся Skype API Plugin для Pidgin, который поможет нам реализовать наше “желание”.

Скачаем его, выполнив в консоли команду:

$ wget http://eion.robbmob.com/skype4pidgin.deb

Установим пакет skype4pidgin, выполнив:

$ sudo dpkg -i skype4pidgin.deb

Теперь, для корректной работы, нам необходимо выкачать и добавить в систему библиотеку libskype.so.

Для 32-битных систем, она доступна здесь. Владельцам 64-битных нужна эта ссылка.

После того, как мы успешно скачали необходимую нам библиотеку (например при помощи той же команды wget), необходимо поместить ее в каталог /usr/lib/purple-2/.

Теперь, когда все сделано, просто перезапустите Pidgin и выберите в его опциях возможность использования Skype. И это будет работать!

Удаление файлов конфигурации от удаленных ранее пакетов

Посмотреть список пакетов, которые были удалены, но файлы конфигураций остались, можно с помощью
# dpkg -l | grep '^rc'

а удалить их:
# dpkg -P имя_пакета

или для большого количества:
# dpkg -l | awk '/^rc/{print $2}' | xargs dpkg -P

Типы RAID массивов

Технология обеспечения отказоустойчивости с помощью массивов жестких дисков называется RAID - Redundant Array of Inexpensive Disks (избыточный массив недорогих дисков). Наличие избыточности, однако, не гарантирует 100% надежности хранения данных. При выходе системы из строя (например, из-за поломки RAID-контроллера) восстановление данных с RAID массива является более сложной и трудоемкой задачей, чем восстановление информации с отдельного жесткого диска. Она занимает длительный отрезок времени и требует значительных трудозатрат. Иногда для восстановления информации с RAID массива даже приходится писать специальные программные модули, позволяющие «собрать» испорченные данные, распределенные по многим жестким дискам.



Рассмотрим основные характеристики уровней RAID массивов с точки зрения надежности и сложности восстановления данных.

RAID 0
Массив RAID 0 по существу не является отказоустойчивой системой, но способен значительно повысить производительность. В обычной системе данные последовательно записываются на каждый диск raid массива, пока не будет исчерпан его объем. Массив RAID 0 распределяет данные по дискам массива следующим образом. Если, например, в RAID0 используются четыре диска , то данные записываются на первую дорожку первого диска, затем на первую дорожку второго диска, первую дорожку третьего и первую дорожку четвертого. Затем данные записываются на вторую дорожку первого диска и т. д. Такое распределение данных позволяет одновременно читать и записывать данные на четырех дисках и тем самым увеличивает производительность системы. С другой стороны, если один из дисков RAID 0 выйдет из строя, восстановление данных придется делать тоже на всех четырех дисках. Таким образом, технология RAID 0 является самой быстрой, но и самой ненадежной с точки зрения сохранения информации.

RAID 1
Массив RAID 1 реализует метод зеркаливания/дуплексирования данных, создавая для каждого диска массива вторую копию данных на отдельном диске. Дуплексирование помимо данных на диске дублирует также адаптерную плату и кабель, обеспечивая еще большую избыточность. Метод хранения двух копий данных - надежный способ реализации отказоустойчивой дисковой подсистемы, и он нашел широкое применение в современных архитектурах хранения данных.

RAID 2
Массив RAID 2 распределяет данные на жестких дисках массива побитно: первый бит записывается на первом жестком диске, второй бит - на втором жестком диске и т. д. Избыточность обеспечивается за счет нескольких дополнительных дисков, куда записывается код коррекции ошибок. Эта реализация дороже, поскольку требует больших накладных расходов: raid массив с числом основных дисков от 16 до 32 должен иметь три дополнительных жестких диска для хранения кода коррекции. Массив RAID 2 обеспечивает высокую производительность и надежность, но его применение ограничено главным образом рынком компьютеров для научных исследований из-за высоких требований к минимальному объему дискового пространства массива. В сетевых файловых серверах этот метод в настоящее время не используется.

RAID 3
Массив RAID 3 распределяет данные на жестких дисках массива побайтно: первый байт записывается на первом жестком диске массива, второй байт - на втором жестком диске и т. д. Избыточность обеспечивает один дополнительный жесткий диск, куда записывается сумма данных по модулю 2 (XOR) для каждого из основных дисков массива. Таким образом, массив RAID 3 разбивает записи файлов данных, храня их одновременно на нескольких жестких дисках и обеспечивая очень быстрые чтение и запись. XOR-сегменты на дополнительном диске позволяют обнаружить любую неисправность дисковой подсистемы, а специальное ПО определит, какой из дисков массива вышел из строя. Использование побайтного распределения данных позволяет выполнять одновременное чтение или запись данных с нескольких дисков для файлов с очень длинными записями. В каждый момент времени может выполняться только одна операция чтения или записи.

RAID 4
Массив RAID 4 аналогичен массиву RAID 3, за тем исключением, что данные распределяются на жестких дисках по блокам. Для хранения XOR-сегментов также используется один дополнительный диск в raid массиве. Такая реализация raid массива удобна для файлов с очень короткими записями и большей частотой операций чтения по сравнению с операциями записи на raid, поскольку в этом случае при подходящем размере блоков на диске возможно одновременное выполнение нескольких операций чтения. Однако по-прежнему допустима только одна операция записи на дисковый массив в момент времени, так как все операции записи используют один и тот же дополнительный диск для вычисления контрольной суммы в raid массиве.

RAID 5
В массиве RAID 5 как и RAID 4, использует поблоковое распределение данных, но XOR-сегменты распределены по всем жестким дискам массива. Это позволяет выполнять несколько операций записи на диски одновременно. Массив RAID 5 также удобен для файлов с короткими записями.

RAID 7
Массив RAID 7 является разработкой компании Storage Computer.Массив RAID 7 не является, по существу, уровнем RAID, поскольку не предлагает новых способов организации данных. Основные изменения коснулись способов доступа к данным raid массива. Все жесткие диски, которых может быть до 48 (46 - непосредственно для данных, 1 для четности, 1 - в горячем резерве), подключены к индивидуальным каналам, что позволяет организовать асинхронный доступ к данным raid массива. Система поддерживает подключения к 12 хостам, обмен данными с которыми тоже осуществляется асинхронно. Доступом к каждому жесткому диску и операциями с каждым хостом заведует свой интеллектуальный контроллер с ассоциированным буфером. В системе имеется объединенный кэш и процессор управления доступом, работающий в системе реального времени. В случае отказа жестких дисков или других элементов запрос помещается в кэш, в то время как система перестраивает данные.Массив RAID 7 поддерживает все традиционные уровни RAID, но преимущественно ориентируется на уровни RAID 3 и RAID5, автоматически адаптируя способ организации хранения данных под конкретные задачи.

RAID 10
Массив RAID 10 объединяет технологии RAID 1 и RAID 0. Жесткие диски сначала зеркалируются в массив RAID 1, а потом используется попеременная запись RAID 0

Cron и почта. Красивые и правильные отчёты о выполнении скриптов

Сегодня хочется поговорить о правильном оповещении себя любимого по почте о ходе выполнения скриптов в cron'е, т.к. на мой взгляд, самым главным в администрировании является молниеносная реакция на произошедшие события и ошибки.

Я использую планировщик сron в повседневно практике как средство резервного копирования, как средство мониторинга логов и выполнения других скриптов =). И в этом случаем для меня очень важен результат таких действий. Ведь может закончится место на диске, не правильно выставиться права на файлы после перезагрузки да и просто «коллеги» могу напакостить.
Сразу оговорю условия. Я буду рассматривать задачу с точки зрения шлюза в интернет, так как в этом случае наличие на нём установленного и настроенного почтовика стремится к нулю.
Так вот, cron по умолчанию отсылает результаты выполнения команд (проще говоря, то что должно выводится в консоль) на локальную почту пользователя. Пользы от такого довольно мало. Что бы поменять почту, на которую будут отсылаться письма, нужно определить переменную MAILTO в crontab'е:

$ crontab -e

MAILTO = user@ya.ru
# m h dom mon dow command
*/1 * * * * echo "123"; date

Однако, подождав, мы не получим ничего на нашу почту. Почта не ушла потому что у нас нет настроенного smtp сервера. И устанавливать такие монстры как sendmail, postfix и exim мы не будем. Зачем нам всё это на маленьком роутере, да и безопасности эти демоны ни капельки не добавят.

В этом случае лучшим решением, на мой взгляд, является msmtp. Маленькая программка, единственным назначением которой, является пересылка почты используя «большие» smtp сервера, к примеру gmail. Ставим:

$ sudo apt-get install msmtp

Конфигурируем на использование учётки на gmail:

$ nano ~/.msmtprc

defaults
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

account gmail
host smtp.gmail.com
port 587
protocol smtp
auth on
from user@gmail.com
user user@gmail.com
password passWoRd

# Set a default account
account default : gmail

Не забываем права:

$ chmod 600 ~/.msmtprc

От этой учётки (той, которую указали в конфиге) мы будем получать письма.
Тепрь делаем финт ушами и создём симлинк на sendmail:

$ sudo ln -s /usr/bin/msmtp /usr/sbin/sendmail

Сейчас при выполнении команды из crontab'а к нам на почту (ту что мы указали в MAILTO) благополучно приходит почта с того адреса, который мы указали в конфиге msmtprc. =)
Ещё один маленький нюанс. Мы все помним, что есть три стандартных потока: stdin stdout и stderr. По умолчанию из крона отсылаются два потока: стандартный поток вывода и стандартный поток вывода ошибок. Для того чтобы мы получали только вывод ошибок на почту необходимо поменять строку в crontabe на следующую:

*/1 * * * * echo "123" > /dev/null

Так мы отправили весь стандартный вывод в «бездну».
И наоборот — чтобы получать только вывод скрипта и никаких ошибок:

*/1 * * * * echo "123" 2>/dev/null

Напомню, что 2 — это поток вывода ошибок.
Ну и напоследок, отправляем всё в небытие (не по теме, но может кому-то пригодится):

*/1 * * * * echo "123"> /dev/null 2>&1

Тут мы отправили стандартный вывод в /dev/null и тудаже вывод ошибок.
Вернёмся к почте. При такой отправке результатов к нам на почту приходят письма примерно с такой темой:

Cron echo "123" 2> /dev/null

Что не есть информативно. Куда лучше было бы получать письма, в теме которых было что-то красивое и удобное. Однако для этого одним только MAILTO из crontab'а не обойтись.
Здесь нам понадобится команда mail. Если у вас её нет, тогда поставим heirloom-mailx:

$ sudo apt-get install --no-install-recommends heirloom-mailx

Теперь нужно указать в конфиге mail, что мы будем использовать msmtp.

$ nano ~/.mailrc

set sendmail="/usr/bin/msmtp"

Проверяем отправку почты

$ mail -s "Здесь будет тема письма." user@ya.ru

Далее пишем текст письма и нажимаем Ctr-D (^D ;).
Ну и собственно кронтаб:

*/1 * * * * echo "123" | mail -s "Проверка крона" user@ya.ru

Или вот так, если логи/текст у нас уже сформированы и хранятся в файле super_logs.txt

*/1 * * * * mail -s "Проверка крона" user@ya.ru < super_logs.txt

Вместо вывода

Каждый из способов чем-то лучше другого. Для себя же я отсановился на варианте отправки результатов выполнения скрипта через утилиту mail, а ошибки принимаю через директиву MAILTO.

Техники запоминания

1. Метафора. Соединяйте факты с чем-то, что вы уже понимаете. Связывайте абстрактные идеи с реальными опытами. Например, представьте, что производная – это спидометр машины.

2. Диаграмма. Диаграммы и схемы – это материальное выражение связей между идеями, которые возникают в вашем разуме. Вы можете составить несколько разных схем для того, чтобы запомнить одну и ту же информацию, если посмотрите на неё с разных сторон. В этом случае вам удастся вспомнить все, даже если вы забудете одну из ассоциаций.

3. Различие. Сыграйте на различии – запоминайте похожие вещи по тому, в чем они различны. Не нужно строить идеальных схем – важно только создать набросок в памяти, чтобы в нужную минуту вспомнить его и получить нужные факты. Это помогает даже тогда, когда вы не можете придумать метафору или нарисовать схему. Например: Конфуций жил в то же время, что и Сократ, но в Древнем Китае. Или: Ускорение – это как земное притяжение, только приложенное в любом направлении.

4. Визуализация. Другой путь сделать идею более конкретной – представить её. Причем вовсе не обязательно представлять все так, как это изложено – придумывайте персонажей и ситуации. Пусть страны на мировой арене будут членами какого-то общества, а мировая история – всего лишь разговором и несколькими жестами за их ужином в столовой. Можно заменить это на воссоздание любых других чувств – слуха, обоняния, осязания и т.д.

5. Объяснить ребенку. Научить чему-то – лучший способ этому научиться. Что бы вы сейчас ни учили, подумайте, как вы объяснили бы это пятилетнему ребенку? Это заставит вас упростить предмет и свести мысли к конкретным высказываниям – а значит, связать их в стройную схему и запомнить.

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

7. Вместе. Одна голова хорошо, а две лучше. Работа в команде – это множество различных взглядов на одну проблему, а значит, в несколько раз больше связей. Мозговой штурм и групповые обсуждения – очень полезные вещи, которые помогают нам обучаться быстрее.

Правило 70%. Еще одно полезное правило: приступайте к следующему разделу, освоив 70% материала. Это позволит вам достичь быстрого прогресса, не зацикливаясь на деталях, которые можно выучить потом или узнать из контекста. Вы будете постоянно напряжены, чувства пресыщения информацией не возникнет. Например, добейтесь семидесятипроцентного понимания формулы и сразу начинайте учить доказательство. Выучите новые слова на 70% и составляйте диалог. Так запоминание станет проще, быстрее и интереснее.

Skype firewall rules

четверг, 15 октября 2009 г.
My first comment is with regards to the last quote from the Skype help site that worms or trojans cannot be transmitted through this application. That may very well be true. You must remember that making Skype a Trusted Application or just opening up a wide port range to Skype, ONLY AFFECTS SKYPE. In other words, if a worm does sense and try to take advantage of this open port, it will find the listener 'Skype' unresponsive. So trojan or worm transmission should not be a serious consideration. However with that said, it is still important that you run a good anti-virus if also an anti-trojan if you have one. This is just a precaution though.

After reading your comments and Skype FAQ to which you referred, I recommend that you modify your Skype Rules as follows:

When you are finished, these rules should be the only rules in your ruleset for Skype. Please create the rules in the exact order given here.

[Skype HTTP Rule]
Where the protocol is: TCP
Where the direction is: Outbound
Where the REMOTE PORT is: 80
Allow It

[Skype Outgoing TCP Rule]
Where the protocol is: TCP
Where the direction is: Outbound
Where the REMOTE PORT is: 1024-65535
Allow It

[Skype Remote Access UDP Rule]
Where the protocol is: UDP
Where the REMOTE PORT is: 1024-65535
Allow It

[Skype Local Access UDP Rule]
Where the protocol is: UDP
Where the LOCAL PORT is: 1024-65535
Allow It

[Skype Outbound TCP Coverage Rule]
Where the protocol is: TCP
Where the direction is: Outbound
Deny It

Note: This rule will BLOCK all outbound TCP connections except for the connections that you have defined above. This will help avoid uncecessary rules creation popups for outbound TCP connections. So, it is very necessary for you to have the rules in the exact order that I have given here.

[Skype Inbound TCP Coverage Rule]
Where the protocol is: TCP
Where the direction is: Inbound
Deny It

Note: This rule will BLOCK all inbound TCP connections except for the connections that you have defined above. This will help avoid uncecessary rules creation popups for inbound TCP connections. So, it is very necessary for you to have the rules in the exact order that I have given here.

[Skype Inbound UDP Coverage Rule]
Where the protocol is: UDP
Deny It

Note: This rule will BLOCK all UDP connections except for the connections that you have defined above. This will help avoid uncecessary rules creation popups for UDP connections. So, it is very necessary for you to have the rules in the exact order that I have given here.

Note: This is a little different than the way I have generated TCP and UDP Coverage Rules in the past. The main difference is that I have included a separate rule for inbound and outbound TCP traffic coverage. The only reason is because the latest version of Outpost, soon to be released, now requires that TCP rules have direction. Previously, I just specified one TCP rule without direction. However with the pending release of the next version of Outpost this is no longer possible and it is necessary to start instructing users to write separate TCP outbound and inbound Coverage rules for applications that they want to secure from further rules creation popups.

I hope that ruleset works for you. I recommend that you give it a try and report your results.

Отключаем Supernode в Skype

Как известно, Skype использует p2p сеть для обмена данными. Если у Вас достаточно мощный компьютер, то Skype может решить сделать Вас Супернодом и, как следствие, скайп-трафик других участников сети будет идти через Вас.
Начиная с версии 3.0 программы, появилась возможность отключить такую «фичу», что бы чужой трафик скайпа не шёл через Вас.
Для этого необходимо залезть в реестр и создать там ветку:

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Skype]
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Skype\Phone]
"DisableSupernode"=dword:00000001


После перезагрузки системы новая настройка вступит в силу.

Установка webmin

среда, 14 октября 2009 г.
Получаем ключ

cd /root
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc

Добавляем источник приложений

vi /etc/apt/sources.list

В текстовом редакторе добавляем строку

deb http://download.webmin.com/download/repository sarge contrib

Сохраняем, закрываем редактор. Обновляем и устанавливаем

apt-get update
apt-get -y install webmin

Осталось только открыть любимый браузер, и перейти по адресу https://localhost:10000/

декодер BIOS

четверг, 17 сентября 2009 г.
Формат команды dmidecode:
dmidecode- type {KEYWORD / Number }
В качестве ключевого слова (KEYWORD) могут использоваться:
bios
system
baseboard
chassis
processor
memory
cache
connector
slot
Для получения более подробной информации вы можете использовать один извозможных типов DMI, при этом команда dmidecode приобретет следующий вид:
$ dmidecode -type {Number}
где {Number} - цифровое обозначение типа DMI.

типы DMI с их кратким описанием:
0 BIOS
1 Система
2 Материнская плата
3 Корпус
4 Процессор
5 Контроллер памяти
6 Модуль памяти
7 Кэш-память
8 Разъемы портов
9 Системные разъемы
10 Интегрированные устройства
11 OEM строка
12 Опции системной конфигурации
13 Язык BIOS
14 Групповые ассоциации
15 Журнал системных событий
16 Массив физической памяти
17 Устройство памяти
18 32-битные ошибки памяти
19 Отображаемый адрес массива памяти
20 Отображаемый адрес устройства памяти
21 Встроенное указывающее устройство
22 Портативная батарея
23 Перезапуск системы
24 Аппаратная безопасность
25 Система управления электропитанием
26 Датчик напряжения
27 Охлаждающее устройство
28 Датчик температуры
29 Датчик текущих параметров электропитания
30 Внешний удаленный доступ
31 Службы целостности загрузки
32 Загрузка системы
33 64-битовые ошибки памяти
34 Управляющее устройство
35 Компоненты управляющего устройства
36 Пороговые данные управляющего устройства
37 Канал памяти
38 IPMI Устройство
39 Блок питания
например, для отображения информации о блоке питания, введите:
# dmidecode --type 39
для отображения информации о процессоре, введите:
# dmidecode --type processor

vim: избавляемся от dos-овых концов строк (\r\n -> \n)

четверг, 10 сентября 2009 г.
Если vim распознал dos-овые концы строк, и не показывает ^M,
:set ff=unix
:w


Если vim автоматически не распознал DOS line ends, то в конце строк будут символы ^M. Удалить их можно простой заменой:
:%s/^M//g

Символ ^M при этом вводится как Ctrl-V Ctrl-M.

10 непреложных законов безопасности

10 непреложных законов безопасности.



  1. Если злоумышлненник может убедить вас запустить на вашем компьютере свою программу, это больше не ваш компьютер.

  2. Если злоумышленник может вносить изменения в операционную систему на вашем компьютере, это больше не ваш компьютер.

  3. Если злоумышленник имеет неограниченный физический доступ к вашему компьютеру, это больше не ваш компьютер.

  4. Если вы разрешаете злоумышленнику загружать программы на ваш веб-сайт, , это больше не ваш веб-сайт.

  5. Слабые пароли сводят на нет сильную безопасность.

  6. Компьютер безопасен настолько, насколько надежен его администратор.

  7. Зашифрованные данные безопасны настолько, насколько безопасен ключ шифрования.

  8. Антивирус без обновлений едва ли лучше отсутствия антивируса.

  9. Абсолютная анонимность вряд ли возможна: в обычной жизни или в сети.

  10. Технологии - не панацея.


10 непреложных законов безопасного администрирования.



  1. Никто не верит, что плохое случится именно с ним. Пока это не случается именно с ним.

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

  3. Если вы не устанавливаете обновления безопасности, ваша сеть недолго останется вашей.

  4. Обновления безопасности не помогут компьютеру, безопасностью которого не занимались с самого начала.

  5. Постоянная бдительность - цена безопасности.

  6. Всегда есть кто-то, кто пытается угадать ваш пароль.

  7. Наиболее безопасная сеть - хорошо-администрируемая сеть.

  8. Сложность в защите сети прямо пропорциональна её сложности.

  9. Безопасность это не отсутствие рисков, а управление ими.

  10. Технологии - не панацея.


9 шагов по защите вашего компьютера и личной информации на нём.



  1. Используйте безопасные пароли.

  2. Поддерживайте актуальность обновлений операционной системы и программного обеспечения.

  3. Установите и регулярно обновляйте антивирус.

  4. Используйте средства сетевой безопасности.

  5. Остерегайтесь почтовых вложений и скачивания файлов из Интеренет.

  6. Регулярно делайте резервные копии ваших данных.

  7. Используйте альтернативные веб-браузеры.

  8. Удалите всё неиспользуемое программное обеспечение.

  9. Ограничьте доступ к важной информации.

Логирование писем, отосланных через функцию mail()

воскресенье, 9 августа 2009 г.

Если у вас свой сервер (или хостинг-сервер), на котором расположено множество различных проектов, то, возможно, вы сталкивались со следующей проблемой: из-за уязвимости в скрипте на один из проектов попал вредоносный код, занимающийся рассылкой спама. Найти виновника порой бывает весьма проблематично. Так что оптимальным выходом будет просто логировать действия функции mail()

Все крайне просто
Создайте файл /usr/local/bin/phpsendmail и поместите в него следующий код:

#!/usr/bin/php
/**
This script is a sendmail wrapper for php to log calls of the php mail() function.
Author: Till Brehm, www.ispconfig.org
*/
$sendmail_bin = '/usr/sbin/sendmail';
$logfile = '/var/log/mail.form';
//* Get the email content
$logline = '';
while ($line = fgets(STDIN)) {
if(stristr($line,'to:') || stristr($line,'from:')) $logline .= trim($line).' ';
$mail .= $line;
}

//* compose the sendmail command
$command = 'echo "'.$mail.'" | '.$sendmail_bin.' ';
for ($i = 1; $i < $_SERVER['argc']; $i++) {
$command .= $_SERVER['argv'][$i].' ';
}

//* rotate log if it gets too big
if(is_file($logfile) && filesize($logfile) > 10000000) {
if(is_file($logfile.'.old')) unlink($logfile.'.old');
exec('cp -pf '.$logfile.' '.$logfile.'.old');
exec('cat /dev/null > '.$logfile);
}

//* Write the log
system('echo "'.date("Y-m-d H:i:s").' '.$_ENV['PWD'].' '.$logline.'" >> '.$logfile);

//* Execute the command
return shell_exec($cmd);


Это логгер всех сообщений с ротированием лог-файла.
Не забудьте указать верный путь к sendmail в переменной $sendmail_bin

Затем сделайте скрипт исполняемым

chmod +x /usr/local/bin/phpsendmail

Создайте лог-файл, смените владельца на пользователя, от которого запускается веб-сервер и дайте ему права на запись

touch /var/log/mail.form
chown www-data:www-data /var/log/mail.form
chmod 0700 /var/log/mail.form

Приведите ваш конфигурационный файл php.ini к следующему виду (измените параметр sendmail_path)

[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/local/bin/phpsendmail

И перезапустите веб-сервер

/etc/init.d/apache2 restart

Проверить логгер можно с помощью нехитрого скрипта:

mail('yourname@yourdomain.com','This is a test message subject','This is a test message body');
echo 'Mail sent.';


Запустите этот сценарий через web и проверьте лог:cat /var/log/mail.form

Оригинал: http://howtoforge.org/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam

Теории мотиваций

среда, 5 августа 2009 г.


В качестве предисловия


Проблема мотивирования труда является одной из самых острых проблем, стоящих перед современным российским предприятием. Как правило, отечественные руководители рассматривают систему мотивации как инструмент, базирующийся на персональных выплатах работнику.
Согласно принятым системам мотивации на отечественных предприятиях работник получает: 
• Базовую заработную плату в зависимости от иерархического уровня управления; 
• Премии и бонусы по результатам деятельности подразделения за отчетный период; 
• Премии и бонусы по результатам личной деятельности работника (личные бонусы и доплаты за исполнение проектов, комиссионные, поддержка обучающихся, и т.д.); 
• Премии и бонусы по результатам деятельности организации в целом (годовые бонусы);
Но подобные схемы теряют свою эффективность, связано это со следующими факторами: 

Во-первых, при регулярной выплате бонусов, комиссионных и премий, ценность и мотивирующее воздействие резко снижается – работник привыкает к ним, расценивает их как форму заработной платы, и любое снижение таких, по сути дополнительных, выплат воспринимается как унижение со стороны работодателя. 

Во-вторых, начальное мотивирующее воздействие переменной части оплаты труда, как правило, мотивирует творческое начало работника. Но, на практике, активное творчество работодателем практически никогда не требуется. Творчество воспринимается как досадное недоразумение, мешающее текущей регулярной работе. Творчество, с точки зрения современного российского собственника-менеджера, может проявлять либо сам собственник, либо высший руководитель, ибо они и только они “лучше знают и несут ответственность”. Возникает конфликт на базе взаимного непонимания, мотивирующее воздействие компенсируется негативным отношением к творческим порывам. 

Ну, и когда заканчивается «кинетическая энергия» материальной мотивации, руководители начинают искать иные пути, т.е. “моральные поощрения”. В 85% случаев сводятся к личной похвале и в 10% случаев – к похвале (грамоте, благодарности и проч.) перед лицом коллег. 

Каким бы банальным не казалось личное общение, но это действует, и вот почему:
• Фактор внимания и защиты со стороны высшего руководителя — есть с кем пообщаться, есть на ком проверить свои идеи, есть кому “поплакаться в жилетку” и попросить защиты; 
• Фактор “своего парня” — с таким руководителем хочется работать, его хочется поддержать и неприлично обманывать; 
• Фактор сопричастности – близость к центру принятия решений, опережающая информация и обладание конфиденциальной информацией существенно поднимают статус работника; 
• Фактор влияния – близкие контакты с центром принятия решений провоцируют “синдром советника”, при котором работник стремится оказать эмоциональное либо интеллектуальное воздействие на принимаемые решения. Если такое удается, работник начинает влиять на руководителя в целях укрепления своего статуса, придавая себе вес как лидеру неформальной группы, возможно даже еще не сформированной.

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

Это связано с тем, что такой вид поощрения несет в себе несколько факторов, которые могут быть использованы в управлении: 
• Фактор статуса – если работника публично похвалили, то значит, что этот работник как бы становится ближе к руководителю, получает моральное право на некую лидирующую позицию; 
• Фактор команды – тот, кого поощрили публично, начинает себя чувствовать членом “команды”, у него появляется чувство ответственности за общий результат; 
• Фактор выделения – похвалив кого-либо, руководитель разрушает неформальные связи такого работника, особенно, если работник был выделен на фоне негативного отношения к остальным членам группы; 
• Фактор целеполагания – публичная похвала, фактически, является отражением целей руководителя, показывает работникам “линию партии и правительства”. 

Различные теории мотивации

Для разрешения “проблемы голодного художника” многие исследователи применяли различное выделение потребностей (мотивирующих факторов) в обособленные группы. К известным базовым теориям можно отнести: 
• “Теорию СВР” Алдерфера, разделившего потребности на потребности в существовании “С”, потребности взаимосвязей “В” и потребности роста “Р”. Движение между потребностями может происходить как “вверх”, так и “вниз”. Таким образом может быть описан “голодный художник”, но для построения единой системы, применимой к реальной группе людей следует описать ценности каждого из них, что очень трудоемко. Кроме того, система ценностей человека в течение жизни меняется, и такие описания следует повторять; 
• “Теорию приобретенных потребностей” МакКелланда, выделившего три группы потребностей, приобретенных человеком с опытом – потребность в причастности, потребность в успехе и потребность во власти. Это – потребности высшего уровня, существующие параллельно и независимо друг от друга. За счет их параллельности и независимости достигается “отстройка” от иерархии, т.е. последовательности, но недостатком этой теории является ее применимость исключительно к высшему управленческому звену организации; 
• “Мотивационно — гигиеническую теорию” Герцберга, выделившего две группы факторов – “гигиенических” и “мотивирующих”, что, практически, повторяет иерархичность потребностей. Кроме того, результаты воздействия гигиенических и мотивирующих факторов различны для разных индивидуумов, границы между ними размываются. Несмотря на существенный вклад в понимание мотивации, “гигиеническая теория” так и осталась чисто теоретическим вкладом в понимание специалистами основ менеджмента. Справедливости ради надо отметить, что теория Герцберга стала основой для большого количества других мотивационных теорий, которые можно обобщить термином “гигиенические”.
Список теорий может быть продолжен, но, так или иначе, подавляющее большинство авторов (Адамс, Портер, Лоуренс, Врум, Лок, Гриффин, Хакмен, Олдхэм и др.) приходит к выводу, что мотивирующие факторы, потребности и ожидания существуют параллельно, не противореча друг другу, а являясь взаимным дополнением, причем для каждого индивидуума сочетание факторов мотивации и потребностей уникально.
Но самыми интересными по мнению большинства менеджеров являются следующие две теории: иерархическая система потребностей Маслоу и теория мотивации персонала по Л. Р. Хаббарду.

Теория Маслоу

Он довольно глубоко описан почти во всех учебниках по менеджменту, поэтому опишу кратко.
Сам Маслоу выделяет 5 уровней потребностей. Вот они:
1. Физиологические: голод, жажда, половое влечение и т. д.
2. Экзистенциальные: безопасность существования, комфорт, постоянство условий жизни.
3. Социальные: социальные связи, общение, привязанность, забота о другом и внимание к себе, совместная деятельность.
4. Престижные: самоуважение, уважение со стороны других, признание, достижение успеха и высокой оценки, служебный рост.
5. Духовные: познание, самоактулизация, самовыражение.
Смысл пирамиды в том, что когда «базовые» потребности удовлетворены, тогда человек может быть мотивирован следующим уровнем. А пока нет – извините…
Таким образом, Маслоу предлагает менеджерам выяснять на каком уровне находится его подчиненный (при помощи анкет, тестов и пр) и в соответствии с этими данными выбирать, какой стимул выбрать для мотивации конкретного человека. 

Теория Хаббарда

В чем-то она перекликается с теорией Маслоу, но есть и значимые отличия. Многие менеджеры отмечают ее большую практическую применимость. Хаббард выделяет четыре уровня степеней мотивации.

Первый (самый низкий) уровень мотивации – это деньги. 
Факт очевидный, нет смысла делать из него тайну или пытаться каким-нибудь образом завуалировать. Думаю, стоит отметить такой интересный момент: на более высоких уровнях мотивации сохраняются отголоски более низких уровней, но они перестают быть чем-то значительным. То есть человек с наивысшим уровнем мотивации в любом случае будет, хотя бы немного, заинтересован в деньгах.

Уровень второй: личные достижения.
Очевидно, что это более высокий уровень. Человек чувствует себя значимым, достигнув чего-то, радуется победам и испытывает самоуважение. К этому уровню относятся карьерный рост, успехи в проектах, выигранные соревнования. К этой же категории относится желание получать статус в группе, это не обязательно карьера. Много успешных руководителей мотивируют сотрудников на этом уровне. Например, некоторые вводят в организации звания, сотрудники за личные заслуги получали повышения не только по линии работы, им могли добавить «звезд на погоны» и т.д.

Третий уровень: личная убежденность. 
Этот уровень выходит за рамки потребностей самого человека и включает в себя причастность к чему-то значимому для окружающих. Человек уверен в том, что его организация, деятельность, продукция или услуги – самые лучшие. Он убеждён, что цели его компании превосходны, и соответствуют его личным целям. Он уверен в своей правоте. Такой сотрудник будет работать даже на низкооплачиваемой должности без перспектив роста, и при этом его мотивация будет выше, чем у карьериста. И он в большей степени будет способен на подвиги ради своей компании. Как пример: «Я работаю в команде самого Тарантино!»

Четвертый уровень: долг. 
Это наивысший уровень мотивации. Психологи не смогли его описать, хотя он очевиден, так как вряд ли найдётся хоть один известный психолог, который бы был поглощен чувством долга. Наивысшая движущая сила для психолога – личные достижения, что наглядно демонстрирует пирамида Маслоу. Деятель науки, искусства, религии, философ, владелец бизнеса, военный. Где угодно можно обнаружить проявление неподдельного чувства долга перед другими. И можно наглядно продемонстрировать, что никто не работает настолько упорно и не относится к сложностям и лишениям настолько свысока, как человек, уровень мотивации которого — долг. Вспомните самураев, с их культом чувства долга. Или солдат Красной армии, воевавших за Родину против более обеспеченной и обученной армии Германии.

Поощрения и непоощрения — методы мотивации персонала по Хаббарду

Знаменитый Уолт Дисней, основатель концерна по производству мультфильмов, когда хотел презентовать свои новые идеи и проекты, собирал для обсуждения всех сотрудников и начинал увлеченно рассказывать о своих замыслах. Дисней настолько живо и ярко описывал перспективы, что сотрудники буквально загорались идеей и вносили свои дополнения. А за удачную инициативу или предложение сотрудники могли ожидать поощрение. На то время это было новшеством, но результат превосходил все ожидания. Итогом таких обсуждений становилось четкое понимание сотрудников того, что от них ожидает руководство, в лице Уолта, и начало работ над проектом с интересом и энтузиазмом. Использование системы мотивации, а в частности поощрения и наказания, Дисней создал сплоченную команду единомышленников, которая оставалась верной компании в ее взлеты и падения.
Поощрение (позитивная мотивация) и наказание (негативная мотивация), это не совсем то, о чем пойдет дальше речь. Наказание – это, все-таки, «мера воздействия, применяемая к кому-либо за вину, проступок, преступление» (Большой толковый словарь русского языка), а непоощрение – это отсутствие поощрения, лишения его сотрудника и более гуманный и эффективный способ мотивации. Но обо всем по порядку.
Для эффективного использования системы существует два наиболее важных правила.
1) Работники должны знать правила «игры». Я думаю, все знают, что в футболе есть жесткие правила об игровом времени, числе игроков, количеству замен и т.д. Нарушение этих правил влекут за собой наказания – штрафы, удаления с поля, дисквалификация и другое. То же самое и в организации. В компании должна быть определенная организационная политика, т.е. правила и законы на которых строится работа внутри организации. Соответственно, нарушение этой политики влечет за собой наказание. Сотрудники должны четко знать и понимать, за что их будут хвалить, а за что «бить».
Очень важным моментом, является соблюдение, и выполнение правил «игры», которые Вы установили для оптимизации рабочего процесса. Иначе, зачем они тогда нужны. Мой знакомый рассказывал, что на одном заводе он видел такие «забавные» надписи: «не выключишь свет – уволим», «не выбросишь мусор – уволим», «опоздаешь – уволим». Уходя, он поинтересовался у одного сотрудника завода: «Неужели действительно увольняют?», ответом было: «Еще как!». При этом на предприятии царила чистота и порядок. Поэтому, установив даже такие «крутые» правила им нужно следовать, иначе получается, что одного уволили, другого оставили за одну и ту же ошибку. Так дело не пойдет и будет хаос и игра без «правил». 
2) «Когда вы вознаграждаете падающие статистики и наказываете растущие, вы получаете падающие статистики» — классик американского менеджмента Л. Рон Хаббард. Если будете наказывать производство и поощрять непроизводство, то мы будем получать непроизводство. 

Главные параметры для поощрений и непоощрений — это показатели деятельности сотрудника, отдела, отделения и всей компании. Удобно и просто использовать для измерения этих показателей графики статистик, которые отражают количественную величину того, что работник выполнил. Если статистики растут, то сотрудник может ожидать вознаграждения, если падают, то наказания. Поощрять и непоощрять сотрудника за его показатели можно в денежной (премии, бонусы и т.д) и не денежной (билеты в кино, поход в ресторан, подарки и т.д.) форме.

Иcточник


Мысли о работе

среда, 29 июля 2009 г.
Чем руководствоваться при выборе работы:
- проффесиональные перспективы
- материальные перспективы
- внутренний комфорт
- внешняя значимость

Что обговорить при приеме на работу:
- функции
- ресурсы
- статус
- компенсации

Что не отберет работодатель:
- выплаченные деньги
- знания
- умения
- опыт
- связи 

Настройка .vimrc

вторник, 28 июля 2009 г.
Настроим кол-во символов пробелов, которые будут заменять \t
set tabstop=4
set shiftwidth=4
set smarttab
set et — включим автозамену по умолчанию 

set wrap — попросим Vim переносить длинные строки

set ai — включим автоотступы для новых строк
set cin — включим отступы в стиле Си

Далее настроим поиск и подсветку результатов поиска и совпадения скобок
set showmatch 
set hlsearch
set incsearch
set ignorecase

set lz — ленивая перерисовка экрана при выполнении скриптов

Показываем табы в начале строки точками
set listchars=tab:··

set list

syntax on - включить подсветку синтаксиса

DNS Tunneling

Часть 1. Регистрация
Регистрируемся на сервисе dyndns.com
Заводим себе динамический dns, выбираем адрес (скажем, dnstun.dyndns.org)
Регистрируемся на сервисе co.cc
Регистрируем себе у них бесплатный домен (скажем, dnstun.co.cc), и указываем для него dns сервером наше dyndns-имя, dnstun.dyndns.org (если такой способ не сработает, можно добавить к домену nx-запись для его поддомена, ссылающуюся на наш dyndns-домен, это делается в «Zone Records», к примеру, host: tunnel.dnstun.co.cc, type: NS, Value: dnstun.dyndns.org", и в дальнейшем вместо dnstun.co.cc везде использовать tunnel.dnstun.co.cc)
Ждем делегирования домена и появления его на всех dns серверах (до 48 часов)

Часть 2. Сервер (т.е. тот компьютер, который находится в «большом» интернете, без всяких firewall и т.д.)
Скачиваем и устанавливаем dyndns updater:
www.dyndns.com/support/clients/
Скачиваем и устанавливаем TAP драйвер из пакета OpenVPN:
openvpn.net/release/openvpn-2.0.9-install.exe
Скачиваем свежую сборку iodine:
code.kryo.se/iodine/iodine-latest-win32.zip
Запускаем сервер iodine:
iodined -f 10.0.0.1 dnstun.co.cc
С помощью kerio или встроенных средств windows создаем общий доступ к интернету для вновь появившегося сетевого соединения (через виртуальный адаптер TAP-Win32 Adapter V8)

Часть 3. Клиент (тот компьютер, которому из всего интернета доступен только dns)
Скачиваем и устанавливаем TAP драйвер из пакета OpenVPN:
openvpn.net/release/openvpn-2.0.9-install.exe
Скачиваем свежую сборку iodine:
code.kryo.se/iodine/iodine-latest-win32.zip
Запускаем клиент:
iodine -f 92.162.2.72 dnstun.co.cc
Здесь 92.162.2.72 это IP адрес любого доступного dns сервера
(именно IP, писать ns1.provider.ru нельзя — не сработает).
Узнать IP dns серверов, установленных в системе, можно по команде
ipconfig /all
Теперь остается настроить роутинг так, чтобы все пакеты, кроме тех, что идут к dns серверу, заворачивались на вновь поднятый виртуальный интерфейс. Это — домашнее задание. Подсказка.

P.S. Оно есть и под maemo, и под win mobile.
P.P.S. Умный читатель догадается, что чтобы совсем все хорошо работало, нужно еще подправить MTU в реестре.

Anonymous SSH Sessions With TOR

Install TOR
vi /etc/apt/sources.list
deb http://mirror.noreply.org/pub/tor lenny main

apt-key adv --recv-keys --keyserver subkeys.pgp.net 0x94C09C7F
apt-get update && apt-get install -y tor
apt-get install -y connect-proxy

Setup OpenSSH to use TOR for all connections
vi ~/.ssh/config
Host *
CheckHostIP no
Compression yes
Protocol 2
ProxyCommand connect -4 -S localhost:9050 $(tor-resolve %h localhost:9050) %p

Set up OpenSSH to use TOR for a specific connection
Host mydomain
HostName mydomain.com
User myaccount
CheckHostIP no
Compression yes
Protocol 2
ProxyCommand connect -4 -S localhost:9050 $(tor-resolve %h localhost:9050) %p

Ubucleaner. Простая очистка системы.

пятница, 24 июля 2009 г.
В процессе использования Ubuntu, накапливается много мусора (конфигурационные файлы удаленных программ, кеш apt, неиспользуемые ядра и т.д.) от которого периодичски неплохо было бы избавиться. Для этого есть одно очень простое решение - bash-скрипт Ubucleaner.

Возможности:
Очистка кеша apt
Удаление конфигурационных файлов удаленных программ
Удаление неиспользуемых ядер (работает только на Debian-based дистрибутивах)
Очистка корзин каждого пользователя (включая root).

Скрипт предполагает использование aptitude, а не apt-get или dpkg. Если вы хотите их использовать просто отредактируйте соответсвующие строки.

Использование довольно тривиально.
Качаем файл
wget http://www.opendesktop.org/CONTENT/content-files/71529-ubucleaner.sh

Даем права на запуск:
sudo chmod +x 71529-ubucleaner.sh

Запускаем:
sudo ./71529-ubucleaner.sh

Удаленное выключение Windows из под Linux

четверг, 2 июля 2009 г.
На удаленном компьютере под управлением Windows должно быть разрешено icmp, общий доступ к файлам и принтерам, учетная запись имела необходимые привилегии.
На Linux машине установлена и настроена Samba.

net rpc SHUTDOWN -C "enter a comment to display at shutdown" -f -I x.x.x.x -U username%password

x.x.x.x - ip :-)

Создание mirror портов в Cisco Catalyst 2960

пятница, 19 июня 2009 г.
Создание mirror портов - применяется для зеркалирования всего трафика проходящего через один из портов на другой. В терминах cisco это называется Switched Port Analyzer (SPAN).

Настроить в Catalyst 2960 более чем элементарно, надо из configuration mode написать:

Switch(config)#monitor session 1 source interface Fa0/1
Switch(config)#monitor session 1 destination interface Fa0/2


Как мы видим - все пакеты первого порта зеркалируются на второй. Единственное, что 2 порт не должен быть port-security.

ID3 теги в mp3

понедельник, 15 июня 2009 г.
Пакет media-libs/mutagen - это набор небольших утилит написанных на питоне, существенно помогающих облегчить конвертацию.

find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1

Перекодируем все файлы с тегами в кодировке cp1251 в кодировку utf8, попутно удаляем тег первой версии, дабы Amarok не обращал на него внимания.

Клонирование Debian

Для установки того же набора пакетов для Debian на новом сервере:

На исходной системе:
dpkg --get-selections > installed-software.log

На новой системе:
sudo dpkg --set-selections

Осталось только скопировать конфигурационные файлы и отредактировать их.

Информация выводимая командой ntpq -p

четверг, 11 июня 2009 г.
Символ в начале строки: 
пробел - слишком большой страт, цикл или явная ошибка
x - фальшивый источник по алгоритму пересечения
. - исключен из списка кандидатов из-за большого расстояния
- - удалено из списка кандидатов алгоритмом кластеризации
+ - входит в конечный список кандидатов
# - выбран для синхронизации, но есть 6 лучших кандидатов
* - выбран для синхронизации
o - выбран для синхронизации, но используется PPS
remote - имя удаленного ntp сервера. Если использовать ключик -n, то будет показан IP
refid - показывает откуда этот сервер берет время. Тут может быть имя (или IP) другого сервера или что то типа .GPS., .PPS. и т. п.
st - Stratum - слой в котором работает данный сервер, число от 1 до 16 указывающее удаление от источника синхронизации (например GPS или PPS). Слой данного сервера на 1 больше слоя сервера по которому идет синхронизацию.
t - Тип удаленного сервера (local, unicast, multicast or broadcast)
when - сколько секунд назад был получен последний пакет от данного сервера
poll - период опроса сервера, секунд.
reach - Шестнадцатеричное представление массива из 8-ми бит, в котором фиксируется 8 последних попыток синхронизации. Если попытка была успешной, то устанавливается 1. Значение 377 говорит о том, что все 8 последних попыток были удачными.
delay - вычисленная задержка ответов от сервера (RTT) в миллисекундах
offset - разница во времени между локальным и удаленным сервером, мс. Одно из наиболее важных значений. Чем оно меньше тем точнее время.
jitter - дисперсия отклонения удаленных часов относительно локальных, вычисленная по нескольким последним запросам, мс. Чем меньше это значение тем более точная возможно синхронизация.

Подмена time.windows.com локальным ntp-сервером

понедельник, 1 июня 2009 г.
В крупных, постоянно меняющихся и развивающихся гетерогенных сетях установка адреса локального ntp-сервера на всех машинах может представлять определенную проблему. В данном случае можно воспользоваться возможностями DNS-сервера BIND и подменить выдаваемый по запросу «time.windows.com» ip-адрес.

На DNS сервере создадим интересующую нас зону следующего содержания:

/etc/bind/zones/prime/time.windows.com
; time.windows.com.
$TTL 86400
@ in soa time.windows.com. hostmaster.office.example. (
  2009060200 ;serial
  8H ;refresh
  2H ;retry
  1W ;expiration
  1D ) ;minimum

  ns ns.serv.example.

time.windows.com. a 192.168.0.2


где 192.168.0.2 — ip-адрес локального ntp-сервера

В конфигурационный файл /etc/named.conf добавляем строки: 
  zone "time.windows.com" in {
  type master;
  file "prime/time.windows.com";
  };



Перегружаем Bind: 
rndc reload

Если все правильно в логе /var/log/messages появится подобная строчка:

Jun 2 09:49:09 minotaur named[3930]: zone time.windows.com/IN: loaded serial 2009060200

ifconfig

пятница, 8 мая 2009 г.

1. Просмотр настроек для сетевого интерфейса

При вызове команды Ifconfig без аргументов мы получим список всех активных интерфейсов. Если в качестве аргументы вы укажите имя интерфейса, отобразиться только статистика по данном интерфейсу.

# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:2D:32:3E:39:3B
inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::21d:92ff:fede:499b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:977839669 errors:0 dropped:1990 overruns:0 frame:0
TX packets:1116825094 errors:8 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2694625909 (2.5 GiB) TX bytes:4106931617 (3.8 GiB)
Interrupt:185 Base address:0xdc00

2. Отображение всех интерфейсов, включая отключенные

# ifconfig -a

3. Выключаем интерфейс

# ifconfig eth0 down

4. Запускаем интерфейс

# ifconfig eth0 up

5. Назначаем интерфейсу IP адрес

Назначим IP адрес 192.168.2.2 на интерфейс eth0.
# ifconfig eth0 192.168.2.2

Изменим сетевую маску на интерфейсе eth0.
# ifconfig eth0 netmask 255.255.255.0

Изменим бродкаст адрес для интерфейса eth0.
# ifconfig eth0 broadcast 192.168.2.255

Назначаем IP адрес, маску и бродкаст одной командой.
# ifconfig eth0 192.168.2.2 netmask 255.255.255.0 broadcast 192.168.2.255

6. Изменяем MTU

Для изменения Maximum transmission unit (MTU) на значение XX используем следующую команду..
# ifconfig eth0 mtu XX

7. Promiscuous mode

По умолчанию когда сетевая карта получает пакет, она проверяет адрес получателя. В случае если этот адрес отличен от назначенных ей адресов, пакет отбрасывается. В promiscuous mode, карта не отбрасывает данные пакеты. Вместо этого она принимает все пакеты, приходящие через интрефейс. Для установки данного режима требуются привелегии суперпользователя. Большинство сетевых мониторов и анализаторов используют данный режим для захвата пакетов и анализа сетевого трафика.

Следующуая команда переводи интерфейс в promiscuous mode.
# ifconfig eth0 promisc

Следующуая команда переводи интерфейс в нормальный режим.
# ifconfig eth0 -promisc

Apache: применяем изменения в конфиге без перезагрузки сервера

Выполните следующую команду:
# /etc/init.d/httpd reload

или
# apachectl -k graceful

Различие от нормального рестарта в том, что текущие открытые коннекты не будут сброшены.

Замораживаем сессию vi

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

Вместо того чтобы выходить из vi; выполнить необходимую команду и вернуться обратно, есть более замечательное решение, которые вы можете выполнить напрямую из сессии vi:
Введите":", затем введите "shell".

Вы окажетесь в обычном окне шелла, где можете использовать любые команды. Когда вам потребуется вернуться к сеансу vi, наберите команду "exit" и вы вернетесь к своему документу.

Метки Linux разделов

Отображаем текущие метки
Если вызвать команду e2label без параметров, вам будет выведена текущая метка устройства:
# e2label /dev/sda1

Пример вывода:
/boot

Устанавливаем новую метку
Если дополнительным аргументов указана новая метка, тогда команда e2label установит её вместо в качестве новой метки файловой системы. Метка в Ext2 может быть длиной до 16-ти символов. Если новая метка длиннее чем 16 символов, e2label усечет её и выдаст предупреждающее сообщение:
# e2label /dev/sdb2 stroage

Так же можно воспользоваться опцией -L в команде tune2fs:
# tune2fs -L usbstroage /dev/sdb2

mod_perl

среда, 6 мая 2009 г.

Setup mod_perl

# apt-get install libapache2-mod-perl2

# a2enmod perl

# /etc/init.d/apache2 restart

Now the module is installed, but we've not configured it in any way. The simplest way to see an overview of what is happening is to add the perl-status handler. Create the file /etc/apache2/conf.d/perl-status with the following contents:
 #
 # make status information available at
 # http://example.com/perl-status/
 #
 
  SetHandler perl-script
  PerlHandler +Apache2::Status
 


 #
 # But only from the local host, and our trusted
 # remote IP.
 #
 
  order deny,allow
  deny from all
  allow from 127.0.0.1
  allow from your.ip.address
 

Speeding up Perl CGI Scripts
Because mod_perl embeds a persistent copy of Perl inside the Apache webserver you can use this embedded copy of perl to run your existing perl-based CGI scripts faster. This speedup comes from avoiding the overhead of launching a new copy of the Perl interpreter when an incoming CGI request is to be handled, to get a more impressive speedup requires making changes to your script(s).

By default in Debian GNU/Linux system CGI-scripts are located in /usr/lib/cgi-bin - we can specify that Apache run these via mod_perl by making the following changes to our site configuration:

  PerlModule Apache::Registry
  Alias /cgi-bin/ /usr/lib/cgi-bin
 
  SetHandler perl-script
  PerlHandler Apache::Registry
  PerlSendHeader On
  Options +ExecCGI
 


Once you've done this, and reloaded the new configuration (by running "/etc/init.d/apache2 restart"), you find that your existing CGI scripts launch much more quickly!

Конвертация файловой системы из ext3 в ext4

вторник, 28 апреля 2009 г.
Монтрование ext3 как ext4 без конвертации

Во-первых, начиная с ядра 2.6.28 можно монтировать ext2, ext3 и ext4 файловые системы как ext4. Это даст возможность использовать новые оптимизированные штуковины нового драйвера (например, delayed allocation, multi-block allocation и большие inode, если вы свою ext3 форматировали с этой опцией), и при этом физически на диске ничего не изменится, давая возможность вернутся обратно на драйвер ext3, например. Это делается очень просто — в вашем /etc/fstab меняете ext3 на ext4 и всё. Правда.

Конвертация в ext4

Совсем другое дело, если вы хотите использовать новые возможности ext4, такие как extents, которые меняют физический формат хранения данных, но и дают большой выигрыш в производительности.
Чтобы включить новые возможности на вашей ext3 файловой системе, нужно сделать так:

#tune2fs -O extents,uninit_bg,dir_index /dev/{нужный раздел}

Внимание! После этой команды, вы уже никогда не сможете смонтировать файловую систему как ext3.
После этого нужно обязательно проверить файловую систему с помощью fsck, чтобы привести в порядок то, что tune2fs не доделала. Делаем это так:

#e2fsck -pDf /dev/{нужный раздел}

После этого правим /etc/fstab и перезагружаемся.

Примечание: есть некоторые новые возможности, которые можно получить, только заново отформатировав раздел, например, flex_bg и поддержка разделов размером больше 16 терабайт.

Еще одно примечание: не рекомендуется менять размер inode с помощью e2fsprogs версии 1.41.0 или старше, потому что это приводит к испорченным данным и грустным людям.

Последнее примечание: после включения экстентов, новые файлы будут создаваться с их использованием, но со старыми ничего не случится и они продолжат лежать на диске в старом формате. Я где-то читал о волшебной утилитке defrag2fs, которая все старые файлы тоже переводит в новый формат, но, как я понял, она еще очень сырая, плохо работает, опасна для жизни и лучше подождать.

Как загружаться, если /boot тоже ext4

Вообще, конвертировать /boot в ext4 бессмысленно. Но если очень хочется, тогда нужно сначала сделать всё, как написано выше. Затем, нужно немного подправить /boot/grub/menu.lst. Находим вот такую строчку:

title Ubuntu 9.04 <...>
root (hdX,Y)
kernel /boot/vmlinuz-2.6.28-... root=... ro quiet splash


И добавляем к последней в конец rootfstype=ext4