Раздумывая на досуге о наболевшем вопросе как заблокировать Skype, пришла идея,
может она здесь уже описывалась, но всё таки решил поделиться личным опытом,
может кому и пригодится.
Первый раз заблокировать Skype удалось путём перекрытия всех не нужных портов и
кое каких правил в прокси squid, которые не давали соединятся по ip-адресам
методом CONNECT. Но это не самый лучший вариант, так как блокируется и всё
остальное, icq, маил агенты и т.п.
Новая идея основана на отслеживании и блокировке IP, на которые пытается
соединиться Skype. И так, как я это делал (шлюз работает под управлением
FreeBSD 8.1):
1. Нужен какой ни будь компьютер с Windows и установленным скайпом, желательно последней версии.
2. Отключаем на ПК все программы, которые могли бы обратиться в интернет,
windows update и всё остальное (что бы эти адреса не попали в дальнейшем в
список блокируемых).
3. Нужно включить скайп и залогиниться, что бы он взял с сервера базу
ip-адресов, на которые можно соединяться. После этого выключаем его.
4. На шлюзе настраиваем фаервол, что бы он блокировал весь сетевой трафик ПК с протоколированием:
ipfw add 50 deny log logamount 10000000 all from ip_машины to any
пояснение: все обращение с нашей машины будут сыпаться с запретом в лог, у меня /var/log/all.log.
5. Включаем сбор логов и отсеиваем в отдельный файл:
tail --f /var/log/all.log | grep ipfw: 50 > /usr/skype.ip
6. Включаем Skype на нашем компьютере и пытаемся залогиниться.
получаем в файле skype.ip примерно следующее:
Jul 9 14:34:10 server kernel: ipfw: 50 Deny UDP 192.168.3.41:40335 217.114.226.118:37950 in via rl0
Jul 9 14:34:11 server kernel: ipfw: 50 Deny UDP 192.168.3.41:40335 87.228.19.207:15134 in via rl0
Jul 9 14:34:12 server kernel: ipfw: 50 Deny UDP 192.168.3.41:40335 95.52.139.143:52195 in via rl0
Jul 9 14:34:12 server kernel: ipfw: 50 Deny UDP 192.168.3.41:40335 95.236.12.233:15842 in via rl0
Это малая часть моего примера из файла. Там больше записей.
7. После того, как скайп сказал, что не может соединиться, выключаем его,
выключаем сбор логов и удаляем наше блокирующее правило под номером 50.
8. Теперь нам нужно из всей этой каши отобрать IP, на которые обращался скайп и
заблокировать в фаерволе. Я написал не большой скрипт, создаём файлик и пишем
туда следующее:
# Очищаем таблицу 1, если таковая существует.
ipfw table 1 flush
# Запускаем считывание ip адресов(сортируем и отбираем только уникальные записи,
# потому что могут быть повторяющиеся), куда стучался скайп.
awk '{print ($11)}' /usr/skype.ip | sed 's#:.*##' | sort | uniq | while read ip;
# Добавляем поочерёдно извлечённые адреса в таблицу 1.
do ipfw table 1 add $ip
done
9. Запускаем наш скрипт, если всё сделано верно, то таблица под номером 1
должна была заполниться адресами. Это можно проверить командой
ipfw table 1 list
10. Всё, у нас есть таблица ip-адресов, куда соединялся скайп, теперь остаётся
только написать правило:
ipfw add 50 deny all from ip_машины to table\(1\)
11. Включаем скайп на нашей машине и проверяем, что скайп не может залогиниться.
Вот в принципе и всё. Проделав это, удалось заблокировать скайп, без вреда для
других программ. Да и ещё, нужно настроить сквид, что бы тот блокировал попытку
соединения вида CONNECT по ip-адресам. Если ваши пользователи знают адрес
прокси сервера и порт, то они могу указать это в скайпе и тот спокойно будет
работать через прокси. Как это сделать есть масса статей в интернете.
И ещё нужно не забывать, что скайп может соединиться с сервером через другой
компьютер, на котором запущен скайп и есть доступ в интернет. Они называются
супернодами. Но у меня это не вышло, я запустил скайп на своём компьютере,
залогинился и закрыл доступ другому, тот второй не смог соединиться.
Есть много способов вычислить адреса на которые стучится скайп. Мой пример -
это один из вариантов и он проверен. Как часто обновляется база ip адресов я не
знаю, но если эту операцию проделывать несколько раз в неделю, мне кажется
можно поддерживать базу ip адресов в актуальном состоянии.
|