Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Zmienne IP, moja walka

Cześć wszystkim. Zabrałem się za kolejny wpis. Przechodzę do sedna :).

Posiadam vps, postawiłem na nim serwer TeamSpeak. Chciałem odpowiednio zabezpieczyć serwer. Doradzono mi abym zablokował dostęp do query_port. Wprowadziłem odpowiednie reguły do firewalla, żaden problem. Niestety aby zarządzać serwerem np. za pomocą programu YaTQA. Muszę mieć do niego dostęp. W przypadku zmiennego IP zaczynają się schody. Każdy zmiana ip, zamienia regułę w coś bezużytecznego.

Taktyka


  • Sprawdzam czy router wspiera funkcje DDNS
  • Konfiguruje domene
  • Korzystam z gotowego skryptu po stronie vps

Sprawa wygląda dość prosto, zaczynam pracę.

r   e   k   l   a   m   a

DDNS, pierwsze starcie

Włączenie funkcji DDNS i poprawne skonfigurowanie, bardzo ułatwi mi pracę. Domena nie będzie miała stałego adresu ip, jeśli moje ip ulegnie zmianie. Dana domena automatycznie zaktualizuje swój adres numeryczny. Czyli osoba znająca nazwę mojego hosta nie przejmuje się gdy mój adres IP ulegnie zmianie.
Tworzę hosta DDNS, osobiście wybrałem no-ip. Założyłem na stronie konto a następnie utworzyłem swój własny hostname.

Ustawienia po stronie routera (netiaspot).

  • Zakładka Usługi>DDNS>Nowy wpis dynamicznego DNS>Uzupełniam dane
  • Sprawdzam poprawność konfiguracji.

  • Windows+R>CMD>ping -n 5 moja_domena.ddns
  • Wynik:


    C:\Users\KrzychuPC>ping -n 5 moja_domena.ddns

    Pinging tabaluga.ddns.net [scisle.tajne.0.0] with 32 bytes of data:
    Reply from scisle.tajne.0.0: bytes=32 time<1ms TTL=64
    Reply from scisle.tajne.0.0: bytes=32 time<1ms TTL=64
    Reply from scisle.tajne.0.0: bytes=32 time<1ms TTL=64
    Reply from scisle.tajne.0.0: bytes=32 time<1ms TTL=64
    Reply from scisle.tajne.0.0: bytes=32 time<1ms TTL=64

    Ping statistics for scisle.tajne.0.0:
    Packets: Sent = 5, Received = 5, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

    C:\Users\KrzychuPC>

    Gra muzyka.

    Konfiguracja po stronie VPS

    Czas na skrypt który automatycznie co 5 minut będzie sprawdzał adres ip i jeśli ulegnie on zmianie, wprowadzi automatycznie odpowiednią regułę do iptables.

    Skrypt odnaleziony.

    Źródło skryptu.
    http://rdstash.blogspot.ch/2013/09/allow-host-with-dynamic-ip-through.html

    #!/bin/bash
    
    DYNHOST=$1
    DYNIP=$(host $DYNHOST | grep -iE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" |cut -f4 -d' '|head -n 1)
    
    # Exit if invalid IP address is returned
    case $DYNIP in
    0.0.0.0 )
    exit 1 ;;
    255.255.255.255 )
    exit 1 ;;
    esac
    
    # Exit if IP address not in proper format
    if ! [[ $DYNIP =~ (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]) ]]; then
    exit 1
    fi
    
    # If chain for remote doesn't exist, create it
    if ! /sbin/iptables -L $DYNHOST -n >/dev/null 2>&1 ; then
    /sbin/iptables -N $DYNHOST >/dev/null 2>&1
    fi
    
    # Check IP address to see if the chain matches first; skip rest of script if update is not needed
    if ! /sbin/iptables -n -L $DYNHOST | grep -iE " $DYNIP " >/dev/null 2>&1 ; then
    
    
    # Flush old rules, and add new
    /sbin/iptables -F $DYNHOST >/dev/null 2>&1
    /sbin/iptables -I $DYNHOST -s $DYNIP -j ACCEPT
    
    # Add chain to INPUT filter if it doesn't exist
    if ! /sbin/iptables -C INPUT -t filter -j $DYNHOST >/dev/null 2>&1 ; then
    /sbin/iptables -t filter -I INPUT -j $DYNHOST
    fi
    
    fi

    Czas na edycję skryptu.

    Przypisałem zmiennej nazwę mojej domeny.

  • DYNHOST=moj.ddns.net

  • Następnie ustawiam regułę która ma zostać wprowadzona do łańcucha.

  • /sbin/iptables -I $DYNHOST -p tcp -s $DYNIP --dport 13640 -j ACCEPT

  • Wprowadzam reguły do zapory. Oczywiście są one nadal dostępnie po restarcie serwera.

    iptables -A INPUT -i eth0 -p tcp -s 208.167.241.190 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 208.167.241.190 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 208.167.241.186 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 208.167.241.183 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 208.167.241.189 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 108.61.78.147 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 108.61.78.148 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 108.61.78.149 --dport 13640 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp -s 108.61.78.150 --dport 13640 -j ACCEPT
    iptables -I INPUT -i lo -p tcp -d 127.0.0.1 --dport 13640 -j ACCEPT
    iptables -A INPUT -p TCP --dport 13640 -j DROP
    iptables -A INPUT -p UDP --dport 13640 -j DROP

    Skrypt będzie uruchamiany co 5 minut na vps.

    Wpis zamieszczony w crontab

  • */5 * * * * root /root/skrypty/dynamic_ip.sh > /dev/null 2>&1

  • Wynik polecenia

  • # iptables -L INPUT -V
  • Chain INPUT (policy ACCEPT 3022 packets, 204K bytes)
    pkts bytes target prot opt in out source destination
    373K 26M moj.ddns.net all -- any any anywhere anywhere
    259 14484 fail2ban-ssh tcp -- any any anywhere anywhere multiport dports ssh
    259 14484 fail2ban-ssh tcp -- any any anywhere anywhere multiport dports ssh
    259 14484 fail2ban-ssh tcp -- any any anywhere anywhere multiport dports ssh
    0 0 ACCEPT tcp -- eth0 any www0.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any www0.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any www6.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any cache3.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any cache4.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any scanner1.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any scanner2.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any scanner3.gametracker.com anywhere tcp dpt:13640
    0 0 ACCEPT tcp -- eth0 any scanner4.gametracker.com anywhere tcp dpt:13640
    6 312 DROP tcp -- any any anywhere anywhere tcp dpt:13640
    0 0 DROP udp -- any any anywhere anywhere udp dpt:13640 

    Skrypt jako tako działa. Nierówna walka dobiegła końca. Nagłówek "Taktyka" nie sprawdził się do końca. Ogarnięcie wszystkiego zajęło mi sporo więcej czasu niż zakładałem.

    Podsumowanie

    Rozwiązanie działa dobrze, gotowy skrypt ułatwił mi mocno zadanie. Zawsze pozostanę amatorem jeśli chodzi o linuxa. Dlatego jestem pewny że dla domorosłego administratora, wpis może zawierać same herezje. Ponownie pozdrawiam czytelników i zachęcam do komentowania.

    Pozdrawiam Over. 

    linux bezpieczeństwo serwery

    Komentarze