Блокирование TeamViewer средствами Iptables

Автор: Admin | 23.07.2015

TeamViewer_logo_miniБлокировка TeamViewer при помощи Iptables не такая уж тривиальная, но вполне выполнимая задача. Готового решения нет, но понятен принцип, который и описан в данной заметке


Разрабы такие люди, что им обязательно нужны права локального администратора, поэтому могут ставить любой софт себе на машину, в том числе и TeamViewer. Случайно увидел установленную софтину на одной из машин. VPN? Тимвьювером же удобней. Безопасность? Не, не слышали. Пришлось искать способ блокировки на уровне сети.

Как видно из вывода tcpdump'а (нет смысла постить его вывод), для подключения к серверу TeamViewer использует порты 5938, 443, 80. Если 80 и 5938 можно отфильтровать достаточно легко, то с 443 не получится и надо блокировать на уровне соединения с сервером при помощи фаервола, в данном случае Iptables. Запросы от клиента по указанным портам посылаются на ping3.teamviewer.com, затем пробует достучаться до master8.teamviewer.com и если эти хосты недоступны, то операция повторяется. Так же, при повторных подключениях, меняется номер сервера, типа masterX.teamviewer.com, pingX.teamviewer.com, где X - числа от 1 до 10. Просто заблокировать даже один из данных хостов не получается, т.к. они имеют по несколько A записей и, судя по всему, используют Round Robin DNS, а это значит, что при отработке команды

iptables -A FORWARD -d ping3.teamviewer.com -j DROP

в правила подставится только один IP адрес, который разрезолвила система в момент его отработки. Очевидно, что соединение с сервером проходит и надо блокировать все адреса, относящиеся к серверам teamviewer.com.

Логичным было блокировать при помощи расширения string по имени домена:

iptables -A FORWARD -m string --string .teamviewer.com --algo kmp --to 65535 -j DROP
iptables -A FORWARD -p tcp -m string --algo bm --string ".dyngate.com" -j DROP

И этот способ даже блокирует сайт, но клиент все-равно подключается, хоть и не сразу. Причину видно при прослушке трафика. После нескольких попыток коннекта клиент отправляет запрос не по имени ресурса, а прямо по IP адресу, поэтому он не блокируется параметром --string ".teamviewer.com".

Следовательно, надо блокировать каждый IP адрес каждого из доменов на которые отправляются запросы. Сделать то можно следующим образом:

list=$(for i in $(seq 10); do dig +short ping$i.teamviewer.com; done)
list2=$(for i in $(seq 10); do dig +short master$i.teamviewer.com; done)
for i in $(echo $list | sed -e 's/ /,/g'); do
for j in $(echo $list2 | sed -e 's/ /,/g'); do
for k in $(dig +short teamviewer.com); do
iptables -A FORWARD -d $i,$j,$k -j DROP;
done done done

Теперь IP адреса TeamViewer'a недоступны и подключения к серверу не происходит. Не исключено, что завтра добавятся новые домены и их тоже придется вносить в правила. Так же есть доменные имена serverX.teamviewer.com, где X - числа в промежутке от 100 до 1000 и больше. Сколько больше не сильно интересно. Не стал делать это правило проверки по причине долгой их отработки. К тому же, на данный момент для блокирования TeamViewer двух приведенных доменов вполне достаточно.

Этим же способом можно блокировать шифрованное соединение Вконтакте, Одноклассников и прочих youtube'ов.


Рано или поздно понадобится сделать исключение. Для этого, перед запрещающими правилами, надо добавить разрешающее для отдельного хоста:

iptables -A FORWARD -p TCP -s 192.168.0.10 --dport 5938 -j ACCEPT

Теперь у машины с IP адресом 192.168.0.10 будет коннект до серверов TeamViewer'a.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *