20150726

Логирование информации о проходящем через Juniper SRX трафике.

Точка съема информации.
Снимать информацию о трафике можно как минимум с двух точек:
-- Правила файрвола, уровень [edit firewall ] 
Тут видно просто факт прохождение пакета через фильтр, действие примененное к пакету, ip адреса и порты, протокол и  интерфейс.

-- Правила политик безопасности, уровень [edit security policies] 
На этом уровне можно получить гораздо больше информации. Здесь можно посмотреть номер сессии, ip адреса до и после ната, имена политик безопасности и пр.

Формат логов файрвола.
На syslog сервер логи приходят в таком формате:
Jul 24 04:50:49 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/3.0   D  tcp 1.1.1.1 9.9.9.9 53291 33434 (1 packets)
Jul 24 04:50:50 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/3.0   R udp 2.2.2.2 9.9.9.9 53971 5060
 (1 packets)
Jul 24 04:50:52 srx srx PFE_FW_SYSLOG_IP: FW: fe-0/0/3.0   A  tcp 3.3.3.3 9.9.9.9  47321 443 (1 packets)

* Код (тип) сообщения = PFE_FW_SYSLOG_IP:, удобно использовать для настройки фильтров на syslog сервере.
* Указатель на источник сообщений = FW:, сообщения которые были получены в соответствии с настройками фильтров файрвола.
* Интерфейс на котором висит фильтр = fe-0/0/3.0.
* Действие = D, R, A (discard, reject, accept).
* Протокол = tcp, udp, ospf и пр.
* Адрес источника = 1.1.1.1 
* Адрес назначение = 9.9.9.9
* Порт источника = 53291
* Порт назначения = 33434
* Количество пакетов = (1 packets), не припомню что бы было больше.

Формат логов политик безопасности.
Сообщения от политик безопасности могут быть трех видов:
-- создание сессии, указатель RT_FLOW_SESSION_CREATE
-- запрет сессии, указатель RT_FLOW_SESSION_DENY
-- закрытие сессии, указатель RT_FLOW_SESSION_CLOSE

Логи снимались с srx на котором работает AppFW. 
AppFW добавляет в лог несколько полей.

RT_FLOW_SESSION_CREATE
На syslog сервер логи приходят в таком формате:
2015-07-25T10:49:35.408+03:00 srx RT_FLOW:  RT_FLOW_SESSION_CREATE: session created 10.90.80.50/55871->87.240.131.99/80 junos-http 9.9.9.9/29419->87.240.131.99/80 src-nat-rule1 None 6 DEBUG-DENY-ANY-LOG VPN PX 21949 N/A(N/A) gr-0/0/0.14 HTTP INCONCLUSIVE No

###Стандартные поля###
* Код (тип) сообщения = RT_FLOW
* Адрес источника (source-address) = 10.90.80.50
* Порт источника (source-port) = 55871
* Адрес назначение (destination-address) = 87.240.131.99
* Порт назначение (destination-port) = 80
* Имя приложения (service-name) = junos-http
* Адрес источника после nat (nat-source-address) = 9.9.9.9
* Порт источника после nat (nat-source-port) = 29419
* Адрес назначение после nat (nat-destination-address) = 87.240.131.99
* Порт назначение после nat (nat-destination-port) = 80
* Имя правила по которому делался source nat (src-nat-rule-name) = src-nat-rule1
* Имя правила по которому делался destination nat (dst-nat-rule-name) = None
###N/A т.к. в данном случае srx не делает destination nat###
* Номер протокола (protocol-id) = 6, см. /etc/protocols (6 - tcp, 17 - udp, 1 - icmp)
* Имя политики безопасности (policy-name) = DEBUG-DENY-ANY-LOG
* Зона из которой идет трафик (source-zone-name) = VPN
* Зона в которую идет трафик (destination-zone-name) = PX
* Номер сессии (session-id-32) = 21949
* Имя пользователя (username) = N/A
* Принадлежность пользователя  (roles) = N/A
###N/A т.к. на srx не настроено source-identity###
* Интерфейс через который пришел трафик (packet-incoming-interface) = gr-0/0/0.14
###Поля AppFW###
* Тип приложения (application) = HTTP
* Тип вложенного приложения (nested-application)  = INCONCLUSIVE
###srx пока не разобрался что это за приложение и ставит тип incocnclusive т.к. прошел только syn пакет###
* Шифрование (encrypted) = No

RT_FLOW_SESSION_DENY
На syslog сервер логи приходят в таком формате:
2015-07-25T10:49:35.461+03:00 srx RT_FLOW: RT_FLOW_SESSION_DENY: session denied 10.90.80.50/55871->87.240.131.99/80 junos-http 6(0) DEBUG-DENY-ANY-LOG VPN PX HTTP VKONTAKTE N/A(N/A) gr-0/0/0.14 No appfw reject

* Код (тип) сообщения = RT_FLOW
* Адрес источника (source-address) = 10.90.80.50
* Порт источника (source-port) = 55871
* Адрес назначение (destination-address) = 87.240.131.99
* Порт назначение (destination-port) = 80
* Имя приложения (service-name) = junos-http
* Номер протокола (protocol-id) = 6, см. /etc/protocols (6 - tcp, 17 - udp, 1 - icmp)
* Тип icmp (icmp-type)  = (0), указывает на тип icmp пакета который был отброшен.
###Если это был не icmp пакет, то в этом поле всегда будет стоять "(0)"###
* Имя политики безопасности (policy-name) = DEBUG-DENY-ANY-LOG
* Зона из которой идет трафик (source-zone-name) = VPN
* Зона в которую идет трафик (destination-zone-name) = PX
* Тип приложения (application) = HTTP
* Тип вложенного приложения (nested-application)  = VKONTAKTE
* Имя пользователя (username) = N/A
* Принадлежность пользователя  (roles) = N/A
###N/A т.к. на srx не настроено source-identity###
* Интерфейс через который пришел трафик (packet-incoming-interface) = gr-0/0/0.14
* Шифрование (encrypted) = No
* Указатель на то как и кем была отвергнута сессия (reason) = appfw reject
###В данном случае сессию закрыл AppFW действием reject.  Без  AppFW, в этом поле будет стоять просто deny или reject###

RT_FLOW_SESSION_CLOSE
На syslog сервер логи приходят в таком формате:
2015-07-25T10:49:37.211+03:00 srx RT_FLOW: RT_FLOW_SESSION_CLOSE:  session closed TCP RST: 10.90.80.50/55871->87.240.131.99/80 junos-http 9.9.9.9/29419->87.240.131.99/80 src-nat-rule1 None 6 DEBUG-DENY-ANY-LOG VPN PX 21948 3(440) 7(6830) 2 HTTP VKONTAKTE N/A(N/A) gr-0/0/0.14 No

* Причина закрытия сессии (reason) = ТCP RST, с обоих сторон был получен RST (??).
В данном случае RST послал srx.
###Остальные возможные причины см. ниже.###
* Адрес источника (source-address) = 10.90.80.50
* Порт источника (source-port) = 55871
* Адрес назначение (destination-address) = 87.240.131.99
* Порт назначение (destination-port) = 80
* Имя приложения (service-name) = junos-http
* Адрес источника после nat (nat-source-address) = 9.9.9.9
* Порт источника после nat (nat-source-port) = 29419
* Адрес назначение после nat (nat-destination-address) = 87.240.131.99
* Порт назначение после nat (nat-destination-port) = 80
* Имя правила по которому делался source nat (src-nat-rule-name) = src-nat-rule1
* Имя правила по которому делался destination nat (dst-nat-rule-name) = None
###N/A т.к. в данном случае srx не делает destination nat###
* Номер протокола (protocol-id) = 6, см. /etc/protocols (6 - tcp, 17 - udp, 1 - icmp)
* Имя политики безопасности (policy-name) = DEBUG-DENY-ANY-LOG
* Зона из которой идет трафик (source-zone-name) = VPN
* Зона в которую идет трафик (destination-zone-name) = PX
* Номер сессии (session-id-32) = 21949
* Количество пакетов от источника (packets-from-client) = 3
* Количество байт от источника (bytes-from-client) = (440)
* Количество пакетов от назначения (packets-from-server) = 7
* Количество байт от назначени (bytes-from-server) = (6830)
* Длительность сессии в секундах (elapsed-time) = 2
* Тип приложения (application) = HTTP
* Тип вложенного приложения (nested-application)  = VKONTAKTE
* Имя пользователя (username) = N/A
* Принадлежность пользователя  (roles) = N/A
###N/A т.к. на srx не настроено source-identity###
* Интерфейс через который пришел трафик (packet-incoming-interface) = gr-0/0/0.14
* Шифрование (encrypted) = No

Причины закрытия сессии:
** idle Timeout - сессия закрылась по таймауту. По дефолту таймаут для tcp составляет 1800 секунд, для udp 60 секунд.
** unset - невозможно открыть сессию из-за проблем на control-plane, например кончилась память.
** ТCP FIN - получен RST.
** ТCP FIN - получен FIN.
** response received - был полчен ответ, напримен был получен icmp-reply на ранее посланный icmp-echo.
** ICMP error - пришел icmp пакет с сообщение об ошибке.
** aged out - вышло время жизни активной сессии.
** ALG - сессию закрыло ALG.
** HA
** auth 
** IDP - внутренняя ошибка idp.
** synproxy failure 
** synproxy limit
** parent closed - закрылась родительская сессия.
** CLI - сессию закрыли комендой из cli.
** CP NACK
** CP delete
** policy delete
** fwd session
** multicast route change
** first path reroute, session recreated
** source NAT allocation failure
** other
** error create IKE pass-through template 
** IKE pass-through chils session ageout 
** sess timeout on panding state
** unknown - хз, чё=) 


20150723

Настройка port-mirroring на Juniper SRX.

Настраиваем интерфейс srx к которому будет подключена машина с анализатором.
set interfaces fe-0/0/1 description server-name/port
set interfaces fe-0/0/1 unit 0 description span-port
set interfaces fe-0/0/1 unit 0 family inet address 10.11.12.1/30

set security zones security-zone MGMT interfaces fe-0/0/1.0 \
host-inbound-traffic system-services ping

set forwarding-options port-mirroring input rate 1
set forwarding-options port-mirroring input run-length 10
set forwarding-options port-mirroring family inet output interface fe-0/0/1.0 next-hop 10.11.12.2

Настраиваем правило файрволла для захвата трафика который хотим мирорить.
set firewall family inet filter PORT-MIRROR term PERMIT-ALL then port-mirror
set firewall family inet filter PORT-MIRROR term PERMIT-ALL then accept

Настраиваем интерфейс srx с которого будет мирорить трафик. 
set interfaces gr-0/0/0 unit 14 family inet filter input PORT-MIRROR
set interfaces gr-0/0/0 unit 14 family inet filter output PORT-MIRROR

###Замечание.
На машине на которой работает анализатор надо обязательно настроить ip который задан в настройках srx. Если адрес не настраивать, а просто перевести порт в promiscuous режим, работать не будет. Srx не будет отправляться трафик в порт fe-0/0/1, скорее всего потому что не видит arp для 10.11.12.2 (??). 

В итоге конфиг srx должен выглядеть так:
...
fe-0/0/1 {
    description server-name/port;
    unit 0 {
        description span-port;
        family inet {
            address 10.11.12.1/30;
        }
    }
}
...
security-zone MGMT {
    interfaces {
        fe-0/0/1.0 {
            host-inbound-traffic {
                system-services {
                    ping;
                }
            }
        }
    }
}
...
forwarding-options {
    port-mirroring {
        input {
            rate 1;
            run-length 10;
        }
        family inet {
            output {
                interface fe-0/0/1.0 {
                    next-hop 10.11.12.2;
                }
            }
        }
    }
}
...
firewall {
    family inet {
        filter PORT-MIRROR {
            term PERMIT-ALL {
                then {
                    port-mirror;
                    accept;
                }
            }
        }
    }
}
...
}
gr-0/0/0 {
    unit 14 {
        tunnel {
            source 1.1.1.1;
            destination 1.1.1.2;
        }
        family inet {
            filter {
                input PORT-MIRROR;
                output PORT-MIRROR;
            }
            address 10.11.12.5/30;
        }
    }





20150722

Быстрые заметки по wireshark\tcpdump

4. Увидеть номер vlan. 

tcpdump -nnee -i eth1 -c 10


3. Захватить CDP.
tcpdump -nn -vvv -i en0 -s 1500 -c 1 'ether[20:2] == 0x2000


2. Захватить мультикаст и бродкаст.
[root@blackpc ~]# tcpdump -i eth1 -n -c 300 "broadcast or multicast"

1. Посмотреть SNI (Server Name Indication) в SSL трафике. 
Wireshark
Применяем фильтры (в зависимости от версии WS):
- ssl.handshake.extensions_server_name
- ssl.handshake.extension.type == 0
- ssl.handshake.extension.type == "server_name"

Далее в отфильтрованном смотрим поле "Server Name:".
Путь:
Secure Sockets Layer -->
TLS Record Layer --> 
Handshake Protocol: Client Hello -->
Extension: server_name -->
Server Name Indication extension -->
Server Name: xakep.ru

Используем  ssl.handshake.extension.data contains "xakep.ru" когда надо отфильтровать пакеты с определенным SNI.

Tcpdump
Команда:
tcpdump -i eth1 -s 1500 -X  '(tcp[((tcp[12:1] & 0xf0) >> 2)+5:1] = 0x01) and (tcp[((tcp[12:1] & 0xf0) >> 2):1] = 0x16)' 

Пример:
[root@blackpc ~]# tcpdump -i eth1 -s 1500 -X  '(tcp[((tcp[12:1] & 0xf0) >> 2)+5:1] = 0x01)' and 
'(tcp[((tcp[12:1] & 0xf0) >> 2):1] = 0x16)' and host 178.248.232.27
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 1500 bytes
14:44:29.950497 IP x.x.x.x.60044 > 178.248.232.27.https: Flags [P.], seq 2690445558:2690446075, ack 2960121525, win 115, options [nop,nop,TS val 100379054 ecr 1195184343], length 517
0x0000:  4500 0239 5960 4000 4006 769e c0a8 0d04  E..9Y`@.@.v.....
0x0010:  b2f8 e81b ea8c 01bb a05c f0f6 b06f deb5  .........\...o..
0x0020:  8018 0073 6aec 0000 0101 080a 05fb a9ae  ...sj...........
0x0030:  473d 10d7 1603 0102 0001 0001 fc03 0347  G=.............G
0x0040:  edab 33fe a68e 1625 904e 404c d99c dc12  ..3....%.N@L....
0x0050:  645e de6e f35f d2a3 5fe4 920a 51a6 8820  d^.n._.._...Q...
0x0060:  cf3b 1e81 07e6 a15c 5343 fb04 3e7e a684  .;.....\SC..>~..
0x0070:  ba9e 5fd3 5ad5 fcf6 5969 21a2 0035 bdbe  .._.Z...Yi!..5..
0x0080:  0024 c02b c02f 009e c00a c009 c013 c014  .$.+./..........
0x0090:  c007 c011 0033 0032 0039 009c 002f 0035  .....3.2.9.../.5
0x00a0:  000a 0005 0004 0100 018f 0000 000d 000b  ................
0x00b0:  0000 0878 616b 6570 2e72 75ff 0100 0100  ...xakep.ru.....
0x00c0:  000a 0008 0006 0017 0018 0019 000b 0002  ................
0x00d0:  0100 0023 00b0 8aec 9689 2d9d 7387 24ef  ...#......-.s.$.
0x00e0:  1c8d e0b6 08ce 283b c5a7 174b 09cd 43db  ......(;...K..C.
0x00f0:  87e3 3d9d f4ff 6cc8 c327 a9d3 9537 8e29  ..=...l..'...7.)
0x0100:  637f 7f7d e146 401c 84c5 b62d 38f6 284c  c..}.F@....-8.(L
0x0110:  656a d3ab c460 77c2 d024 2b09 cf7c 94ca  ej...`w..$+..|..
0x0120:  a603 e410 38c9 4154 8ed5 4e67 b871 60ee  ....8.AT..Ng.q`.
0x0130:  7ad0 e003 ccf4 dd49 67cf 32e8 881d 740d  z......Ig.2...t.
0x0140:  5ebc 99f3 d08a cf2c f24a 0a28 b5ea 3157  ^......,.J.(..1W
0x0150:  78fb c9f0 f2ef 87aa bdb2 822c 1c61 d47c  x..........,.a.|
0x0160:  68b7 b55c 0440 bf26 47f5 d5df acbf 6b3e  h..\.@.&G.....k>
0x0170:  d45d 7dc1 dd72 0abb abb2 183d 88a1 9237  .]}..r.....=...7
0x0180:  4cc4 9bfa 70ed 3374 0000 0010 001a 0018  L...p.3t........
0x0190:  0873 7064 792f 332e 3105 6832 2d31 3408  .spdy/3.1.h2-14.
0x01a0:  6874 7470 2f31 2e31 0005 0005 0100 0000  http/1.1........
0x01b0:  0000 1200 0000 0d00 1200 1004 0105 0102  ................
0x01c0:  0104 0305 0302 0304 0202 0200 1500 6a00  ..............j.
0x01d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x01e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x01f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0200:  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0210:  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0220:  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0230:  0000 0000 0000 0000 00                   .........

20150718

Перенос MediaWiki на новый сервер.

Создаем на новом сервер mysql базу и пользователя.
root@newserver# mysql -u root -p
mysql> create database wiki_db;
mysql> grant all privileges on wiki_db.* to wiki_user@localhost identified by 'pass';
mysql> flush privileges;

Копируем файлы mediawiki на новый сервер.
root@oldserver# cd /var/www/html
root@oldserver# tar zcvf /root/bup/mediawiki-$(date '+%Y%m%d').tgz mediawiki

root@oldserver# scp /root/bup/mediawiki-xxx.tgz root@newserver:/root/wiki-bup
root@newserver's password:
mediawiki-xxx.tgz                                                         100%   23MB  11.8MB/s   00:02

Создаем дамп базы на старом сервере и копируем на новый.
root@oldserver# mysqldump --add-locks --complete-insert -u wiki_user -p wiki_db \
> /root/bup/wiki_db-$(date '+%Y%m%d').sql

root@oldserver# scp /root/bup/wiki_db-xxx.sql root@newserver:/root/wiki-bup
root@newserver's password:
wiki_db-xxx.sql                                                             100% 4757KB   4.7MB/s   00:00

На новом сервере заливаем базу из дампа.
root@newserver# mysql -u wiki_user -p wiki_db < /root/wiki-bup/wiki_db-xxx.sql

Распаковываем файлы mediawiki новом сервере.
root@newserver: tar xvf /root/wiki-bup/mediawiki-xxx.tgz -C /var/www/                                                               
На новом сервере правим httpd.
vi /etc/httpd/conf.d/vhosts.conf
...
<VirtualHost *:80>
     ServerAdmin a@b.c
     DocumentRoot /var/www/mediawiki
     ServerName wiki.b.c
     ErrorLog logs/mediawiki_err_log
     CustomLog logs/mediawiki_acc_log common
</VirtualHost>
...

vi /etc/httpd/conf.d/mediawiki.conf
...
Alias /mediawiki /var/www/html/mediawiki
Alias /view /var/www/html/mediawiki/index.php
...

Если новый сервер совсем свежий, на него только поставили минимальный LAMP, то надо доставить php-xml.
root@newserver# yum install php-xml 



LAMP на Centos6

LAMP
L - Linux
A - Apache
M - MySQL
P- PHP

Ставим.
# yum install httpd mysql-server php php-mysql

Запускаем apache.
# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]

Запускаем mysql. 
# /etc/init.d/mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h bender.ermoshin.pro password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

                                                                      [  OK  ]
Starting mysqld:                                           [  OK  ]

Делаем первичную настройку mysql.
# /usr/bin/mysql_secure_installation
Задаем пароль для root и везде отвечаем "y".
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

 Проверяем php.
# vi /var/www/html/info.php
Пишем.
<?php
phpinfo();
?>

Перзапускаем httpd и по http://server_ip/info.php должна появиться инфрмация о текущей версии php. 

Включаем автозагрузку.
# chkconfig --level 2345 httpd on
# chkconfig --level 2345 mysqld on



Быстрые заметки по vi

9. Работа с несколькими файлами.
В командном режиме.
Ctrl-w n - открыть новое окно
:new /path/to/file открыть файл в новом окне (горизонтальное разделение)
:vnew /path/to/file открыть файл в новом окне (вертикальное разделение)
:n /path/to/file открыть файл в текущем окне

Ctrl-w w - последовательно переключаться между окнами
Ctrl-w "стрелки" - переключиться на окно в определенном направлении
Ctrl-w "hjkl" - то же самое, h - влево, j - вниз, k-вверх, l-вправо
Ctrl-w "HJKL" - Перенести текущее окно в определенном направлении

:q - закрыть текущее окно
:qall - закрыть все окна разом
:wqall - записать изменения и закрыть все окна разом

8. Скопировать выделенный текст.
В командном режиме.
y - поместить выделенный текст в буфер
p -  скопировать выделенный текст (ниже курсора)

7. Выделить текст.
В командном режиме.
v+"стрелки" - выделить область
Shift-v - выделять целыми строчками
Ctrl-v - выделять блоком

6. Замена.
В командном режиме.
:s/что меняем/чем заменяем/ - найти и заменить первое совпадение в текущей строке.
:s/что меняем/чем заменяем/с - найти первое совпадение в текущей строке и спросить о замене.
:s/что меняем/чем заменяем/g - найти и заменить все совпадение в текущей строке.
:%s/что меняем/чем заменяем/g - найти и заменить все совпадение во всем файле.

5. Отмена отмены действия.
В командном режиме.
Ctrl-r или :red или :redo

4. Отмена действия. Отмена отмены действия.
В командном режиме.
u или :undo или :u

3. Удалить или вырезать строчку
В командном режиме.
dd

2. Скопировать строчку.
В командном режиме.
yy - поместить строчку в буфер
p -  скопировать строчку (ниже курсора)

1. Два режима:
* Командный - удаление строк, копирование, поиск по тексту, запись, выход и пр.
* Редактирования - сообствено само редактирование текста.

Переход между режимами:
* из командного в режим редактирования - нажать "a" (add, текст после курсора) или "i" (insert, текст перед курсором), внизу появится "-- INSERT --".
* из режима редактирования в командный в режим редактирования - нажать Esc.

20150713

Быстрые заметки по Exim

Сводка недоступна. Нажмите эту ссылку, чтобы открыть запись.