Blokowanie TeamViewer’a z wykorzystaniem DNS (bind) i iptables

Konrad Kowalski
Blokowanie Team Viewer'a

Prędzej czy później administrując siecią natrafimy na problem związany z TeamViewer’em. Program ten umożliwia użytkownikom zdalne kontrolowanie systemu poprzez Internet i to w dodatku bez konieczności instalacji serwera/klienta na dysku twardym komputera. Udostępnienie pulpitu komputera przez Internet (mimo, że zahasłowane) może stanowić poważne zagrożenie dla administrowanej przez nas sieci. W tym artykule przedstawione zostały sposoby zwalczania oprogramowania tego typu.

Blokowanie TeamViewer’a na poziomie DNS (bind)

Pierwszym sposobem blokowania TeamViewer’a jest serwer DNS. W poniższym przykładzie przekonfigurujemy linuksowy serwer DNS – Bind, dodamy do niego odpowiednie strefy DNS uniemożliwiające prawidłowe rozwiązanie nazw z domeny teamviewer.com.

Do pliku gdzie zdefiniowaliśmy obsługiwane przez binda strefy (w Debianie jest to plik /etc/bind/named.conf.local) dodajemy nową strefę teamviewer.com

//Blokowane Domeny
zone "teamviewer.com" {
    type master;
    file "/etc/bind/master/blokowane";
    notify yes;
    allow-transfer { key rndc-key; };
};

Jeśli nie macie slave, ani nie wykorzystujecie DNSSEC możecie wyrzucić linijki:

notify yes;
allow-transfer { key rndc-key; };

Następnie tworzymy plik ze strefą TeamViewer’a. Wpisujemy do niego informacje, „że wszystko co jest związane z domeną teamviewer.com” powinno zwracać adres localhost’a (127.0.0.1).

Zawartość plik strefy: /etc/bind/master/blokowane

$TTL 1D
@               IN      SOA     ns1.kowalsio.com. root.kowalsio.com. (
                                2013030801  ; serial
                                86400       ; refresh (1 day)
                                7200        ; retry (2 hours)
                                3600000     ; expire
                                86400       ; minimum (1 day)
                                )
@               IN      NS      ns1.kowalsio.com.
@               IN      NS      ns2.kowalsio.com.
@               IN      A       127.0.0.1
*               IN      A       127.0.0.1

Restartujemy binda i sprawdzamy czy wszystko działa jak należy:

Domena główna:
dig teamviewer.com

;; QUESTION SECTION:
;teamviewer.com.                        IN      A

;; ANSWER SECTION:
teamviewer.com.         86400   IN      A       127.0.0.1

Cokolwiek nawet nie istniejąca subdomena w domenie teamviewer.com:
dig cokolwiek.teamviewer.com

;; QUESTION SECTION:
;cokolwiek.teamviewer.com.      IN      A

;; ANSWER SECTION:
cokolwiek.teamviewer.com. 86400 IN      A       127.0.0.1

Jak widzimy w przykładzie każdy zwracany przez serwer DNS adres IP związany z Teamviewer’em to 127.0.0.1 (o to właśnie nam chodziło)

Na komputerze przy próbie użycia TeamViewer’a pojawi się następujący komunikat:

TeamViewer zablokowany

TeamViewer zablokowany

A więc osiągnęliśmy efekt na jakim nam zależało.

Skuteczność rozwiązania

Rozwiązanie jest dość skuteczne dla mniej zaawansowanych użytkowników. Jeżeli mamy w naszej sieci bardziej techniczne osoby mogą one zmienić sobie w ustawieniach sieciowych serwer DNS i nasza blokada przestanie funkcjonować. Ale mimo wszystko nie stoimy na straconej pozycji gdyż w takim przypadku możemy zablokować ruch wychodzący np. przy pomocy iptables (port 53) do innych serwerów DNS niż nasze wewnątrz sieciowe (tutaj uważajcie aby nie zbanować własnych serwerów DNS, one muszą mieć możliwość komunikacji ze światem).

Rozwiązanie ostateczne

Gdyby jednak nasi użytkownicy dalej znajdowali jakiś sposób na używanie TeamViewer’a (np. wpisanie adresów IP i nazw serwerów TeamViewer’a w pliku hosts na własnej maszynie), jako rozwiązanie ostateczne możemy zastosować iptables. TeamViewer do swojego działania wykorzystuje w pierwszej kolejności port 5938, gdy połączenie nie jest możliwe następują kolejne próby połączenia na portach 80 i 443.

Jako, że ruch wychodzący na porty 80 i 443 raczej ciężko jest zablokować w pierwszej kolejności warto zająć się portem 5938 (najlepiej wprowadzić logowanie oraz blokadę ruchu)

iptables -A FORWARD -p udp --dport 5938 -j LOG --log-prefix "TW: "
iptables -A FORWARD -p tcp --dport 5938 -j LOG --log-prefix "TW: "
iptables -A FORWARD -p udp --dport 5938 -j DROP
iptables -A FORWARD -p tcp --dport 5938 -j DROP

Następnym krokiem jest przegadanie zgromadzoych logów i wyłapywanie konkretnych podsieci wykorzystywanych przez TeamViewer’a, np. 178.77.120.0 – 178.77.120.127 i sukcesywnie ich blokowanie:

iptables -A FORWARD -d 178.77.120.0/25 -j DROP

2 komentarze

Możesz dodawać komentarze do tego artykułu.


  • Na pewno dobry sposób na niesfornych pracowników 😉

    luk_sol 5 lat temu Odpowiedz


  • Thank you very much for this excellent article :-). I’ve been searching for that solution a very long time.

    Without „Polish to German translation – ImTranslator.net” – no chance for me. I recommend to publish this article in english.

    A final tip from me: change 127.0.0.1 to 46.163.100.220 (the real ip-address of http://www.teamviewer.com). If a user performs a ping he will receive a plausible answer. 127.0.0.1 is a note on our solution…

    Regards from your neighbor in Germany
    Frank

    Frank 4 lata temu Odpowiedz


Dodaj komentarz