Iptables i zmienne IP

KrEdEnS | 2018-12-17 20:08:23 UTC | #1

Cześć, mam domenę na noip, która wskazuje na moje zmienne ip. Jest ona podana w regułach iptables (inaczej bym się nie zalogował na vps). Tylko jest jeden problem, gdy mój adres się zmienia iptables nie nie zmienia go automatycznie (domena zamienia automatycznie adres na który wskazuje). I tu pojawia się pytanie jak zrobić, żeby w iptables również moje ip się aktualizowało. Oto skrypt, którym włączam firewalla:

#!/bin/bash
PS3='Please enter your choice: '
options=("Wlaczenie skryptu" "Wylaczenie skryptu" "Informacje o autorze" "Wyjscie")
select opt in "${options[@]}"
do
    case $opt in
        "Wlaczenie skryptu")
            echo -e "\E[32m ============= \033[0m"
            echo -e "\E[32m Włączenie skryptu. \033[0m"
            echo -e "\E[32m ============= \033[0m"

            #Tutaj czyścimy stare reguły w iptables

            iptables -F
            iptables -X
            iptables -t nat -F
            iptables -t nat -X
            iptables -t mangle -F
            iptables -t mangle -X

            echo "Drop na wszytkich portach"

            #Tutaj blokujemy wszytkie porty

            iptables -P INPUT DROP
            iptables -P FORWARD DROP
            iptables -P OUTPUT ACCEPT

            iptables -A INPUT -i lo -j ACCEPT
            iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

            echo "Włączenie ochrony Fail2Ban"

            #Tutaj dodajemy reguły dla aplikacji fail2ban

        iptables -N f2b-sshd
        iptables -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
        iptables -A f2b-sshd -j RETURN

            echo "Porty Teamspeak"

            #Tutaj odblokowywujemy porty niezbędne do poprawnego działania naszego serwera ts

            iptables -A INPUT -p udp -m udp --dport 9987 -j ACCEPT
            iptables -A INPUT -p tcp -m tcp --dport 30033 -j ACCEPT
            iptables -A INPUT -p tcp -m tcp --dport 41144 -j ACCEPT
            iptables -A INPUT -p udp -m udp --dport 2010:2110 -j ACCEPT
            iptables -A INPUT -p tcp -m tcp --dport 2008 -j ACCEPT

            echo "Porty WWW"

            #Tutaj odblokowywujemy porty niezbędne do poprawnego działania serwera www

            iptables -A INPUT -p udp -m udp --dport 80 -j ACCEPT
            iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
           iptables -A INPUT -p udp -m udp --dport 443 -j ACCEPT
           iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

            echo "Porty NaszeIP"

            #Tutaj odblokowywujemy porty dla nas samych abysmy mogli zarządzać serwerem :)

            iptables -I INPUT -p tcp --dport 1:65535 -s _ipvpn_ -j ACCEPT
           iptables -I INPUT -p udp --dport 1:65535 -s _ipvpn_ -j ACCEPT
            iptables -I INPUT -p udp --dport 1:65535 -s _mojadomena.ddns.net_ -j ACCEPT
            iptables -I INPUT -p tcp --dport 1:65535 -s _mojadomena.ddns.net_ -j ACCEPT
            iptables -I INPUT -p tcp --dport 1:65535 -s 127.0.0.1 -j ACCEPT
            iptables -I INPUT -p udp --dport 1:65535 -s 127.0.0.1 -j ACCEPT

            echo "Limitowanie"

            #Tutaj blokujemy pakiety TCP z niepoprawnymi flagami

            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,PSH,URG -j DROP
            iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP

            echo "Blokada flood"

            #Tutaj blokujemy atak typu DoS

            iptables -N syn-flood
            iptables -A INPUT -p tcp --syn -j syn-flood
            iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
            iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j LOG --log-level debug --log-prefix "SYN-FLOOD: "
            iptables -A syn-flood -j DROP
            iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
            iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


            iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

            echo -e "\E[32m ============= \033[0m"
            echo -e "\E[32m Blokowanie zakonczone. \033[0m"
            echo -e "\E[32m ============= \033[0m"
            ;;
        "Wylaczenie skryptu")
            iptables -F
            iptables -X
            iptables -I INPUT -p tcp --dport 1:65535 -j ACCEPT
            iptables -I INPUT -p udp --dport 1:65535 -j ACCEPT
            echo "Skrypt zostal wylaczony"
            ;;
        "Informacje o autorze")
            echo -e "\E[36m Proty skrypt do ip tables pod serwer teamspeak \033[0m"
            echo -e "\E[36m Specjalnie dla LVLUP.PRO \033[0m"
            ;;
        "Wyjscie")
            break
            ;;
        *) echo zla opcja;;
    esac
done

SystemZ | 2018-12-17 19:09:42 UTC | #2

Są przynajmniej dwa rozwiązania jeśli chcesz whitelistować ruch w iptables

Niezmienne IP

Tu możesz zastosować stały adres od operatora lub VPN.

Osobiście mogę polecić darmowy p2p VPN bez takich problemów jak z scentralizowanym i topornym OpenVPN: https://www.zerotier.com/

Dynamiczna aktualizacja adresu IP w iptables

Sam potrzebowałem czegoś podobnego i stworzyłem całkiem prosty skrypt oparty o IPset

https://gitlab.com/snippets/1790809

Jest w stanie surowym więc sugeruję po prostu wziąć z niego co potrzebujesz lub sprawdzić każdą linię przed odpaleniem.


system | 2019-01-18 19:06:18 UTC | #3

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.