суббота, 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