Раздумывая на досуге о наболевшем вопросе как заблокировать 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 адресов в актуальном состоянии.
URL:
Обсуждается: http://www.opennet.ru/tips/info/2599.shtml