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ę.
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).
[item]Zakładka Usługi>DDNS>Nowy wpis dynamicznego DNS>Uzupełniam dane[/item][img=DDNS_netia]
Sprawdzam poprawność konfiguracji.
[item]Windows+R>CMD>ping -n 5 moja_domena.ddns[/item]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.
[item]DYNHOST=moj.ddns.net[/item] Następnie ustawiam regułę która ma zostać wprowadzona do łańcucha.
[item]/sbin/iptables -I $DYNHOST -p tcp -s $DYNIP -‑dport 13640 -j ACCEPT[/item] Wprowadzam reguły do zapory. Oczywiście są one nadal dostępnie po restarcie serwera.
[code=]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[/code]
Skrypt będzie uruchamiany co 5 minut na vps.
Wpis zamieszczony w crontab
[item]*/5 * * * * root /root/skrypty/dynamic_ip.sh > /dev/null 2>&1[/item] Wynik polecenia
[item]# iptables -L INPUT -V[/item]
[code=]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 [/code]
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.