суббота, 13 декабря 2014 г.


Восстановление таблицы MySQL

Как-то раз после очередного переноса виртуальной машины с одного сервера на другой, повредилась таблица MySQL. В PHPMYADMIN, при обращении к таблице выдавалась следующая ошибка:

Ответ MySQL:
#145 - Table './snmptt/cabletesteveryport' is marked as crashed and should be repaired



Для восстановления таблицы воспользуемся командной строкой:
1. Проверяем всю базу данных monitorallne
#mysqlcheck -uroot -p --databases monitorallne 
...
monitorallne.2pingstatus
warning : Table is marked as crashed
warning : 1 client is using or hasn't closed the table properly
error : Checksum for key: 2 doesn't match checksum for records
error : Corrupt
...

В выводе присутствуют ошибки, связанные с таблицей 2pingstatus

2. Восстанавливаем поврежденную таблицу:
#mysqlcheck -r -uroot -p monitorallne 2pingstatus

В другой базе snmptt при проверке обнаружились такие ошибки:

1. Проверка таблицы

#mysqlcheck -uroot -p snmptt
...
snmptt.cabletesteveryport
warning : Table is marked as crashed
warning :  client is using or hasn't closed the table properly
error : Record at pos: 45860564 is not remove-marked
error : record delete-link-chain corrupted
error : Corrupt


2. Восстанавливаем по той же схеме:
#mysqlcheck -r -uroot -p snmptt cabletesteveryport

понедельник, 10 ноября 2014 г.



Увеличение лимитов на количество одновременно передаваемых параметров в POST или GET запросах.


По умолчанию в современных настройках PHP установлено ограничение: количества передаваемых POST или GET параметров. Количество параметров определяется директивой max_input_vars и должно быть не более 1000. Это видно из вывода команды phpinfo():
 


Данныая директива используется в PHP версии 5.3.9 и старше. Директива является мерой против атак Hash Collision DoS, которые могут привести к отказу в обслуживании при отправке большого количества входящих параметров.

Для снятия этих ограничений необходимо подправить файл /etc/php.ini

Открываем файл:
#nano /etc/php.ini

Ищем строчку max_input_vars и ставим значение 10000.
max_input_vars = 10000Если строчки с таким параметром нет, то ее можно добавить.

Рестартуем сервер Apache
# service httpd restart



воскресенье, 24 августа 2014 г.

Разрешаем доступ к WEB-серверу Apache только с определенных сетей

1) Открываем конфигурационный файл Apache

2) Правим файл
Меняем блок
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

на

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 10.0.0.0/8
</Directory>


Затем меняем блок
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
#    AllowOverride None
    AllowOverride All
#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all
</Directory>

на

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 10.200.0.0/16
</Directory>

3) Рестуртуем сервис Apache


четверг, 7 августа 2014 г.

Установка и настройка SIP коммуникатора Jitsi

Скачать программу Jitsi можно по адресу https://jitsi.org/Main/Download 

Установка программы. 

Запускаем инсталлятор.

Дожидаемся стартового окна:

Нажимаем «Next».
Ставим галочку «I accept…» и снова нажимаем «Next.
Корректируем при необходимости путь установки и нажимаем "Next".
Убираем галочку «XMPP» и снова нажимаем «Next».
Для продолжения нажимаем «Install».

После завершения установки наблюдаем окно:
Нажимаем «Finish». При этом запуститься программа Jitsi.

Настройка программы.

После первого запуска программа имеет два окна:

Первое окошко можно закрывать. 
Настраивать будем через меню: «Инструменты»  «Опции». 
После выбора этого пункта меню появляется окно со списком аккаунтов:


Нажимаем кнопку «Добавить»
В открывшемся окне выбираем Сеть: SIP и заполняем первичные данные авторизации (идентификатор SIP и Пароль):
Нажимаем кнопку «Расширенные»
Вписываем отображаемое имя
Выбираем вкладку «Соединение».
Вписываем IP регистратора и порт.
Указываем Имя для авторизации.
Убираем галочку «Автоматическая настройка прокси-сервера» и заполняем данные прокси-сервера – IP адрес и Порт.
Снимаем галку «Индикация наличия сообщения (MWI)
Нажимаем кнопку «Следующий»
Нажимаем кнопку «Войти». Произойдет подключение к серверу SIP.
Видим статус SIP аккаунта – Online.
Можно закрыть это окно.
В окне контактов статус изменился автоматически.


Совершение вызовов

При входящем вызове теперь мы увидим окно:
Нажимаем на кнопку поднятия трубку (зеленая трубка) и разговариваем.

При исходящем вызове номер телефона можно вводить сразу в окне поиска или воспользоваться виртуальной клавиатурой.


суббота, 26 июля 2014 г.



Авторизация пользователя через FREERADIUS с использованием внешних скриптов.

Возникла задача производить авторизацию пользователя на BRAS в зависимости от имени пользователя, пароля и IP адреса BRAS (NAS-IP-Address). Задача может быть решена с использованием внешних скриптов, подключаемых в FREERADIUS с помощью команды Exec-Program-Wait и принимающих решение о авторизации.

1. Устанавливаем пакет FREERADIUS
#yum install freeradius freeradius-utils –y

2. Запускаем демон
#service radiusd start

3. Добавляем в автозагрузку демон radiusd
#chkconfig --level 35 radiusd on

4. Для проверки работы FREERADIUS в файле /etc/raddb/users создаем пользователя:
#nano /etc/raddb/users
Добавляем в конец файла:
testuser Cleartext-Password := "12345"
    Service-Type = Framed-User,
    Framed-Protocol = PPP,
    Framed-IP-Address = 172.16.3.33,
    Framed-IP-Netmask = 255.255.255.0

Здесь создаем пользователя testuser c паролем 12345, которому будет разрешена авторизация и будет выдан IP адрес 172.16.3.33
Затем перезапускаем службу freeradius (radiusd)
#service radiusd restart
Теперь проверяем, что авторизация работает. Используем отладочную команду:
[root@roslin ~]# radtest testuser 12345 localhost 1812 testing123
Sending Access-Request of id 37 to 127.0.0.1 port 1812
User-Name = "testuser"
User-Password = "12345"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=37, length=44
Service-Type = Framed-User
Framed-Protocol = PPP
Framed-IP-Address = 172.16.3.33
Framed-IP-Netmask = 255.255.255.0

Здесь:
testuser - логин
12345 - пароль
testing123 – секрет (по умолчанию в FREERADIUS он именно такой)
Проверка закончена. FREERADIUS в принципе работает.

ПРИМЕЧАНИЕ:
Иногда авторизация не проходит и выдается ошибка:
[root@test ~]# radtest testuser 12345 localhost 1812 testing123
radclient:: Failed to find IP address for test
radclient: Nothing to send.
Это значит, что имя тестового сервера test, на котором запускается команда не удалось определить. Исправляется это добавлением имени test в файл hosts
[root@test ~]# echo "127.0.0.1 test" >> /etc/hosts
[root@test ~]# radtest testuser 12345 localhost 1812 testing123
Sending Access-Request of id 195 to 127.0.0.1 port 1812
        User-Name = "testuser"
        User-Password = "12345"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=195, length=44
        Service-Type = Framed-User
        Framed-Protocol = PPP
        Framed-IP-Address = 172.16.3.33
        Framed-IP-Netmask = 255.255.255.0
[root@test ~]#

5. Создаем скрипт, который будет принимать решение о авторизации на основе входных данных:
- Логина
- Пароля
-IP адреса BRAS (NAS-IP-Address)
# touch script1.sh
# chmod +x script1.sh

Пример простого скрипта, который разрешает авторизацию, если IP адрес NAS порта равен 127.0.0.1, логин начинается на “s”, а пароль начинается на «pass».
#!/bin/bash
if [ ${1:0:1} == "s" ]
then
    if [ $3 == "127.0.0.1" ]
    then
        if [ ${2:0:4} == "pass" ]
        then
           echo "Framed-IP-Address = 172.16.3.33, Reply-Message = 'OK'"
           exit 0
        else
           echo "Reply-Message = 'NO'"
           exit 1
        fi
    else
       echo "Reply-Message = 'NO'"
       exit 1
    fi
else
    echo "Reply-Message = 'NO'"
    exit 1
fi


В случае положительного решения скрипт должен выдавать код завершения программы – «0», в случае отрицательного решения – код «1».
Проверка работы скрипта:
[root@roslin raddb]# ./script1.sh samara password 127.0.0.1
Framed-IP-Address = 172.16.3.33, Reply-Message = 'OK'
[root@roslin raddb]# ./script1.sh penza password 127.0.0.1
Reply-Message = 'NO'
[root@roslin raddb]# ./script1.sh samara paswd 127.0.0.1
Reply-Message = 'NO'
[root@roslin raddb]# ./script1.sh samara password 127.0.0.4
Reply-Message = 'NO'

Естественно в скрипт можно накрутить любую логику работы ( в том числе со сложными запросами в базу данных MySQL и пр).

6. Используем команду Exec-Program-Wait и вносим изменения в файл /etc/raddb/users
#nano /etc/raddb/users
Добавляем следующий блок:
DEFAULT Auth-Type := Accept
Service-Type = Framed-User,
Framed-Protocol = PPP,
Exec-Program-Wait = "/etc/raddb/script1.sh %u %{User-Password} %{NAS-IP-Address}"

Здесь командой Exec-Program-Wait скрипту /etc/raddb/script1.sh передаются переменные – логин (%u), пароль (%{User-Password}) и IP адрес NAS (%{NAS-IP-Address}). Если скрипт выдает 0 – авторизация разрешается, если 1 – запрещается.

7. Проверяем авторизацию:
Успешная авторизация:
[root@roslin raddb]# radtest samara password localhost 1812 testing123
Sending Access-Request of id 87 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "password"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=87, length=42
Service-Type = Framed-User
Framed-Protocol = PPP
Framed-IP-Address = 172.16.3.33
Reply-Message = "OK"

Неуспешная авторизация при неверном пароле:
[root@roslin raddb]# radtest samara sdf87dfg localhost 1812 testing123
Sending Access-Request of id 212 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "sdf87dfg"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=212, length=24
Reply-Message = "NO"

Неуспешная авторизация при неверном пароле:
[root@roslin raddb]# radtest samara pas2sword localhost 1812 testing123
Sending Access-Request of id 218 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "pas2sword"
NAS-IP-Address = 127.0.0.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=218, length=24
Reply-Message = "NO"

Неуспешная авторизация при неверном IP адресе NAS:
[root@roslin raddb]# radtest samara password localhost 1812 testing123 0 127.0.0.2
Sending Access-Request of id 113 to 127.0.0.1 port 1812
User-Name = "samara"
User-Password = "password"
NAS-IP-Address = 127.0.0.2
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=113, length=24
Reply-Message = "NO"


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

пятница, 25 июля 2014 г.



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

Установка NMAP в CentOS 6.5

#yum install nmap

Использование NMAP

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

Создадим файл, содержащий сети для опроса:
#touch /root/IP-Target

Занесем туда несколько сетей:
# echo "10.200.72.0/24" >> /root/IP-Target
# echo "10.200.16.0/24" >> /root/IP-Target
# echo "10.200.71.0/24" >> /root/IP-Target


Выполним сканирование методом обычного ICMP пинга:
#nmap -sn -iL /root/IP-Target
Ключ –sn дает команду NMAP применить простое IСMP сканирование хостов.
С помощью ключа –iL мы указываем NMAP файл с IP адресами (сетями) для сканирования.

Пример вывода:
#nmap -sn -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 11:02 MSK
Nmap scan report for 10.200.72.1
Host is up (0.0016s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0024s latency).

Nmap scan report for SMA-UKGD-R1.samara-ttk.ru (10.200.16.254)
Host is up (0.00071s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)

Nmap scan report for 10.200.71.254
Host is up (0.0040s latency).
Nmap done: 768 IP addresses (197 hosts up) scanned in 6.96 seconds


Для более быстрого сканирования отключим функцию определения имени по IP адресу с помощью DNS (опция –n)
#nmap -sn -n -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 11:11 MSK
Nmap scan report for 10.200.72.1
Host is up (0.0016s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0024s latency).

Nmap scan report for 10.200.16.254
Host is up (0.00050s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)

Nmap scan report for 10.200.71.254

Host is up (0.00071s latency).
Nmap done: 768 IP addresses (197 hosts up) scanned in 6.98 seconds


Еще увеличить скорость сканирования можно используя следующие опции:
--initial-rtt-timeout (Типовое время RTT прохождения пакета по сети до хоста и обратно. По умолчанию – 1 секунда. На реальной сети рекомендуют взять типовое RTT умноженное на два.)
--max-rtt-timeout (Максимальное время RTT прохождения пакета по сети до хоста и обратно. По умолчанию – 10 секунд. На реальной сети рекомендуют взять типовое RTT умноженное на четыре.)
--host-timeout (Устанавливается значение времени, по прошествии которого хост считается не доступным)
--max-scan-delay (Максимальное время ожидания между отсылкой пакетов. По умолчанию – секунда. При хорошей сети можно уменьшить в 2-5 раз по сравнению с типовым – 1 секунда).
Для нашей сети используем следующие параметры
--initial-rtt-timeout 10ms
--max-rtt-timeout 20ms
--host-timeout 5s
--max-scan-delay 300ms
Пример вывода:
#nmap -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 11:29 MSK
Nmap scan report for 10.200.72.1
Host is up (0.0016s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0024s latency).

Nmap scan report for 10.200.16.254
Host is up (0.00058s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)

Nmap scan report for 10.200.71.254
Host is up (0.035s latency).
Nmap done: 768 IP addresses (197 hosts up) scanned in 3.15 seconds

По сравнению с предыдущим разом скорость сканирования выросла почти в два раза.

Вывод программы удобно поместить в файл. Это делается с помощью опции –oN <имя файла>.
Пример команды с записью результатов в файл /root/123
#nmap -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -oN /root/123 -iL /root/IP-Target

Как можно заметить в выводе программы NMAP присутствуют только доступные IP адреса. Для того что бы получить подробный вывод и узнать перечень IP адресов, которые недоступны, включаем с помощью опции –v расширенный вывод.
# nmap -v -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -oN /root/123 -iL /root/IP-Target
Starting Nmap 5.51 ( http://nmap.org ) at 2014-07-25 22:32 MSK
Initiating Ping Scan at 22:32
Scanning 256 hosts [4 ports/host]
Completed Ping Scan at 22:32, 1.21s elapsed (256 total hosts)
Nmap scan report for 10.200.72.0 [host down]
Nmap scan report for 10.200.72.1
Host is up (0.0017s latency).
Nmap scan report for 10.200.72.2
Host is up (0.0025s latency).

Nmap scan report for 10.200.16.254
Host is up (0.00046s latency).
MAC Address: 00:1F:CA:F6:0B:1B (Cisco Systems)

Nmap scan report for 10.200.71.253 [host down]
Nmap scan report for 10.200.71.254
Host is up (0.00065s latency).
Nmap scan report for 10.200.71.255 [host down]
Read data files from: /usr/share/nmap
Nmap done: 768 IP addresses (197 hosts up) scanned in 2.70 seconds
Raw packets sent: 3347 (120.500KB) | Rcvd: 220 (6.352KB)


Для более наглядного перечня доступных и не доступных IP адресов можно воспользоваться grep
#nmap -v -sn -n --initial-rtt-timeout 10ms --max-rtt-timeout 20ms --host-timeout 5s --max-scan-delay 300ms -oN /root/123 -iL /root/IP-Target | grep "Nmap scan report for"
Nmap scan report for 10.200.72.0 [host down]
Nmap scan report for 10.200.72.1
Nmap scan report for 10.200.72.2
Nmap scan report for 10.200.72.3
Nmap scan report for 10.200.72.4

Nmap scan report for 10.200.71.252 [host down]
Nmap scan report for 10.200.71.253 [host down]
Nmap scan report for 10.200.71.254
Nmap scan report for 10.200.71.255 [host down]

В выводе команды недоступные хосты помечены как [host down], доступные не имеют такой пометки.

Полезные ссылки:
http://nmap.org/man/ru/

суббота, 19 июля 2014 г.

Утилита halberd для анализа распределения трафика сервера по хостам.

Ссылка на GITHUB:
https://github.com/jmbr/halberd

Установка утилиты на сервер Linux CentOS:
1. Скачиваем
#wget https://github.com/jmbr/halberd/archive/master.zip

2. Распаковываем
#unzip master.zip
(Если вдруг нет команды Unzip, то ее можно легко установить
yum install unzip)

3. Заходим в папку с программой:
#cd halberd-master/

4. Устанавливаем:
# python setup.py install
running install
running build
....
copying build/scripts-2.6/halberd -> /usr/bin
changing mode of /usr/bin/halberd to 755
running install_data
error: can't copy 'man/man1/halberd.1': doesn't exist or not a regular file
У меня команда завершилась с ошибкой, но при этом все работало.


Использование Утилиты
# halberd <имя сервера>
Пример:
[root@test tests]# halberd 2ip.ru
halberd 0.2.4 (14-Aug-2010)

INFO looking up host 2ip.ru...
INFO host lookup done.
INFO 2ip.ru resolves to 188.40.74.10
INFO 2ip.ru resolves to 188.40.74.9
188.40.74.10     [##########]  clues:   3 | replies: 236 | missed:   1

================================================================
http://2ip.ru (188.40.74.10): 1 real server(s)
================================================================

server 1: Apache/2.2.22
----------------------------------------------------------------

difference: 14227 seconds
successful requests: 236 hits (100.00%)
cookie(s):
  PHPSESSID=086fm1be6b3htbm4q8ihsnvm51; path=/
  IP[1405427044]=83.234.168.49; expires=Mon, 13-Oct-2014 12:24:04 GMT; path=/; domain=.2ip.ru
header fingerprint: 0c9269e50c1153d7a2eef6519e09912704ef4a3a
188.40.74.9      [##########]  clues:   2 | replies: 245 | missed:   0

================================================================
http://2ip.ru (188.40.74.9): 1 real server(s)
================================================================

server 1: Apache/2.2.16
----------------------------------------------------------------

difference: 14227 seconds
successful requests: 245 hits (100.00%)
cookie(s):
  PHPSESSID=pg9av4umbe30bcgjnu2dtjhi64; path=/
  IP[1405427053]=83.234.168.49; expires=Mon, 13-Oct-2014 12:24:13 GMT; path=/; domain=.2ip.ru
header fingerprint: 5cb092b03b806f674e47e52225193bea78f1785d


Вывод справки по программе:
# halberd --help

понедельник, 14 июля 2014 г.

Установка RUBY 2.1.2 и RUBY ON RAILS на Ubuntu 14.04

1) Обновляемся:
#sudo apt-get update

2) Устанавливаем RVM (Ruby Version Manager). 
Это программа позволяющая использовать несколько версий Ruby на одной машине. 
#curl -L get.rvm.io | bash -s stable

3) Запускаем RVM
#source /home/rossyp/.rvm/scripts/rvm

4) Смотрим, что на рекомендуют установить дополнительно на нашу машину:
#rvm requirements
rossyp@ur:~$ rvm requirements
Checking requirements for ubuntu.
Installing requirements for ubuntu.
Updating system..............
Installing required packages: g++, gcc, make, libc6-dev, libreadline6-dev, zlib1g-dev, libssl-dev, libyaml-dev, libsqlite3-dev, sqlite3, autoconf, libgdbm-dev, libncurses5-dev, automake, libtool, bison, pkg-config, libffi-dev.............................
Requirements installation successful.

5) Устанавливаем рекомендованные пакеты
#sudo apt-get install  g++ gcc make libc6-dev libreadline6-dev zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison pkg-config libffi-dev

6) Дополнительно ставим:
#sudo apt-get install nodejs

7) Устанавливаем стабильную на текущий момент версию  RUBY
#rvm install 2.1.2

8) Выбираем ее для использования по умолчанию
#rvm use 2.1.2 --default

9)Устанавливаем rubygems
#rvm rubygems current

10) и наконец устанавливаем
#gem install rails

11) Проверяем версий
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
$ rails -v
Rails 4.1.4


Установка RUBY 2.1.2 и RUBY ON RAILS на CentOS 6.5

1) Устанавливаем CURL
#yum install curl

2) Устанавливаем RVM (Ruby Version Manager). 
Это программа позволяющая использовать несколько версий Ruby на одной машине. 
#curl -L get.rvm.io | bash -s stable

3)Запускаем RVM
#source /etc/profile.d/rvm.sh

4) Смотрим, что на рекомендуют установить
# rvm requirements
Checking requirements for centos.
Installing requirements for centos.
Updating system.
Installing required packages: patch, libyaml-devel, libffi-devel, patch, libtool, bison........
Requirements installation successful.

5) Устанавливаем, что рекомендуют
#yum install patch libyaml-devel libffi-devel patch libtool bison

6) Устанавливаем стабильную версию  RUBY
#rvm install 2.1.2

7) Выбираем ее для использования по умолчанию
#rvm use 2.1.2 --default

8) Устанавливаем rubygems
#rvm rubygems current

9) и наконец устанавливаем
#gem install rails

10) Проверяем версии
# ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
# rails -v
Rails 4.1.4


пятница, 27 июня 2014 г.


Управление оборудованием Cisco через PHP (WEB) с помощью RSH.
1. Настройка маршрутизатора Cisco

1.1 Разрешаем глобально протокол RSH
R(config)# ip rcmd rsh-enable

1.2 Отключаем функцию определения IP адреса по DNS в протоколе RSH
R(config)# no ip rcmd domain-lookup
Данная команда может не отражаться в конечной конфигурации

1.3 Определяем с какого адреса, какой пользователь может работать по протоколу RSH
R(config)#ip rcmd remote-host main 10.200.2.5 www-data enable
Здесь main – имя пользователя на маршрутизаторе Cisco с привилегиями достаточными для выполнения команд.
10.200.2.5 – IP адрес сервера, с которого будут посылаться команды на выполнение на маршрутизаторе
www-data – имя пользователя на сервер 10.200.2.5, от имени которого будут запускаться команды на выполнение
Для настройки можно выполнить еще такую команду:
R(config)#ip rcmd remote-host main 10.200.2.5 root enable
В этом случае мы из под root в командной строке сможем давать команды RSH в сторону Cisco

1.4 Пользователь main должен быть создан на маршрутизаторе. Если такого пользователя нет, то его необходимо создать:
R(config)# username main privilege 15 password 7 ХХХХХХХХХХХ

1.5 Проверяем, что на vty интерфейсах разрешен протокол rsh.
Можно разрешить любой протокол:
R(config)#line vty 0 4
R(config-line)#transport input all

Или настроить доступ с помощью access-list.

2. Устанавливаем нужное программное обеспечение на сервер

2.1 Устанавливаем пакет из репозитария
Для CentOS:
#yum install rsh
Для Debian:
#apt-get install rsh-redone-client rsh-redone-server

2.2 Открываем порты для RSH
# iptables -I INPUT -p tcp --dport 1022:1023 -j ACCEPT
Не забываем сохранить настройки iptables.

3. Теперь выполняем на сервере команду и радуемся
Пример:
root@lg:~# rsh -l main 10.200.255.12 sh run int Loopback800
Building configuration...
Current configuration : 127 bytes
!
interface Loopback800
description >PPPoE outside<
ip vrf forwarding INTERNET
ip address 10.1.255.255 255.255.255.255
end
root@lg:~#

4. Для выполнения того же самого через php вставляем в WEB-страницу следующий код:
<?php
$s = passthru('rsh -l main 10.200.255.15 "sh users | i 10S0661"');
echo $s;
?>
Радуемся еще раз :)

среда, 25 июня 2014 г.


Как узнать какой дистрибутив Linux установлен на машине.

1. Можно попробовать одну из команд:

# cat /etc/*release
# cat /etc/*version
# cat /etc/issue


2. В Debian дистрибутивах, команд из п. 1 может не быть. Можно попробовать вот так:

# cat /etc/debian_version

3. Универсальный способ узнать имя дистрибутива – посмотреть вывод команды gcc:

# gcc --v





среда, 28 мая 2014 г.


Установка и настройка RRDtool в CentOS 6.

RRD это аббревиатура для Round Robin Database. RRD это система для хранения и отображения данных временного ряда, таких как пропускная способность сети, температура, загруженность сервера. Данные хранятся в очень компактном виде и не расширяются со временем очень значительно, а данные выводятся в виде удобных графиков.

Устанавливаем необходимые зависимости, для того, что бы было возможно установить RRDtool
#yum install cairo-devel libxml2-devel pango-devel pango libpng-devel freetype freetype-devel libart_lgpl-devel

Переходим в папку /opt/. Сюда будет устанавливаться программа RRDtool
#cd /opt 

Скачиваем архив с исходными кодами

Распаковываем
#tar -zxvf rrdtool.tar.gz

Вводим команды:
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig/
# cd rrdtool-1.4.8/

Конфигурируем:
# ./configure
Если команда ./configure выполняется с ошибкой.
configure: error: in `/opt/rrdtool-1.4.8':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
То решается проблема установкой компилятора gcc:
#yum install gcc
Правильное завершение команды ./configure
Type 'make' to compile the software and use 'make install' to
install everything to: /opt/rrdtool-1.4.8.
... that wishlist is NO JOKE. If you find RRDtool useful
make me happy. Go to http://tobi.oetiker.ch/wish and
place an order.
-- Tobi Oetiker <tobi@oetiker.ch>
----------------------------------------------------------------

Сборка пакета:
# make

Если команда выполнилась с ошибкой:
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.
make[3]: *** [perl-piped/Makefile] Ошибка 2
make[3]: Leaving directory `/opt/rrdtool-1.4.8/bindings'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/opt/rrdtool-1.4.8/bindings'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/opt/rrdtool-1.4.8'
make: *** [all] Ошибка 2
То решается проблема установкой пакета perl-ExtUtils-MakeMaker
# yum install perl-ExtUtils-MakeMaker
Теперь команда make выполняется без ошибок.

Далее - установка пакета RRDtool
# make install
Установка программы происходит в /opt/rrdtool-1.4.8/bin/

Для удобства дальнейшей работы делаем символическую ссылку:
#ln -s /opt/rrdtool-1.4.8/bin/rrdtool /usr/bin/rrdtool

Для проверки работы идем в папку с исходниками и запускаем для проверки скрипт stripes.pl
# cd /opt/rrdtool-1.4.8/examples/
# ./stripes.pl
Создастся файл stripes.png, который перемещаем в корень WEB-сервера, командой
# cp stripes.png /var/www/html/stripes.png
Открыв браузер и обратившись к серверу так:http://10.200.16.230/stripes.png , где 10.200.16.230 – IP адрес сервера, на котором работаем. мы увидим сгенерированный рисунок:



Значит все работает.

Иногда при выполнении скрипта stripes.pl, выходят ошибки:
# ./stripes.pl
(process:20256): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'
(process:20256): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'
This script has created stripes.png in the current directory
This demonstrates the use of the TIME and % RPN operators

Демонстрационный файл создается, но текст на рисунке не отображается:


Проблема решается установкой пакета dejavu-lgc-sans-fonts 
#yum install dejavu-lgc-sans-fonts
Теперь генерация рисунка происходит успешно.

воскресенье, 25 мая 2014 г.

Установка и настройка TFTP сервера в CentOS

Устанавливаем TFTP сервер и TFTP клиент
#yum install tftp-server
#yum install tftp

Добавляем пользователя tftp сервера
#adduser tftpd
#chown tftpd:tftpd /var/lib/tftpboot

Директория, которая, будет корневой у TFTP сервера:
/var/lib/tftpboot
Пока тут пусто.

Разрешаем коннект к TFTP серверу. Открываем порт 69 в iptables
#iptables -I INPUT -p udp --dport 69 -j ACCEPT
#service iptables save

Редактируем конфигурационный файл TFTP сервера:
#nano /etc/xinetd.d/tftp
Здесь меняем две переменные: server_args и disable.
Переменным задаем следующие значения:
   server_args   = -c -p -u tftpd -U 117 -s /var/lib/tftpboot
   disable       = no

Стартуем сервер TFTP. Отдельного такого сервера нет, он работает вместе с сервером xinetd.
Поэтому запускаем его.
#service xinetd start
#chkconfig xinetd on

Проверка работы
1. С роутера Cisco сохраняем конфигурацию:
R2#copy running-conf tftp://10.200.16.222
Address or name of remote host [10.200.16.222]?
Destination filename [r2-confg]?
!!
32003 bytes copied in 0.352 secs (90918 bytes/sec)
Здесь адрес 10.200.16.222 - это адрес нашего TFTP сервера
2. Проверка с машины, на которой установлен TFTP сервер:
- Создаем тестовый файл, к примеру 123.
#touch 123
- Подключаемся к серверу 
#tftp 127.0.0.1
- Заливаем файл на сервер командой put
tftp>put 123
3. Проверяем, что в папке /var/lib/tftpboot, что-то появилось:
# ls -l /var/lib/tftpboot
итого 36
-rw-rw---- 1 tftpd tftpd     9 Май 25 22:07 123
-rw-rw---- 1 tftpd tftpd 32003 Май 25 22:07 r2-confg

вторник, 20 мая 2014 г.

Файл htaccess сервера Apache и запрет автоматического открывания файла браузером.

Иногда необходимо с помощью web-сервера Apache ограничить доступ пользователя к какой-то определенной директории или изменить поведение сервера Apache для определенной папки. Это делается добавлением файла .htaccess в директорию и записью в файл определенных команд.

Мне потребовалось сделать так, что бы при обращении пользователя по ссылке к файлам из определенной директории, файл не открывался браузером автоматически сразу, а предлагал диалоговое окно: скачать файл или запустить файл или что бы браузер просто скачивал файл.

Что бы вообще в принципе читался файл .htaccess и воспринимались команды из этого файла необходимо в настройках Apache в файле /etc/httpd/conf/httpd.conf заменить в разделе <Directory "/var/www/html">:
AllowOverride None 
на 
AllowOverride All

Затем создать сам файл .htaccess
touch /var/www/html/.htaccess

Запустить любимый редактор nano
nano /var/www/html/.htaccess

И добавить в файл строки:
AddType application/octet-stream .pdf
AddType application/octet-stream .mp3
<files *.mp3>
forceType application/octet-stream
Header set Content-Disposition attachment
</files>

Перезапустить apache
service httpd restart

Теперь файлы mp3 и PDF будут скачиваться без автоматического открытия файла.

воскресенье, 11 мая 2014 г.


Установка пакета mp3info в CentOS 6.5

Потребовалось недавно на Linux из командной строки узнавать длительность звучания Mp3 файла. Задача была решена с помощью пакета mp3info.

Процесс установки:
1. Качаем RPM пакет
#wget ftp://ftp.ibiblio.org/pub/linux/apps/sound/mp3-utils/mp3info/mp3info-0.8.5a-1.i386.rpm

2. Пробуем его установить, но получаем ошибку:
# rpm -ivh mp3info-0.8.5a-1.i386.rpm
    ошибка: Неудовлетворенные зависимости:
    libatk-1.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libc.so.6 нужен для mp3info-0.8.5a-1.i386
    libc.so.6(GLIBC_2.0) нужен для mp3info-0.8.5a-1.i386
    libc.so.6(GLIBC_2.1) нужен для mp3info-0.8.5a-1.i386
    libc.so.6(GLIBC_2.3) нужен для mp3info-0.8.5a-1.i386
    libcairo.so.2 нужен для mp3info-0.8.5a-1.i386
    libdl.so.2 нужен для mp3info-0.8.5a-1.i386
    libgdk-x11-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgdk_pixbuf-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libglib-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgmodule-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgobject-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libgtk-x11-2.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libm.so.6 нужен для mp3info-0.8.5a-1.i386
    libncurses.so.5 нужен для mp3info-0.8.5a-1.i386
    libpango-1.0.so.0 нужен для mp3info-0.8.5a-1.i386
    libpangocairo-1.0.so.0 нужен для mp3info-0.8.5a-1.i386


3. Выполняем установку так:
# yum install mp3info-0.8.5a-1.i386.rpm

4. Проверяем, что пакет установился и откликается на команды:
# mp3info -help
MP3Info 0.8.5a Copyright (C) 2006 Cedric Tefft and Ricardo Cerqueira

Теперь что бы узнать длительность звучания файла 26042014-161136-88463108088-9735839.mp3 нужно выполнить:
# mp3info -x /mnt/recsource/26042014-161136-88463108088-9735839.mp3
/mnt/recsource/26042014-161136-88463108088-9735839.mp3 does not have an ID3 1.x tag.
File: /mnt/recsource/26042014-161136-88463108088-9735839.mp3
Media Type: MPEG 2.5 Layer III
Audio: 16 KB/s, 8KHz (mono)
Emphasis: none
CRC: No
Copyright: No
Original: Yes
Padding: No
Length: 0:20


Длительность будет записана в строчке Length.

Полезные ссылки
http://www.ibiblio.org/mp3info/

воскресенье, 6 апреля 2014 г.

Фотографии шлюза Linksys SPA8000.

Комплектация шлюза

Вот такой он красивый



Разбираем




Вентилятор (шумит)