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