пятница, 24 октября 2014 г.

Cisco: IOS 15.x VPN

В данной статье я хочу пояснить кое-какие вопросы, связанные с построением VPN-концентратора (сервера удаленного доступа VPN) на Cisco IOS 15.x (от 15.4 и выше). Не простейшей конфигурации site-to-site VPN. 

И вот почему:

Что, шифрование туннелей ниасилили?

Перелопатив изрядное количество русскоязычных статей, я выяснил, что большинство так называемых системных администраторов решают проблему шифрования просто - "Ну не смогла я! Отключите шифрование!".

Смотрите сами:




Что, узнаете себя, недоумки?

Ссылки на оригиналы у меня тоже есть. И, кстати, они гуглятся за 5 минут. Родина должна знать своих героев!

Послушайте-ка, прокладки. Вы это серьезно - предлагаете ходить в корпоративный VPN при отсутствии шифрования? И такое решение предлагаете своим руководителям? Вы точно уверены, что вы IT-специалисты?

А теперь смотрите сюда и слушайте.


Вы вообще вот эту статью видели? В каждом разделе ниже я поясню, как настраивается шифрование - чтобы работало.

В нашем случае мы имеем полноценный IOS (15.4 universalk9) с поддержкой криптографии и железку с аппаратным криптоакселератором.

Правда, нам придется включить два technology pack'а, дабы стало возможным воспользоваться функциональностью VPN - в базовый пакет она не входит:

conf t

license boot module c2900 technology-package securityk9
license boot module c2900 technology-package datak9

end
wr
reload

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

Я намеренно не вдаюсь в детали приобретения лицензий и их установки - это не предмет данной статьи.

Теперь рассмотрим детально настройку VPN обеих типов - PPTP и L2TP с шифрованием туннелей, включая настройку клиентов (штатных VPN-клиентов Windows 7).

PPTP VPN

Наиболее просто настраивается PPTP VPN. Это каноническая функциональность VPN, однако, имеющая пару серьезных недостатков:
  1. Используется относительно слабое по нынешним временам шифрование RC4.
  2. Используется относительно уязвимая процедура аутентификации.
Эти недостатки не позволяют относиться серьезно к такому VPN. Однако простота конфигурирования и совместимость с древними клиентами Windows могут потребовать ее использования. Постараемся получить максимально возможную защиту в данном случае.

Итак, приступим:


!
aaa new-model
!
aaa authentication login default local
aaa authorization network default if-authenticated 
!
username vpnclient privilege 0 password 7 10593A1336121D1293420E232428
!
async-bootp dns-server 192.168.200.3
vpdn enable
!
vpdn-group PPTP-VPDN
! Default PPTP VPDN group
accept-dialin
protocol pptp
virtual-template 1
pptp tunnel echo 10
ip pmtu 
ip mtu adjust
!
interface GigabitEthernet0/0
ip address 72.163.4.161 255.255.0.0
ip access-group WAN_IN in
ip nat outside
ip virtual-reassembly in
duplex auto
speed auto
no cdp enable
!
interface Virtual-Template1
ip unnumbered GigabitEthernet0/0
! Ge0/0 - фронтальный интерфейс, на который поступают соединения от клиентов
ip nat inside
ip virtual-reassembly in
autodetect encapsulation ppp
peer default ip address pool VpnPool
ppp encrypt mppe 128 required
ppp authentication ms-chap-v2
!
ip local pool VpnPool 192.168.220.100 192.168.220.150
!
ip access-list extended NAT
remark Deny VPN connections to Internet
deny ip 192.168.220.0 0.0.0.255 any
remark Pass internal LAN to NAT
permit ip 192.168.0.0 0.0.255.255 any
ip access-list extended WAN_IN
deny tcp any any eq telnet
deny tcp any any eq smtp
deny tcp any any eq domain
deny tcp any any eq www
deny tcp any any eq 22
permit ip any any
!

Все ключевые параметры приведены в данном фрагменте конфигурации. Обратите внимание, что мы блокируем доступ к интернету для VPN-соединений, на фронтальном интерфейсе определен overload NAT, включено шифрование RC-4 128 бит (максимальное для PPTP) и аутентификация MS-CHAP v2. Также обратите внимание, что для доступа к DNS-серверу, находящемуся в DMZ, для VPN-клиентов задан параметр async-bootp dns-server с адресом сервера. В противном случае доступ к хостам из VPN будет только по IP либо придется указывать DNS для VPN-соединения на каждом клиенте.

В настройках клиентского соединения все должно быть по умолчанию, кроме закладки "Безопасность":

Все. Можете соединяться - вы зашифрованы.

Пояснение для оборудованных головным мозгом.
Снова читаем здесь. В режиме PPTP, Windows, начиная с Vista, использует RC4 128 бит. Зто означает, что работать будет только самое стойкое шифрование (на клиенте) в сочетании со строкой ppp encrypt mppe 128 required на сервере.

L2TP VPN

Однако, предел шифрования в PPTP - это RC4 128 бит. Как хотите, джентльмены, но по нынешним временам это не защита туннеля. Тем более, корпоративного.

Давайте сделаем туннель покрепче.


!
aaa new-model
!
!
aaa authentication login default local
aaa authentication ppp VPDN_AUTH local
aaa authorization network default if-authenticated
!

async-bootp dns-server 192.168.200.3
vpdn enable
!
vpdn-group L2TP-VPDN
! Default L2TP VPDN group
accept-dialin
protocol l2tp
virtual-template 1
no l2tp tunnel authentication
!
username vpnclient privilege 0 password 7 10531C1447192C6283420B316071
!
crypto isakmp policy 1
encr 3des
authentication pre-share
group 14
crypto isakmp key ViUctIcDodugbifGhij address 0.0.0.0
!
!
crypto ipsec transform-set L2TP-Set esp-3des esp-sha-hmac
mode transport
!
!
!
crypto dynamic-map dyn-map 10
set transform-set L2TP-Set

reverse-route
!
!
!
crypto map outside_map 65535 ipsec-isakmp dynamic dyn-map
!
interface GigabitEthernet0/0
ip address 72.163.4.161 255.255.0.0
ip access-group WAN_IN in
ip nat outside
ip virtual-reassembly in
duplex auto
speed auto
no cdp enable
crypto map outside_map
!
interface Virtual-Template1
ip unnumbered GigabitEthernet0/0

! Ge0/0 - фронтальный интерфейс, на который поступают соединения от клиентов
peer default ip address pool VpnPool
ppp authentication ms-chap-v2 VPDN_AUTH
!
!
ip local pool VpnPool 192.168.220.100 192.168.220.150
!
!
ip nat inside source list NAT interface GigabitEthernet0/0 overload
!
ip access-list extended NAT
remark Deny VPN connections to Internet
deny ip 192.168.220.0 0.0.0.255 any
remark Pass internal LAN to NAT
permit ip 192.168.0.0 0.0.255.255 any
ip access-list extended WAN_IN
deny tcp any any eq telnet
deny tcp any any eq smtp
deny tcp any any eq domain
deny tcp any any eq www
deny tcp any any eq 22
permit ip any any
!

Note: Обратите внимание на свойства transform-set. mode transport требуется для соединения со всеми версиями Windows native client (включая Windows 10), это означает, что VPN-соединение видимое снаружи как VPN. Если установить mode tunnel, трафик VPN перестанет быть очевидным, однако при этом Windows 10 не сможет соединяться с таким сервером (До Windows 7 включительно все работает). Также взгляните на свойства isakmp. group 2 это DH-группа всего лишь 1024 бит, абсолютный минимум для 2016 года - 2048 бит - это группа 14:

1 Diffie-Hellman group 1 (768 bit)
14 Diffie-Hellman group 14 (2048 bit)
15 Diffie-Hellman group 15 (3072 bit)
16 Diffie-Hellman group 16 (4096 bit)
19 Diffie-Hellman group 19 (256 bit ecp)
2 Diffie-Hellman group 2 (1024 bit)
20 Diffie-Hellman group 20 (384 bit ecp)
21 Diffie-Hellman group 21 (521 bit ecp)
24 Diffie-Hellman group 24 (2048 bit, 256 bit subgroup)
5 Diffie-Hellman group 5 (1536 bit)


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





Пояснения:
  1. В L2TP вход в домен без сервера аутентификации не поддерживается.
  2. В дополнительных параметрах IPSec надо задать pre-shared key из строки crypto isakmp key серверной конфигурации.
  3. Туннелирование IPv6 в L2TP еще не поддерживается.
Все, мои маленькие мохнатые друзья. L2TP с шифрованием 3des, аутентификацией sha и использованием криптоакселератора (если он имеется в вашей Cisco) работает.



Пояснение для оборудованных головным мозгом.
Еще раз читаем здесь. В Windows, начиная с Vista, на уровне реестра отключено слабое шифрование. Для L2TP это означает, что используется по умолчанию для шифрования 3des, для аутентификации - sha. 

четверг, 16 октября 2014 г.

Oracle: Клонирование базы данных

На тему клонирования баз в Oracle, вообще говоря, только ленивый не писал. Каждый недоношенный новообращенный OCA/OCP стремится донести перлы своей мудрости, обычно с орфографическими и грамматическими ошибками, до благодарного человечества.

Причем, чаще всего, опуская массу существенных деталей, и подкладывая немаленькую свинью любому желающему оную процедуру повторить.

Глядя на весь этот бардак, захотелось немного вправить мозги тем, кто желает копипастить чужие рецепты, но ниасилил сам трахнутые оракловые мануалы (о-о-о-о, они же на зубодробительном аглицком, языка не знаем, а времени на это нету, надо бежать в уютненький фейсбучек, в интернетах кто-то опять неправ...).

Так вот. Я повторю то же самое, причем опишу процедуру в виде алгоритма - то бишь последовательности действий, понятной даже идиоту - с добавлением тех самых существенных деталей, которые наши новообращенные не почесались упомянуть в своих (о)писаниях.

Краткий пересказ пяти с половиной тысяч предыдущих серий

Клонирование баз - штука весьма распространенная и востребованная.

Причины, по которым это приходится делать, довольно обширны и разнообразны:

  1. Вы выполняете миграцию боевой базы на другой сервер/платформу/архитектуру.
  2. Вам нужно создать тестовый сервер для итеративной разработки.
  3. Вы строите standby.
  4. Вы занимаетесь технической поддержкой и вам нужно тело что-то, на чем можно воспроизвести проблему и заняться паталогоанатомией.
  5. Вы хотите оптимизировать продуктивную БД, но вам нельзя создавать проблемы черепашкам продвинутым пользователям, и вы хотите использовать Real Application Testing на клоне, где и собираетесь провернуть всю оптимизацию прежде, чем испохабите выполните это на продуктиве, легко и непринужденно.
И так далее. 

Во всех случаях, когда вам нужен полный бинарный дубль вашей первичной базы - вам придется пользоваться клонированием, причем с использованием RMAN (Гуй используют только окошечники. Которых бьют. Ногами. Сильно).

Как мы это делаем? Всегда правой!

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


  1. Убедитесь, что на продуктивной системе (ну или там, куда вы будете сваливать полный физический бэкап продуктивной системы) достаточно дискового пространства для размещения этого самого бэкапа.
  2. Убедитесь, что на сервере, где вы будете создавать клон, достаточно места как для размещения полного физического бэкапа продуктивной системы, так и для получившейся базы (а она будет почти равна по размеру продуктивной!) плюс некоторый запас.
  3. Убедитесь, что обе вышеперечисленные системы соединены друг с другом достаточно широким сетевым интерконнектом и по дороге нет какого-нибудь тщедушного коммутатора.
  4. Убедитесь, что у вас надежное консольное соединение с обеими системами.
  5. Установите на сервер для базы-клона ПО Oracle той же самой версии, что и на боевой системе.
Проверили? Тогда приступим.

  1. Выполним на продуктивной системе полное резервное копирование (онлайновое), включив в резервную копию все архивные логи: 

    connect target /
    run{
    configure controlfile autobackup format for device type disk to '/путь_к_точке монтирования_бэкапа/backup/%F';
    configure controlfile autobackup on;
    allocate channel d1 type disk;
    backup tag FULL_DB format '/путь_к_точке монтирования_бэкапа/backup/db_%t_%s.bk' (database) plus archivelog;
    release channel d1;
    }
  2. Желательно написать это в виде скрипта - пригодится еще не раз в будущем.
  3. Скопируем все файлы, произведенные скриптом бэкапа (включая c-* и *.bk) на целевую систему. В точку монтирования с таким же именем, что и в нашей команде (скрипте): /путь_к_точке монтирования_бэкапа/backup
  4. Создадим на целевой системе файл orapw. Стандартной командой.
  5. Создадим на целевой системе файл tnsnames.ora: 


    # tnsnames.ora Network Configuration File: /opt/oracle/product/10.2/db_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.

    PROD =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.2)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = PROD)
    )
    )

    TEST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.30)(PORT = 1521))
    (CONNECT_DATA =
    (SERVICE_NAME = TEST)
    )
    )
  6. Создадим на целевой системе файл initTEST.ora. Необходимо убедиться, что значение параметра compatible идентично на продуктивной и клонируемой системах:

    compatible='10.2.0.3.0'
    TEST.__db_cache_size=587202560
    TEST.__java_pool_size=16777216
    TEST.__large_pool_size=16777216
    TEST.__shared_pool_size=956301312
    TEST.__streams_pool_size=16777216
    *.audit_file_dest='/data/TEST/adump'
    *.background_dump_dest='/data/TEST/bdump'
    *.compatible='10.2.0.3.0'
    *.control_files='/data/TEST/control01.ctl','/data/TEST/control02.ctl','/data/TEST/control03.ctl'
    *.core_dump_dest='/data/TEST/cdump'
    *.db_block_size=16384
    *.db_domain=''
    *.db_file_multiblock_read_count=16
    *.db_name='TEST'
    *.db_recovery_file_dest='/data/TEST/flash_recovery_area'
    *.db_recovery_file_dest_size=10485760000
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTXDB)'
    *.job_queue_processes=10
    *.nls_language='RUSSIAN'
    *.nls_territory='RUSSIA'
    *.open_cursors=300
    *.pga_aggregate_target=1672478720
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.sga_target=1610612736
    *.undo_management='AUTO'
    *.undo_tablespace='UNDOTBS1'
    *.user_dump_dest='/data/TEST/udump'
    DB_FILE_NAME_CONVERT=(/путь_к_точке_монтирования_продуктивной_базы/PROD/,/data/TEST/)
    LOG_FILE_NAME_CONVERT=(/путь_к_точке_монтирования_продуктивной_базы/redologs/PROD/,/data/TEST/)
Дальнейшие действия лучше будет показать в виде лога:


SQL> conn / as sysdba
Connected to an idle instance.
SQL> create spfile from pfile;

File created.

SQL> startup force nomount;
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size 2084296 bytes
Variable Size 385876536 bytes
Database Buffers 1207959552 bytes
Redo Buffers 14692352 bytes
SQL> Disconnected from Oracle Database 10g Release 10.2.0.4.0 - 64bit Production

oracle@Test:/путь_к_точке монтирования_бэкапа/backup> rman TARGET sys/*****@PROD NOCATALOG AUXILIARY /

Recovery Manager: Release 10.2.0.4.0 - Production on Fri Oct 10 15:18:54 2014

Copyright (c) 1982, 2007, Oracle. All rights reserved.

connected to target database: PROD (DBID=1324970899)
using target database control file instead of recovery catalog
connected to auxiliary database: TEST (not mounted)

RMAN> duplicate target database to TEST;

Starting Duplicate Db at 10-OCT-14
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK

contents of Memory Script:
{
set until scn 90049065;
set newname for datafile 1 to
"/data/TEST/system01.dbf";
set newname for datafile 2 to
"/data/TEST/undotbs01.dbf";
set newname for datafile 3 to
"/data/TEST/sysaux01.dbf";
set newname for datafile 4 to
"/data/TEST/users01.dbf";
restore
check readonly
clone database
;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 10-OCT-14
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /data/TEST/system01.dbf
restoring datafile 00002 to /data/TEST/undotbs01.dbf
restoring datafile 00003 to /data/TEST/sysaux01.dbf
restoring datafile 00004 to /data/TEST/users01.dbf
channel ORA_AUX_DISK_1: reading from backup piece /datatssd/backup/db_860592108_121.bk
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/путь_к_точке монтирования_бэкапа/backup/db_860592108_121.bk tag=FULL_DB
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:02:27
Finished restore at 10-OCT-14
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "TSSDT" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 584
LOGFILE
GROUP 1 ( '/data/TEST/redo01.log' ) SIZE 50 M REUSE,
GROUP 2 ( '/data/TEST/redo02.log' ) SIZE 50 M REUSE,
GROUP 3 ( '/data/TEST/redo03.log' ) SIZE 50 M REUSE
DATAFILE
'/data/TEST/system01.dbf'
CHARACTER SET CL8MSWIN1251


contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script

released channel: ORA_AUX_DISK_1
datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=860599299 filename=/data/TEST/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=860599299 filename=/data/TEST/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=860599299 filename=/data/TEST/users01.dbf

contents of Memory Script:
{
set until scn 90049065;
recover
clone database
delete archivelog
;
}
executing Memory Script

executing command: SET until clause

Starting recover at 10-OCT-14
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=158 devtype=DISK

starting media recovery

channel ORA_AUX_DISK_1: starting archive log restore to default destination
channel ORA_AUX_DISK_1: restoring archive log
archive log thread=1 sequence=3304
channel ORA_AUX_DISK_1: reading from backup piece /путь_к_точке монтирования_бэкапа/backup/db_860592284_122.bk
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/путь_к_точке монтирования_бэкапа/backup/db_860592284_122.bk tag=FULL_DB
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
archive log filename=/data/TEST/flash_recovery_area/TEST/archivelog/2014_10_10/o1_mf_1_3304_b3h993g7_.arc thread=1 sequence=3304
channel clone_default: deleting archive log(s)
archive log filename=/data/TEST/flash_recovery_area/TEST/archivelog/2014_10_10/o1_mf_1_3304_b3h993g7_.arc recid=1 stamp=860599299
media recovery complete, elapsed time: 00:00:01
Finished recover at 10-OCT-14

contents of Memory Script:
{
shutdown clone;
startup clone nomount ;
}
executing Memory Script

database dismounted
Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area 1610612736 bytes

Fixed Size 2084296 bytes
Variable Size 385876536 bytes
Database Buffers 1207959552 bytes
Redo Buffers 14692352 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "TEST" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 584
LOGFILE
GROUP 1 ( '/data/TEST/redo01.log' ) SIZE 50 M REUSE,
GROUP 2 ( '/data/TEST/redo02.log' ) SIZE 50 M REUSE,
GROUP 3 ( '/data/TEST/redo03.log' ) SIZE 50 M REUSE
DATAFILE
'/data/TEST/system01.dbf'
CHARACTER SET CL8MSWIN1251


contents of Memory Script:
{
set newname for tempfile 1 to
"/data/TEST/temp01.dbf";
switch clone tempfile all;
catalog clone datafilecopy "/data/TEST/undotbs01.dbf";
catalog clone datafilecopy "/data/TEST/sysaux01.dbf";
catalog clone datafilecopy "/data/TEST/users01.dbf";
switch clone datafile all;
}
executing Memory Script

executing command: SET NEWNAME

renamed temporary file 1 to /data/TEST/temp01.dbf in control file

cataloged datafile copy
datafile copy filename=/data/TEST/undotbs01.dbf recid=1 stamp=860599305

cataloged datafile copy
datafile copy filename=/data/TEST/sysaux01.dbf recid=2 stamp=860599305

cataloged datafile copy
datafile copy filename=/data/TEST/users01.dbf recid=3 stamp=860599305

datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=860599305 filename=/data/TEST/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=860599305 filename=/data/TEST/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=860599305 filename=/data/TEST/users01.dbf

contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script

database opened
Finished Duplicate Db at 10-OCT-14

RMAN>

Вкратце последовательность действий:

  1. Запускаем целевой инстанс в режиме NOMOUNT.
  2. Создаем из написанного нами init.ora spfile.
  3. Соединяемся из RMAN с продуктивной базой (бэкап уже физически перенесен на целевую систему!)
  4. Выполняем клонирование.
В нашем примере продуктивная база условно названа PROD, клон - TEST. Замените имена на ваши. :) Точка монтирования клонируемой базы - /data/TEST, то есть отличающаяся от продуктивной системы.

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

"Реконструкция завершена" (с) "Пятый элемент" :)

вторник, 14 октября 2014 г.

Cisco: Как заблокировать Hola

Что ж, будем последовательными. И заблокируем к чертям также и Hola. :)


Наши изобретательные офисные мастурбаторы так и пытаются найти какую-нибудь лазейку и выскользнуть из наших любящих рук. :)

Давайте исследуем вопрос поглубже.

"Что коза делает на нашем дереве?"

Наша нежно любимая Hola весьма похожа по реализации на ZenMate.

На первый взгляд кажется, что достаточно, как было написано в одной затерявшейся в гугле статейке, заблокировать домен hola.org и пару портов:


В этом списке hola.org, clients.hola.org и пара портов, используемых standalone-приложением Hola.

Увы, практический тест показал, что этого совершенно недостаточно.

Дело вот в чем.

Браузерные плагины (Chrome/Firefox) используют совсем не порты и ходят вовсе не на родительский домен.

Они соединяются с доменными именами вида zagentXXXX.hola.org, где XXXX-это цифры от 1 до 9999. 

Я не буду делать предположений, не номера портов ли это. Не знаю и знать не хочу. Важно выловить все адреса точек приземления и заблокировать их, подобно тому, как мы блокировали ZenMate.


Hola! Hola!

Что ж, приступим.

Опытным путем потыкав доменные имена zagentXXXX.hola.org палочкой, напишем скрипт для вылавливания всех адресов:

#!/bin/sh

for i in `seq 1 999`;
do
#echo "access-list 110 deny ip any`nslookup zagent$i.hola.org|grep Address|grep -v "127.0.0.1#53"|cut -f2 -d":"` 0.0.0.0"
nslookup zagent$i.hola.org|grep Address|grep -v "127.0.0.1#53"|cut -f2 -d":"
done

(Мой DNS-кэш работает по адресу 127.0.0.1. Кстати, проверять диапазон свыше 1-999 не имеет смысла, адреса начинают браться из одних и тех же сетей).

Получаем список из 841 IP-адреса:


ACL, пожалуй, будет великоват и через терминал не пролезет. :)

Пришлось загрузить список в Calc, отсортировать и сгруппировать. Сразу же обнаружились закономерности. И все адреса удалось собрать в 85 сетей. :)

Вот эти сети:

107.155.75.0/24
103.18.42.0/24
103.27.232.0/24
103.4.16.0/24
103.6.87.0/24
104.131.128.0/20
106.185.0.0/17
106.186.64.0/18
106.187.0.0/18
107.155.85.0/24
107.161.144.0/21
107.170.0.0/17
107.181.166.0/24
107.190.128.0/20
107.191.100.0/22
108.61.208.0/23
109.74.192.0/20
128.199.128.0/18
14.136.236.0/24
149.154.157.0/24
149.62.168.0/22
151.236.18.0/24
158.255.208.0/24
162.213.197.0/24
162.217.132.0/22
162.218.92.0/23
162.221.180.0/23
162.243.0.0/17
167.88.112.0/22
168.235.64.0/22
173.255.192.0/20
176.58.96.0/19
176.9.0.0/16
177.67.81.0/24
178.209.32.0/19
178.79.128.0/18
192.110.160.0/24
192.121.112.0/24
192.184.80.0/21
192.211.49.0/24
192.241.160.0/19
192.30.32.0/22
192.34.56.0/21
192.40.56.0/24
192.73.232.0/21
192.81.208.0/21
192.99.0.0/16
198.147.20.0/24
198.211.96.0/20
198.58.96.0/19
199.241.28.0/22
208.68.36.0/22
209.222.30.0/24
213.229.64.0/18
217.170.192.0/20
217.78.0.0/20
23.227.160.0/24
23.249.168.0/23
23.29.124.0/24
31.193.128.0/20
31.220.24.0/22
37.139.0.0/19
37.235.52.0/24
41.215.240.0/24
41.223.52.0/24
46.17.56.0/21
46.19.136.0/21
46.246.0.0/17
46.38.48.0/21
46.4.0.0/16
5.9.0.0/16
50.116.32.0/20
66.85.128.0/18
74.82.192.0/19
77.237.248.0/23
81.4.108.0/22
85.234.128.0/19
88.150.156.0/22
91.186.0.0/19
92.222.0.0/16
92.48.64.0/18
94.76.192.0/18
95.215.44.0/22
96.126.96.0/21


Это уже лучше, мы можем сделать нормальный и не слишком огромный ACL. Преобразуем CIDR в удобоваримый для Cisco вид и готово:


Hola! Hola!

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

Cisco: Как заблокировать Opera Turbo

У меня плохие новости для мастур-батыров (воины-мастурбаторы). :))))))))))

Opera Turbo, которую с истерическими воплями рекламируют повсюду как панацею от злых админов, штаб-квартиры Марс Надзора и иных злых личностей - блокируется не просто, а очень просто. :)

(усмехнувшись) Говорите, вертели вы на ... гм, своем детородном органе злых админов и Глав-Марс-Жандарм, вместе взятых?

"Ну,попробуй!" (c) Анакин Скайуокер AKA Владыка Вейдер.

"Я слежу за вами, Wazowski, постоянно!"

Есть такая милая штучка, как SqStat. Это прелестный скрипт на PHP, позволяющий практически в реальном времени мониторить активные сессии на Squid:

Так вот. Когда офисный мастурбатор (сиречь мастур-батыр) включает Opera Turbo, то администратор прокси видит почти безобидную (если не присматриваться внимательно) ссылочку на один из URL Opera Software ASA:


 Она до-о-о-олго висит. А в этот самый момент прокси фиксирует огромный CACHE MISS:
Что означает, что наш мастур-батыр залез на порносайты и качает потоковое видео, которого, разумеется, в нашем чистом кэше нет и быть не может. :)

"Берегись, жопа, стальных ос! Тех, что летят из страны металлических роз!"

В молодости мне нравилась Алиса. :)  Сейчас - нет, но эта цитата из песни идеально подходит к нашему случаю. :)

Итак, первое приближение.

Рассмотрим повнимательней URL, который мы видели:


Скорбно вздыхаем, идем на Tcpiputils:


Нашли первый диапазон. Однако блокировать только его недостаточно.

Чуть более сложное упражнение - делаем port mirror для нашего мастур-батыра и, после небольшого сниффинга (чуть менее 10 минут) находим искомый адресный диапазон приземления Opera Turbo. В нем несколько сеток:

37.228.104.0 0.0.7.255
141.0.8.0 0.0.7.255
82.145.208.0 0.0.15.255
195.189.142.0 0.0.1.255
185.26.180.0 0.0.3.255


Как, и все? Неужели?

UPD. На самом деле вам просто надо несколько дней подряд выполнять nslookup-запросы по имени global-turbo-1.opera-mini.net. По найденному адресу надо выполнить запрос на tcpiputils. Все сети, которые вы в итоге найдете, и надо включить в бан-лист на роутере.

Добавляем к нашему списку ACL. Заодно, до кучи, согласно рекомендациям доктора Касперского, забаним и Ultrasurf (для этого достаточно наглухо перекрыть порт 9666):


Теперь пробуем с включенным Opera Turbo зайти куда угодно:


Ай-ай-ай, забанили! :))) Не повезло-то как, а? :)))))))

суббота, 4 октября 2014 г.

Cisco: Как заблокировать ZenMate


Введение

Мониторные дрочеры (офисные мастурбаторы), мальчики и девочки, публика изобретательная. Вы можете сколько угодно извращаться, строя прокси, невидимый снаружи. Но как только эти прыщавые рожи ударятся об блокирующую страницу, в их цыплячьи мозги тут же приходит мыслишка погуглить фразу "Как обойти прокси/наколоть злого админа".

Возможно, я бы ничего против не имел, что чьи-то подчиненные целыми днями напролет долбятся в порнуху и ни черта не делают на работе полезного, но я видел логи и знаю - если закрыть на это глаза, гигабайты будут улетать в никуда и минимум 95% канала будет забито. В том числе в тех случаях, когда вам позарез нужна пропускная для дела - например, в конце месяца.

Поскольку ни одному админу не нравится, когда его пытаются обжулить, мы принимаем меры защиты. Ну, например, наиболее очевидное решение - заблокировать все Веб-VPN, анонимайзеры и прочую чушь:


default {
#!in-addr
pass white updatesites !adv !banners !drugs !porn !sex !sex2 !dating !spyware !anonvpn !redirector !var !costtraps !games !games2 !tracker !movies !music !models !urlshortener !webtv all
rewrite media
redirect http://localhost:8080/cgi-bin/blocked?clientaddr=%a&url=%u&targetgroup=%t
}

Это кусочек squidGuard.conf, решающий данную задачу. Блоклист лично я использую от Shalla Secure Services, и наиболее не искалеченную интеллектом публику он заворачивает. Хождения по IP-адресам тоже блокируется легко и непринужденно средствами HTTP-прокси.

И все было бы ничего, если бы лазили исключительно через HTTP.

Однако некоторые мозги, не иссушенные до поры до времени онанизмом, дозревают до того, чтобы использовать плагины к браузерам, позволяющие обходить проксирование.

Ну, почти позволяющие.

Большая часть этих плагинов не заслуживает даже обсуждения.

Например, FriGate. Без собственного списка прокси-серверов или платных сервисов он практически ничего не стоит против даже обычного сквида. Ну а платить наши дрочеры за свое хобби не готовы. Равно как и напрягать свои иссушенные мозги - так как FriGate все же требует юзера, оборудованного неким подобием мозга для большей-меньшей эффективности. :) (Кстати, их домен продается - видимо, приказали долго жить под давлением ГлавМарсЖандарма :)).

Есть, однако, новомодный плагин к наиболее распространенным браузерам (Chrome, Firefox, и даже Opera ;)), который на первый взгляд кажется волшебной пулей и который представляет определенную угрозу неопытным администраторам. ;)

Это ZenMate.

Гугл переполнен рекомендациями по его использованию и воплями недоношенных администраторов на тему его блокирования. :)

Почитав маркетинговые заявления компании-разработчика и слегка посмеявшись, я взял в руки инструменты. :)

Как устроен ZenMate

Разработчик заявляет, что это не традиционный VPN и не туннель в общепринятом понимании. Следовательно, средства DPI до поры-до времени сосут.

Внимательный осмотр показал, что плагин представляет собой клиента, выходящего через серию обнаруживаемых им свободных портов (подобно тому, как пролезает в любую доступную жопу Skype) на группу серверных площадок в более-менее демократичных странах с фиксированными адресами через шифруемое соединение. Предварительно пользователя плагина аутентифицируют в сети 162.159.244.0 0.0.0.255 (собственно, по минимуму было бы достаточно заблокировать одну эту сеть. Нет аутентификации - нет проксирования. Однако, поскольку сервисы зачастую бывают достаточно отзывчивыми к своей ЦА, этой сетью мы не ограничимся).

После чего плагин пробрасывает браузерное соединение по HTTP/HTTPS до точки приземления, которую выбрал пользователь. 

Да, они заявляют, что скрывают IP адрес пользователя от сервера - и поверхностное вскрытие показало, что так оно и есть.

Однако - даже против Tor Browser эта так называемая защита никакая. Она позволит обойти прокси администратора-недоноска в "Рога-и-Копыта, Inc.", но серьезной анонимности и безопасности не предоставит. Если вы - враг государства и настолько глупы, чтобы полагаться на браузерный плагин - вы уже спалились и так вам и надо, добро пожаловать на отсидку. :) Поделом - за безграничную глупость.

Более того, мало-мальски продвинутый системный администратор вам легко перекроет кислород - и поделом, за безграничную наглость. :)

Как заблокировать ZenMate

Новички - не обольщайтесь, адреса точек входа ZenMate не фиксированы. Хотя их значительно - на порядки - меньше, чем точек входа Tor, тем не менее их не полдюжины.

Для их нахождения потребовалось три инструмента: MyIP.ru,  tcpiputils и IP Calculator.

Алгоритм действий был предельно прост.

1. Включаем ZenMate
2. Заходим на MyIP. Записываем адрес.
3. Включаем следующий по порядку location ZenMate. Переходим к точке 2.
4. После записи адресов всех точек посадки туннеля открываем tcpiputils.

И видим следующую картину. Точки приземления - это сети, примерно от /17 до /24. Некоторые точки посадки снабжены PRT-записью secured-by.zenmate.com.

Вот эти сети (на текущий момент):

162.159.244.0 0.0.0.255
78.137.96.0 0.0.7.255
46.165.192.0 0.0.63.255
207.244.64.0 0.0.63.255
178.162.128.0 0.0.127.255
179.43.128.0 0.0.31.255
88.150.192.0 0.0.31.255
31.7.56.0 0.0.7.255
185.12.44.0 0.0.3.255
103.10.197.0 0.0.0.255
37.58.48.0 0.0.15.255
5.152.192.0 0.0.31.255
81.17.16.0 0.0.15.255
199.115.112.0 0.0.7.255
103.10.199.0 0.0.0.255

Да, это уже в формате ACL Cisco ;)

Более внимательный осмотр данных whois показал, что, заблокировав их, вы почти наверняка ничего особо не потеряете (ну, если под бан угодит нужный юзерам сайт, сделаете для одного-единственного адреса исключение ;)).

Что ж, мониторные дрочеры влипли. :)

Заходим на заднюю Cisco нашей инфраструктуры и заводим extended ACL list:


Администраторскую сеть мы пропускаем - в дальнейшем нам может понадобиться ловить новые точки приземления ;), и не забываем финальное разрешающее правило - а то весь интернет обрубите ;)).


Осталось этот ACL повесить на внутренний порт (который смотрит в LAN):


Вот и все, мальчики и девочки.

Инфраструктура сети, в которой все это делалось, изображена на схеме:

Команды, приведенные выше, выполнялись на Cisco 2911, на порту Ge0/1.