Freesco, NND, CDN, EOS http://forum.freesco.pl/ |
|
Skrypt dla iptables - co do poprawienia http://forum.freesco.pl/viewtopic.php?f=34&t=18972 |
Strona 1 z 1 |
Autor: | 4Tech [ niedziela, 10 maja 2015, 10:59 ] |
Tytuł: | Skrypt dla iptables - co do poprawienia |
Panowie, jak to jest? Skorzystałem z pewnego rozwiązania i nie jestem przekonany, że działa tak jak powinno. Zrobiłem sobie plik "rc.firewall", który ładuje mi się przy stracie systemu i wszystko byłoby super, gdyby nie to, że z zewnątrz nie można wyświetlić stron serwowanych z tej właśnie maszyny. Plik wygląda następująco: #!/bin/bash echo -e "Ładowanie reguł iptables...\n\n" #Nazwa interfejsu LAN INTIF="eth1" # Adres sieci LAN INTNET="192.168.0.0/24" # Adres IP interfejsu LAN INTIP="192.168.0.1" # Nazwa interfejsu WAN EXTIF="eth0" # Adres IP interfejsu WAN (wykryty) #EXTIP="`/sbin/ifconfig $EXTIF | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`" # Adres IP interfejsu WAN (wpisany) EXTIP="111.222.333.444" #EXTIP="111.222.333.444" UNIVERSE="0.0.0.0/0" # Odkomentowana opcja w /etc/sysctl.conf, więc tu może być zakomentowane echo 1 > /proc/sys/net/ipv4/ip_forward # Wyczyszczenie wszystkich łańcuchów i reguł, określenie domyślnej polityki odrzucania pakietów (DROP). iptables -P INPUT DROP iptables -F INPUT iptables -P OUTPUT DROP iptables -F OUTPUT iptables -P FORWARD DROP iptables -F FORWARD iptables -F -t nat if [ "`iptables -L | grep drop-and-log-it`" ]; then iptables -F drop-and-log-it fi iptables -X iptables -Z # Utworzenie łańcucha DROP. iptables -N drop-and-log-it iptables -A drop-and-log-it -j LOG --log-level info iptables -A drop-and-log-it -j REJECT # Reguły INPUT # Wszystkie połączenia z localhost iptables -A INPUT -i lo -j ACCEPT # Odrzucenie połączeń podszywających się pod lokalne iptables -A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j drop-and-log-it # Protokół ICMP iptables -A INPUT -i $INTIF -p icmp -s $INTNET -d $UNIVERSE -j ACCEPT iptables -A INPUT -i $EXTIF -p icmp -s $UNIVERSE -d $EXTIP -j ACCEPT # Połączeń zwrotne do serwera maskarady na interfejsie LAN iptables -A INPUT -i $INTIF -s $INTNET -d $INTIP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Komunikaty ICMP: ping i echo iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 7 -j ACCEPT iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 7 -j ACCEPT # Zapytania DNS iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 53 -j ACCEPT iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 53 -j ACCEPT # Usługi Samby iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 135 -j ACCEPT iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 139 -j ACCEPT iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 445 -j ACCEPT iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 137 -j ACCEPT iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 138 -j ACCEPT # Protokół SSH iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 1551 -j ACCEPT # Wyświetlanie stron WWW z serwera iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 80 -j ACCEPT # Serwer proxy Squid na interfejsie LAN, port 3128 # iptables -A INPUT -i $INTIF -p tcp --dport 3128 -j ACCEPT # Squid3 transparent bez Dansguardiana - trzeba wtedy odkomentować # iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 3128 # Dansguardian + Squid3 transparent proxy # iptables -A INPUT -i $INTIF -p tcp --dport 8080 -j ACCEPT # iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 8080 # Połączenia przychodzące na interfejs WAN # Połączenia zwrotne do serwera maskarady na interfejsie WAN iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Komunikaty ICMP: ping i echo. iptables -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --dport 7 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s $UNIVERSE -d $EXTIP --dport 7 -j ACCEPT # Odrzucanie i logowanie wszystkich innych połączeń przychodzących # iptables -A INPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it # Przekierowanie portów do komputerów za NATem # eMule TCP # iptables -I FORWARD -p tcp -d 192.168.0.10 --dport 9009 -j ACCEPT # iptables -t nat -I PREROUTING -p tcp -i eth0 -s 0/0 -d 0/0 --dport 9009 -j DNAT --to 192.168.0.10 # eMule UDP # iptables -I FORWARD -p udp -d 192.168.0.10 --dport 9009 -j ACCEPT # iptables -t nat -I PREROUTING -p udp -i eth0 -s 0/0 -d 0/0 --dport 9009 -j DNAT --to 192.168.0.10 # RDP # iptables -I FORWARD -p tcp -d 192.168.0.10 --dport 3389 -j ACCEPT # iptables -t nat -I PREROUTING -p tcp -i eth0 -s 0/0 -d 0/0 --dport 3389 -j DNAT --to 192.168.0.10 # Reguły OUTPUT # Odrzucanie połączeń do sieci LAN z WAN iptables -A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j drop-and-log-it # Wszystkie połączenia localhost iptables -A OUTPUT -o lo -j ACCEPT # Zezwolenie dla LAN iptables -A OUTPUT -o $INTIF -d $INTNET -j ACCEPT # Zezwolenie na DHCP reply typu broadcast - dla MS Visty iptables -A OUTPUT -o $INTIF -p udp -s $INTIP --sport 67 -d $UNIVERSE --dport 68 -j ACCEPT # Zezwolenie dla WAN iptables -A OUTPUT -o $EXTIF -j ACCEPT # Odrzucanie i logowanie wszystkie innych połączeń wychodzących iptables -A OUTPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it # FORWARD: Włączenie routowania, tj. usługi NAT, zwanej maskaradą, czyli IMPASQ. # Routing na interfejsie WAN #iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE # Routowanie ustanowionych połączeń iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Odblokowanie poszczególnych usług # Protokół ICMP iptables -A FORWARD -i $INTIF -p icmp -j ACCEPT # Porty wysokie # iptables -A FORWARD -i $INTIF -p tcp --dport 1024:65535 -j ACCEPT # iptables -A FORWARD -i $INTIF -p udp --dport 1024:65535 -j ACCEPT # Komunikaty ICMP: ping, echo iptables -A FORWARD -i $INTIF -p tcp --dport 7 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 7 -j ACCEPT # Usługa DNS iptables -A FORWARD -i $INTIF -p tcp --dport 53 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 53 -j ACCEPT # Protokół SSH iptables -A FORWARD -i $INTIF -p tcp --dport 1551 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 1551 -j ACCEPT # HTTP-FORWARD-OK # HTTP -- jeśli wyłączony jest squid i dansguardian, poniższe trzeba odkomentować iptables -A FORWARD -i $INTIF -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 80 -j ACCEPT # HTTPS iptables -A FORWARD -i $INTIF -p tcp --dport 443 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 443 -j ACCEPT # FTP iptables -A FORWARD -i $INTIF -p tcp --dport 20:21 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 21 -j ACCEPT # Poczta iptables -A FORWARD -i $INTIF -p tcp --dport 25 -j ACCEPT # smtp iptables -A FORWARD -i $INTIF -p tcp --dport 110 -j ACCEPT # pop3 iptables -A FORWARD -i $INTIF -p tcp --dport 143 -j ACCEPT # imap iptables -A FORWARD -i $INTIF -p tcp --dport 465 -j ACCEPT # legacy secure SMTP iptables -A FORWARD -i $INTIF -p tcp --dport 587 -j ACCEPT # smtp Submission iptables -A FORWARD -i $INTIF -p tcp --dport 993 -j ACCEPT # imap ssl iptables -A FORWARD -i $INTIF -p tcp --dport 995 -j ACCEPT # pop3s # Odrzucanie i logowanie wszystkich pozostałych połączeń. iptables -A FORWARD -j drop-and-log-it echo -e "Ładowanie reguł iptables zakończone!\n\n" Co zrobiłem nie tak jak powinienem? Może kolejność ładowania reguł, czy może jest coś, co wyklucza się nawzajem ? Nie znam dokładnie szczegółów iptables i może własnie w tym leży cały szkopuł... Może czas się nauczyć Przepraszam za to dość lamerskie pytanie, ale bardzo podobne rozwiązanie śmigało mi na NND i innych distro. Fakt, że zmieniałem trochę ten pliczek i mogłem coś popientrolić Specjalnie zostawiłem wszystkie komentarze i opcje konfiguracji, żeby było widać co można zmienić. Łącze mam ze stałym adresem IP (jak widać) przydzielanym przez DHCP od ISP. Wpisane mam statycznie i to działa. Zapewne po udzielonej podpowiedzi usunę adresy. |
Autor: | Maciek [ niedziela, 10 maja 2015, 17:30 ] |
Tytuł: | Re: Skrypt dla iptables - co do poprawienia |
Złamana została zasada KISS (Keep It Simple Stupid). Prosta i działająca reguła: iptables -A INPUT -p tcp -i $EXTIF --dport 80 -j ACCEPT gdzie $EXTIF to interfejs zewnętrzny (najczęsciej eth0)/ Co ona robi? Działa na wejściu (INPUT) dotyczy pakietów tcp, które przychodzą na interfejs zewnętrzny na port 80 i są akceptowane. Twoja reguła: iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 80 -j ACCEPT Działa na wejściu (INPUT) interfejsu LAN i dotyczy pakietów tcp przesyłanych z 192.168.0.0/24 kierowanych na adres 0.0.0.0/0 na porcie 80 i to jest akceptowane. Nie wydaje ci się że masz tę regułkę cokolwiek idiotyczną? Prawdę powiedziawszy wątpię, żeby którakolwiek z tych regułek wejścia (INPUT) w powyższym pliku mogła działać. Chyba, że właśnie reguły iptables zmieniły diametralnie swoje działanie. Iptables jest jak matematyka, tu nie ma opcji "bardzo podobne rozwiązanie". Niewątpliwie warto się tego nauczyć, bo w przeciwnym razie nie będziesz adminem tylko małpą z brzytwą. Oczywiście można tak egzystować, sam prowadziłem kilka serwerów przez cztery lata jako małpa z brzytwą (tzn. z firewallem Zciecha dla NND), ale przynajmniej nie próbowałem tej brzytwy ostrzyć po swojemu. |
Autor: | 4Tech [ niedziela, 10 maja 2015, 19:09 ] |
Tytuł: | Re: Skrypt dla iptables - co do poprawienia |
Dziękuję. Przyjąłem do wiadomości Czas się nauczyć choćby właśnie tych podstaw |
Autor: | Maciek [ poniedziałek, 11 maja 2015, 22:31 ] |
Tytuł: | Re: Skrypt dla iptables - co do poprawienia |
Zdecydowanie polecam. Ja sam załapałem się na szkolenie UE, które większość informatyków zawodowych określiła jako trudniejsze niż ich studia. Fakt, nie było łatwe. A na dodatek nie było płatne, więc nie było zasady "płacę, więc wymagam" i nie wszyscy zdali końcowy egzamin. |
Strona 1 z 1 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |