Skocz do zawartości
Zaloguj się, aby obserwować  
overkill

Sprawdzanie DDNS i wprowadzenie odpowiedniej reguły do iptables.

Polecane posty

Witam wszystkich użytkowników. Korzystam z usług firmy netia. Posiadam zmienne ip. Skonfigurowałem na urządzeniu netiaspot ddns. Przykładowo gdy utworzyłem serwer ftp na komputerze podczas restartu routera nadal bez problemu użytkownicy z zewnątrz mogli łączyć się przez nazwę domeny z moim serwerem ftp(zmiana ip w niczym nie przeszkadzała). Zastanawiam się czy istnieje możliwość aby debian który stoi na serwerze vps. Mógł np. co 10 minut odpytywać moją domenę ddns i gdy zmianie ulegnie ip automatycznie wczytywał nowy łańcuch do iptables.

 

Przykład użycia:

 

Posiadam server team speak, mam zamiar zablokować komunikację dla portu query dla wszystkich oprócz mojego ip. Niestety posiadam zmienne ip dlatego ta opcja odpada. Odpytuje domene która mam przypisaną do swojego routera, zwraca obecne ip, wprowadza zmodyfikowaną regułe do łańcucha. Bez problemów łączę się na określonym porcie.

 

Bardzo proszę was o pomocne linki, nakierowanie na dobre tory.

 

Z góry dziękuje za pomoc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

http://unix.stackexchange.com/questions/20784/how-can-i-resolve-a-hostname-to-an-ip-address-in-a-bash-script

Tym pobierasz swoje aktualne IP.

Potem dodajesz regułkę z tym IP do iptables, a usuwasz istniejącą. Rozwiązanie typu brute-force, wstawiasz w cron co 1 lub 5 minut i działa.

 

Bardziej zaawansowane to sprawdzenie czy IP w iptables zgadza się z pobranym i jeśli tak to po prostu wyjście, a jak nie, to to co wyżej.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam pozwolę odświeżyć swój temat.

 

Znalazłem na pewnej stronie gotowy skrypt.

 

Źródło skryptu.

 

http://rdstash.blogspot.ch/2013/09/allow-host-with-dynamic-ip-through.html

 

 

Skrypt.

#!/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
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 reguły są nadal aktywne po restarcie serwera vps.

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 uruchamiam za pomocą crona co 5 minut.

 

Wpis 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 
Wszystko działa dobrze. Mój adres ip jest wprowadzany prawidłowo do łańcucha. Chciałbym jednak upewnić się czy waszym zdaniem taki skrypt to dobre rozwiązanie. Jeśli możecie zerknijcie także czy według was ustawienia firewalla są dobre. Chciałem zablokować dostęp do portu query mojego serwera teamsepak. Otworzyć furtkę do niego tylko sobie.

 

Jeśli chodzi o sam serwer vps. Zmieniłem standardowy port, loguje się na konto usera za pomocą klucza, wyłączyłem możliwość logowania za pomocą hasła, zainstalowałem fail2ban i zostawiłem go z domyślną konfiguracja.

 

Z góry dziękuje za pomoc.

Edytowano przez overkill (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×