WildCard Masking – Обратная (Инверсная) маска

Существующая маска для IP адреса выросла из классового деления адресов, на заре эпохи IP:

 Класс A: 8 бит для номера сети 24 бита для номера хоста
 Класс B: 16 бит на сеть и 16 бит на хост
 Класс C: 24 бита на сеть 8 бит на хост

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

IP адрес, десятичное: 10. 10. 0. 1
IP адрес, двоичное: 00001010.00001010.00000000.00000001
Маска, двоичное: 11111111.11111111.11111100.00000000
Маска, десятичное: 255. 255. 252. 0

Представление маски подобным образом, вполне, соотносится с термином битовой маски, т.е. единицы и нули определяют действия над конкретными битами в исходном числе, но плохо соотносится с форматом IP адреса – номер сети всегда определяется битами вначале, номер хоста битами в конце. Поэтому представление маски в виде 32-х битного поля является избыточным. Для однозначного определения маски можно определить только количество подряд идущих единиц с начала IP адреса от 0 до 32 – префиксное обозначение, обычно записывается через дробь после IP адреса: для примера выше 10.10.0.1/22 – 22 бита номер сети и 32-22=10 бит номер хоста. Если говорит про IPv6 адрес, то там определяется только префиксная запись маски/адреса – 2001:d8:a15e::1/48

Теперь представим маску таким образом, чтобы единицы определяли те биты в IP адресе которые формируют номер хоста, а нули те биты которые формируют номер сети, в результате получаем инверсную маску:

IP адрес, десятичное: 10. 10. 0. 1/22
IP адрес, двоичное: 00001010.00001010.00000000.00000001
Маска, двоичное: 11111111.11111111.11111100.00000000
Инверсная маска, двоичное: 00000000.00000000.00000011.11111111
Маска, десятичное: 255. 255. 252. 0
Инверсная маска, десятичное: 0. 0. 3. 255

Это то что умеет делать любой, или почти любой, сетевой калькулятор, здесь не двоичная арифметика, точнее не арифметика, а базовые манипуляции по переводу чисел между системами счисления.

Получение инверсной маски из прямой, и обратное действие осуществляется инвертированием битового поля – замена 0 на 1, а 1 на 0. Если использовать десятичное представление то получение инверсной маски вычисляется следующим образом: от 255 отнимается число соответствующее значению октета в прямой маске, для примера выше:

  255.255.255.255
- 255.255.252. 0
=   0.  0.  3.255

Перевод из инверсной в прямую, также производится вычитанием из 255 значение октета соответствующего инверсной маске:

  255.255.255.255
-   0.  0.  3.255
= 255.255.252. 0

Используя термин инверсная маска, я умышленно исказил общепринятое название русскоязычного термина – обратная маска (invers mask, wildcard mask) – потому что обратная маска это гораздо более мощный механизм чем просто другое обозначение битов для нумерации сети и хоста в IP адресе. Обратная маска не обязана содержать подряд идущие единицы или нули, и единицы это не просто обозначение области хоста в IP адресе. Единицы это обозначение битов в IP адресе, которые могут меняться при проверке условий, а нули фиксируют неизменные биты. То есть русскоязычный термин обратная маска больше соответствует «wildcard mask», нежели «invers mask», хотя в технической документации употребляется оба в одинаковых смыслах.

Область применения обратной маски это условные операции с IP адресами в cisco like интерфейсе и идеологии (не только cisco устройства). К этим областям относятся в частности списки доступа (ACL) – позволяет создавать не просто условия хост из этой сети, а гораздо более гибкие правила и определение сетей, а также в конфигурировании протоколов маршрутизации, OSPF например – позволяет создавать компактные правила для анонса не подряд идущих сетей.

Решим задачу запрета доступа с нечётных хостов из сети 192.168.0.0/24 куда либо. Если в нашем распоряжении есть только прямая маска, то нам надо составить правило на каждое из нечётных чисел в этой сети. От 192.168.0.1 до 192.168.0.253. IP 192.168.0.255 является широковещательным адресом и нам его обрабатывать не надо. Получаем (в нотации cisco):

access-list 101 deny ip 192.168.0.1 255.255.255.255 any
 (255.255.255.255 можно заменить на специально слово host, сделаем это)
access-list 101 deny ip host 192.168.0.1 any
access-list 101 deny ip host 192.168.0.3 any
access-list 101 deny ip host 192.168.0.5 any
access-list 101 deny ip host 192.168.0.7 any
…
access-list 101 deny ip host 192.168.0.93 any
…
access-list 101 deny ip host 192.168.0.253 any
access-list 101 permit ip any any

Итого: 128 строчек.

В конце мы разрешили доступ всему что мы не запретили. Теперь надо ассоциировать этот ACL с нужным интерфейсом, Fa0/1 например:

int fa0/1
ip access-group 101 in

Попробуем сократить полученный ACL, используя то свойство, что нечётное число в двоичном представлении всегда имеет значение 1 в нулевом разряде.

192.168.0.0  = 11000000.10101000.00000000.0000000|0 - чёт.
192.168.0.1  = 11000000.10101000.00000000.0000000|1 - не чёт.
192.168.0.2  = 11000000.10101000.00000000.0000001|0 - чёт
192.168.0.3  = 11000000.10101000.00000000.0000001|1 - не чёт
192.168.0.4  = 11000000.10101000.00000000.0000010|0 - чёт
192.168.0.5  = 11000000.10101000.00000000.0000010|1 - не чёт
192.168.0.6  = 11000000.10101000.00000000.0000011|0 - чёт
192.168.0.93 = 11000000.10101000.00000000.0101110|1 - не чёт

Используем обратную маску, напомню, что 1 – биты которые могут меняться, 0 которые не могут. Маска /24 = 255.255.255.0 в инверсной маске имеет 0.0.0.255 или 00000000.00000000.00000000.11111111. То есть последний октет может меняться во всех битах, но мы знаем что 0 бит надо оставить неизменным, поэтому изменим обратную маску следующим образом: 00000000.00000000.00000000.11111110 или 0.0.0.254. Заметим что если мы преобразуем эту запись в прямую маску, по правилам для инверсной маски то получится 255.255.255.1, что является неверной записью для маски, и с этим сетевой калькулятор уже не справится (или я их не видел).

Значит наша сеть 192.168.0.0/24 должна в последнем октете нулевом бите всегда иметь 1, то есть 192.168.0.1 с обратной маской 0.0.0.254.

Сеть 192.168.0.1, двоичное:         11000000.10101000.00000000.00000001
Обратная маска 0.0.0.254, двоичное: 00000000.00000000.00000000.11111110

Единицы в обратной маске это изменяемые биты в адресе — это биты в последнем октете со 1 по 7, с их использованием и нулевым битом всегда равным единице, мы можем составить любое нечётное число от 1 до 255.

Теперь напишем ACL, т.к. значение IP 192.168.0.255, имеет специальный смысл, разрешим его в первой строчке, иначе оно тоже будет запрещено:

access-list 101 permit ip host 192.168.0.255 any
access-list 101 deny ip 192.168.0.1 0.0.0.254 any
access-list 101 permit ip any any

Итого: 3 строчки вместо 128, можно сказать «Ого!».

Усложним задачу, нечётным должен быть предпоследний октет в подсетях 192.168.0.0/16. То есть для сетей 192.168.1.0/24, 192.168.3.0/24 и т.д. доступ надо закрыть. Изменим нашу обратную маску – инверсная маска для /16 = 0.0.255.255, предпоследний октет, мы по аналогии с первым примером сделаем 254, итого получим 0.0.254.255. И наши сети должны иметь нечётный предпослений октет 192.168.1.0 с обратной маской 0.0.254.255.

Сеть 192.168.1.0, двоичное:           11000000.10101000.00000001.00000000
Обратная маска 0.0.254.255, двоичное: 00000000.00000000.11111110.11111111

И наш ACL, предварительно разрешим IP 192.168.255.255 имеющий специальный смысл:

access-list 101 permit ip host 192.168.255.255 any
access-list 101 deny ip 192.168.1.0 0.0.254.255 any
access-list 101 permit ip any any

А теперь сделаем так чтобы в нечётных подсетях 192.168.0.0/16 в предпоследнем октете должны быть запрещены хосты (числа в последнем октете) с 1 по 63. Задачу с запрещением нечётных предпоследних октетов мы решили в примере выше, теперь посчитаем хосты с 1 по 63. 63 в двоичном представлении равно 111111, следовательно нам надо выбрать числа от 00000001 до 00111111. Предыдущая обратная маска 0.0.254.255 выбирала все числа в последнем октете, то есть могли меняться все 8 бит, нам надо менять всего лишь 6 бит, т.е числа от 0 до 63, итого для последнего октета мы имеем запись 00111111 и вся маска 0.0.254.63.

Сеть 192.168.1.0, двоичное:          11000000.10101000.00000001.00000000
Обратная маска 0.0.254.63, двоичное: 00000000.00000000.11111110.00111111

Значение хоста 0, для нечётных предпоследних октетов, мы разрешим отдельным правилом ACL, т.к они по условию задачи не должны быть запрещены. Для этого случая обратная маска в последнем октете должна жёстко задать одно число, то есть ни один из битов не должен меняться, значит этот октет в обратной маске будет 0.

Сеть 192.168.1.0, двоичное:         11000000.10101000.00000001.00000000
Обратная маска 0.0.254.0, двоичное: 00000000.00000000.11111110.00000000

И наш ACL, правила permit со значением 255 в последнем октете у нас нет, т.к. в запрещающее правило это значение не попадает:

access-list 101 permit ip 192.168.1.0 0.0.254.0 any
access-list 101 deny ip 192.168.1.0 0.0.254.255 any
access-list 101 permit ip any any

В качестве закрепления материала, можно попробовать составить последний ACL с использованием только инверсной маски (т.е. где 0 и 1 идут строго подряд, в начале и соответственно в конце записи), и посчитать выгоду в количестве строчек.

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

Сеть 192.168.0.0, двоичное:         11000000.10101000.00000000.00000000
Обратная маска 0.0.0.254, двоичное: 00000000.00000000.00000000.11111110

ACL короче, потому что IP 192.168.0.255, не попадает в запрещёные:

access-list 101 deny ip 192.168.0.1 0.0.0.254 any
access-list 101 permit ip any any

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

image_pdfimage_print

CDP

CDP (англ. Cisco Discovery Protocol) — проприетарный протокол второго уровня, разработанный компанией Cisco Systems, позволяющий обнаруживать подключённое (напрямую или через устройства первого уровня) сетевое оборудование Cisco, его название, версию IOS и IP-адреса. Поддерживается многими устройствами компании, почти не поддерживается сторонними производителями.

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

#sh cdp neighbors => показать соседей
#sh cdp entry R1 => показать информацию о конкретном устройстве
(conf)#cdp timer 5 => через сколько с опрашивать
(conf)#cdp holdtime 10 => через сколько секунд железка считается умершей (def=180)
(conf)#no cdp run => выключить на всей железке
(config-if)#no cdp enable => на конкретном интерфейсе

Если в сети есть IP-телефоны Cisco – не выключать

image_pdfimage_print

Exim – команды

Работа с логами

/usr/local/exim/bin/exipick -bp | less
/usr/local/exim/bin/exipick -bp | grep user@mail.ru
cat /var/log/exim/main-20100303.log | grep user@mail.ru
less /var/log/maillog
mailq
tailf /var/log/exim/main-20100511.log
service exim restart
grep 'user@mail.ru'  /var/log/maillog
route add 0.0.0.0 0.0.0.0 gateway 82.282.28.2
route add -net 0.0.0.0 netmask 0.0.0.0 gw 82.282.28.2
du /var/store/
eximstats /var/log/exim/mainlog => статистика
eximstats -ne -nr -nt /var/log/exim/mainlog => более расширенная статистика
fgrep YYYY-MM-DD /var/log/exim/mainlog | eximstats => на определенную дату

Работа с очередью

exim -qff => передернуть очередь exim
exim -M email-id => принудительно отправить почтовое сообщение
exim -qf => форсировать отправку писем из очереди
exim -Mvl messageID => Просмотреть лог сообщения
exim -Mvb messageID => Просмотреть тело сообщения
exim -Mvh messageID => Просмотреть заголовки сообщения
exim -Mrm messageID => Удалить сообщение из очереди
exim -Mg messageID => Остановить отправку сообщения и отправить письмо отправителю как недоставленное
exim -bpr | grep «<» | wc -l => Подсчитать количество сообщений в очереди
exim -bpr | grep frozen | wc -l => Подсчитать количество «замерзших» сообщений в очереди
exim -bpr | grep frozen | awk {’print $3′} | xargs exim -Mrm => Удалить «замершие» сообщения из очереди
exim -bpc => подсчитать количество сообщений в очереди
exim -bp => просмотреть сообщения в очереди 
exim -bp | exiqsumm => суммарная информация об очереди. Выводимые колонки: количество, объем, старейшее, последнее, домен.
exim -bt email => сделать трассировку сообщения 
exim -bV => проверить конфигурацию 
exiqgrep -zi | xargs exim -Mrm => удалить все frozen сообщения в очереди 
exiqgrep -xi | xargs exim -Mrm => удалить все сообщения в очереди на отправку 
exim -d => отладка 
exim -d +all -M 1cZuiX-000HgP-0I => отладка конкретного письма 
exim -bP => конфиг 

Очистка очереди при огромных числах писем

service exim stop;
rm -rf /var/spool/exim/input.bak;
mv /var/spool/exim/input /var/spool/exim/input.bak;
mkdir /var/spool/exim/input;
chown mailnull.mail /var/spool/exim/input;
chmod 750 /var/spool/exim/input;
service exim start;
image_pdfimage_print

owncloud – облачное хранилище

Или вот так, но еще стоит создать пользователя:

cd /usr/ports/www/owncloud
make all install clean

Затем открываем файл /usr/local/etc/apache22/httpd.conf и в самом конце файла дописываем:

Alias /owncloud/ «/usr/local/www/owncloud/»
<Directory «/usr/local/www/owncloud/»>
       AllowOverride All
       Order Deny,Allow
       Allow from all
</Directory>

Теперь необходимо создать папку с данными для пользователей. Желательно в папке /home. А также дать права апачу:

mkdir /home/owncloud_data
chown -R www:www /home/owncloud_data

Теперь заходим в браузере http://192.168.1.41/owncloud, прописываем параметры БД, указываем папку хранения пользовательских данных (у нас это /home/owncloud_data) и заканчиваем установку.

Готово. Остальное управление будет осуществляться через web-интерфейс.

image_pdfimage_print
Filed under www

Скрыть или открыть пользователя через реестр

Например. Есть учетная запись Администратор. При добавлении другой записи – эта запись Администратор не появляется на экране приветствия. Что бы это исправить нужно:

Администратор скрыт, хотя его учётная запись включена и в

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList"

он отсутствует.

fig-1

Создать параметр DWORD “Администратор”, но уже со значением “1”.

 

Для Windows 7

Чтобы включить учетную запись Администратора, необходимо запустить командную строку повышенного уровня, щелкнув на иконке командной строки, которая появится в верхнее части меню Start (Пуск) правой кнопкой мыши, а затем выбрав пункт Run as administrator (Запуск от имени администратора).

В открывшемся окне вводим такую команду и нажимаем Enter:

net user Администратор /active:yes

С этого момента учетная запись Администратора будет доступна для выбора на экране Приветствия наряду с другими созданными учетными записями. Используйте ее, как и любую другую учетную запись.

Предостережение: работа из учетной записи главного администратора происходит с низким уровнем защиты, т.к. все программы (соответственно и вирусы) будут запускаться от имени Администратора (как в Windows XP).

image_pdfimage_print

Памятка

Условимся, что у нас есть две подсети 10.0.10.0/24 и 10.0.20.0/24, соединённые между собой маршрутизаторами Cisco. Их внешние (для связи с хостами подсети) адреса 10.0.10.1 и 10.0.20.1 соответственно, а внутренние (для связи между собой) 192.168.1.1 и 192.168.1.2, и названы они gw1 и gw2.

fig1

 

Назначение Действия
Подключение по протоколу telnet (порт 23). > telnet 10.0.10.1
Посмотреть таблицу маршрутов. gw1> show ip route
Перейти в режим суперпользователя (root). gw1> enable
Посмотреть конфигурацию. gw1# show config
Сохранить конфигурацию можно простым копированием выводимых на терминал строк в текстовый файл.
Загрузить конфигурацию можно копированием строк из текстового файла, только предварительно нужно перейти в режим конфигурирования.
Перейти в режим конфигурирования gw1# configure terminal
Добавить маршрут в подсеть 10.0.20.0/24 gw1# configure terminal
gw1(config)# ip route 10.0.20.0 255.255.255.0 192.168.1.2
Добавить маршрут по умолчанию на шлюз 10.0.10.254 gw1(config)# ip route 0.0.0.0 0.0.0.0 10.0.10.254
Удалить маршрут можно той же командой, что и добавляли, только перед командой укажем оператор no gw1(config)# no ip route 0.0.0.0 0.0.0.0 10.0.10.254
Просмотр базы OSPF show ip ospf database
показать маршруты, отфильтровав show ip route | i 192.168.0
посмотреть интерфейсы (bri – краткий режим) show ip int bri

После всех изменений выходим из режима конфигурирования, сохраняем конфигурацию и просматриваем все сделанные нами изменения:

gw1(config)# exit
gw1# wr
gw1# show config

Чтобы прервать выполнение команды, нужно послать символ “^”, т.е. нажать Ctrl + Shift + 6

image_pdfimage_print

Cisco

 

 

image_pdfimage_print
Filed under OSI

RDP c windows 2008 (7) на windows 2003 (XP)

Так вышло что с тонких клиентов подключающихся к Windows 2008 нужно ходить на Windows 2003 сервер по RDP, вроде как простая задача, НО на деле тормозит просто ужасно.

Каким-то волшебным образом выясняется что тормозит только мышь (курсор, нажатия) и лечится это выполнением от администратора на Windows 2008 (или Windows 7) команды:

netsh interface tcp set global autotuninglevel=highlyrestricted

Она выключит систему оптимизации, что-то вроде QoS.

image_pdfimage_print

iptables

Очистка правил в таблице INPUT

iptables -F INPUT

Обнулить счетчики

iptables -Z INPUT

Посмотреть список правил в таблице (v -)

iptables -t nat -L -v

Создать цепочки пользователя

iptables -N tcp_filter
iptables -N udp_filter
iptables -N icmp_filter

Удалить цепочку

iptables -X tcp_filter

Установить политику по умолчанию

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

Посмотреть пронумерованный список правил

iptables -t nat -L -v --line-numbers

Правило для NAT

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

Правило для MAC

iptables -A INPUT -m mac --mac-source 00:12:23:ad:bb:2d -j ACCEPT

Правило для

 

Правило для

 

Block the most common attacks

# iptables -F

First, we start with blocking null packets

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

We told the firewall to take all incoming packets with tcp flags NONE and just DROP them. The next pattern to reject is a syn-flood attack

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Syn-flood attack means that the attackers open a new connection, but do not state what they want (ie. SYN, ACK, whatever). They just want to take up our servers’ resources. We won’t accept such packages. Now we move on to one more common pattern: XMAS packets, also a recon packet.

# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Open up ports for selected services

Now we can allow web server traffic:

# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Now, let’s allow users use our SMTP servers:

# iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

POP3 traffic:

# iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

Now we also need to allow IMAP mail protocol:

# iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

Limiting SSH access

We should also allow SSH traffic, so we can connect to the VPS remotely.
The simple way to do it would be with this command:

# iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
[root@cen752 svm]# w
 10:04:14 up 2 days, 20:42, 5 users, load average: 0,09, 0,07, 0,05
USER   TTY     FROM           LOGIN@   IDLE   JCPU  PCPU   WHAT
root   tty1                   Птн16    2days               -bash
svm    pts/0   gateway        Птн17    2days               sshd: svm [priv]
svm    pts/1   192.168.113.11 Птн16                        sshd: svm [priv]

Now, you can create the firewall rule to only allow traffic to SSH port if it comes from one source: your IP address:

# iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT

Replace YOUR_IP_ADDRESS with the actuall IP, of course.

Right now, we need to add one more rule that will allow us to use outgoing connections
(ie. ping from VPS or run software updates);

# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

It will allow any established outgoing connections to receive replies from the VPS on the other side of that connection. When we have it all set up, we will block everything else, and allow all outgoing connections.

# iptables -P OUTPUT ACCEPT
# iptables -P INPUT DROP

 

*****

Предположим надо заблокировать ip-шник 123.123.123.123, тогда делаем это так:

iptables -A INPUT -s 123.123.123.123 -j DROP
image_pdfimage_print