Firewall i NAT - zgodny tandem
Transkrypt
Firewall i NAT - zgodny tandem
2016/03/26 20:22 1/6 Firewall i NAT - zgodny tandem Firewall i NAT - zgodny tandem Wstęp Na początek polecam inny przewodnik tutaj zamieszczony : Prosty firewall dla stacji roboczej. Dodatkowo, jeśli chcemy wiedzieć o co chodzi z iptables : http://download.piotrkwiatkowski.info/wsti_zsk/iptables.htm http://www.debian.one.pl/howto/iptables/iptables2-pl.html http://linux.howto.pl/artykuly,linux-20-9-0.html Skrypt Uwaga ! Dla prawidłowego działania sesji ftp z wewnętrznej sieci na serwerze zewnetrznym należy dla kernela 2.4 załadować moduł ip_nat_ftp a dla kernela 2.6 - nf_nat_ftp. W tym celu dopisujemy odpowiednio nazwę modułu do /etc/modules. Poniżej skrypt zawierający zahashowane opisy. Nie służy on jednak jako skrypt startowy, tylko do wygenerowania odpowiednich reguł, które są zapisywane przez usługę iptables z pakietu iptablesinit, który należy zainstalować. Jest tak spreparowany, że zmiana adresów IP jest do dokonania przez pojedynczą zmianę na początku skryptu. Kto ma ochotę, może dopisać własne objaśnienia. #!/bin/bash INT_LAN_IP="192.168.1.1" INT_LAN="192.168.1.0/24" EXT_LAN="" EXT_LANM="${EXT_LAN}/23" EXT_IP="11.22.123.54" EXT_IPM="${EXT_IP}/23" IF_LAN="eth1" IF_WAN="eth0" CRESET="\x1B[0m" BIALY="\x1B[37;1m" ROZOWY="\x1B[31;1m" if [ -x /etc/rc.d/init.d/iptables ]; then echo -e "Pakiet ${BIALY}iptables-init${CRESET} jest najprawdopodobniej zainstalowany." service iptables status > /dev/null if [ ${?} -gt "0" ]; then echo -e "${ROZOWY}Coś tu poszło nie tak, skontaktuj się z autorem skryptu.${CRESET}" exit 1 fi else PLD-users.org - http://www.pld-users.org/ Last update: 2008/03/29 09:07 pl:przewodniki:firewall-nat-zgodny-tandem http://www.pld-users.org/pl/przewodniki/firewall-nat-zgodny-tandem echo -e "${ROZOWY}Zainstaluj najpierw pakiet \"${BIALY}iptablesinit${ROZOWY}\".${CRESET}" exit 1 fi iptables -F iptables -X iptables -F -t nat iptables -X -t nat iptables -F -t mangle iptables -X -t mangle # polityka domyslna iptables -P OUTPUT ACCEPT ############## INPUT trafic ############## iptables -P INPUT DROP #Drop invalid iptables -A INPUT -m state --state INVALID -j DROP # Drop non addresed to eth0 IP packed from wan if [ -n "${EXT_LAN}" ] ; then iptables -A INPUT -i ${IF_WAN} -d ! ${EXT_LAN} -s / -j DROP elif [ -n "${EXT_IP}" ] ; then iptables -A INPUT -i ${IF_WAN} -d ! ${EXT_IP} -s / -j DROP fi # Przyjmij bezwarunkowo połączenia z loopback iptables -A INPUT -i lo -j ACCEPT #Ping & Flood # Przyjmij limitowaną ilość pingów iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/s -j ACCEPT # Przyjmij limitowaną ilość odpowiedzi na pingi z zewnątrz iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 30/s -j ACCEPT # Przyjmij limitowaną ilość pakietów rozpoczynających, potwierdzających, kończących i resetujących połączenie iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 20/s -j ACCEPT # Przyjmij połączenia z ethernet już nawiązane iptables -A INPUT -i ${IF_LAN} -p tcp -m state j ACCEPT iptables -A INPUT -i ${IF_LAN} -p udp -m state j ACCEPT iptables -A INPUT -i ${IF_WAN} -p tcp -m state j ACCEPT iptables -A INPUT -i ${IF_WAN} -p udp -m state j ACCEPT http://www.pld-users.org/ po tcp i udp --state ESTABLISHED,RELATED --state ESTABLISHED,RELATED --state ESTABLISHED,RELATED --state ESTABLISHED,RELATED - Printed on 2016/03/26 20:22 2016/03/26 20:22 3/6 Firewall i NAT - zgodny tandem # Przyjmij nowe połączenia z LAN na ssh iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport ssh -m state -state NEW -j ACCEPT # Przyjmij nowe połączenia z LAN na ftp iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport ftp-data -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport ftp -m state -state NEW -j ACCEPT # Przyjmij nowe połączenia z LAN na sambę porty 137, 138, 139, 445 iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport netbios-ns -m state --state NEW -j ACCEPT iptables -I INPUT -p udp -i ${IF_LAN} --dport 137 -m udp -j ACCEPT iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport netbios-dgm -m state --state NEW -j ACCEPT iptables -I INPUT -p udp -i ${IF_LAN} --dport netbios-dgm -m udp -j ACCEPT iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport netbios-ssn -m state --state NEW -j ACCEPT iptables -I INPUT -p udp -i ${IF_LAN} --dport netbios-ssn -m udp -j ACCEPT iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport microsoft-ds -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp -i ${IF_LAN} -s ${INT_LAN} --dport sunrpc -m state --state NEW -j ACCEPT # specjalne: reject ident iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with icmp-portunreachable # Faster Before drop iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable ############## FORWARD trafic ############## iptables -P FORWARD DROP #Ping & Flood # Przepuść limitowaną ilość pingów na zewnątrz iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 30/s j ACCEPT # Przepuść limitowaną ilość odpowiedzi na pingi z zewnątrz iptables -A FORWARD -p icmp --icmp-type echo-reply -m limit --limit 30/s -j ACCEPT # Przepuść limitowaną ilość pakietów rozpoczynających, potwierdzających, kończących i resetujących połączenie iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 20/s -j ACCEPT # Przepuść nawiązane połączenia : LAN - WAN tcp, udp iptables -A FORWARD -i ${IF_LAN} -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT PLD-users.org - http://www.pld-users.org/ Last update: 2008/03/29 09:07 pl:przewodniki:firewall-nat-zgodny-tandem http://www.pld-users.org/pl/przewodniki/firewall-nat-zgodny-tandem iptables -A FORWARD -i ${IF_LAN} -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i ${IF_WAN} -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i ${IF_WAN} -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT # Przepuść nawiązywanie połączenia od LAN z DNS iptables -A FORWARD -i ${IF_LAN} -p tcp --dport domain -m state --state NEW -j ACCEPT iptables -A FORWARD -i ${IF_LAN} -p udp --dport domain -m state --state NEW -j ACCEPT # Przepuść nawiązywanie połączenia od LAN z http iptables -A FORWARD -i ${IF_LAN} -p tcp --dport http -m state --state NEW -j ACCEPT # Przepuść nawiązywanie połączenia od LAN z https iptables -A FORWARD -i ${IF_LAN} -p tcp --dport https -m state --state NEW j ACCEPT # Przepuść nawiązywanie połączenia od LAN z ftp iptables -A FORWARD -i ${IF_LAN} -p tcp --dport ftp-data -m state --state NEW -j ACCEPT iptables -A FORWARD -i ${IF_LAN} -p tcp --dport ftp -m state --state NEW -j ACCEPT # Przepuść nawiązywanie połączenia od LAN z usługami pocztowymi iptables -A FORWARD -i ${IF_LAN} -p tcp --dport smtp -m state --state NEW -j ACCEPT iptables -A FORWARD -i ${IF_LAN} -p tcp --dport smtps -m state --state NEW j ACCEPT iptables -A FORWARD -i ${IF_LAN} -p tcp --dport pop3 -m state --state NEW -j ACCEPT iptables -A FORWARD -i ${IF_LAN} -p tcp --dport pop3s -m state --state NEW j ACCEPT # Zezwól na przepływ przekierowanych (DNAT) pakietów (niżej) na mysql iptables -A FORWARD -d 127.0.0.1 -p tcp --dport mysql -m state --state NEW j ACCEPT # Faster Before drop iptables -A FORWARD -p tcp -j REJECT --reject-with tcp-reset iptables -A FORWARD -p udp -j REJECT --reject-with icmp-port-unreachable # Udostepnianie Internetu dla LAN if [ -n "${EXT_LAN}" ] ; then iptables -t nat -A POSTROUTING -s ${INT_LAN} -o ${IF_WAN} -d / -j SNAT -to-source ${EXT_LAN} elif [ -n "${EXT_IP}" ] ; then iptables -t nat -A POSTROUTING -s ${INT_LAN} -o ${IF_WAN} -d / -j SNAT -to-source ${EXT_IP} else http://www.pld-users.org/ Printed on 2016/03/26 20:22 2016/03/26 20:22 5/6 Firewall i NAT - zgodny tandem iptables -t nat -A POSTROUTING -s ${INT_LAN} -o ${IF_WAN} -d / -j MASQUERADE fi # Przekieruj ruch dla mysql w sieci wewnętrznej iptables -t nat -I PREROUTING -p tcp --dport mysql -d ${INT_LAN_IP} --to-destination 127.0.0.1:3306 -j DNAT # korekcja ttl dla NAT iptables -t mangle -A PREROUTING -i ${IF_WAN} -j TTL --ttl-inc 5 iptables -t mangle -A POSTROUTING -o ${IF_WAN} -j TTL --ttl-set 128 # Zapisujemy reguły i spadamy... ;) service iptables save exit ${?} Objaśnienia dodatkowe Tutaj zamieszczam odpowiedzi na uwagi i pytania zadane przez użytkowników PLD, którzy się ze mną skontaktowali. Jestem dostepny na http://forum.pld-linux.org/ jako Light-I. Skrypt jest przygotowany także na ewentualność, gdy publiczne ip jest DNAT-owane u ISP, wtedy pod EXT_LAN wpisujemy nasze statyczne IP w sieci ISP, a pod EXT_IP ten publiczny adres. Gdy nie ma publicznego adresu, skrypt zapodaje maskaradę (wtedy oczywiście IF_WAN=„pppX”). Oczywiście wtedy EXT_LAN też należy pozostawić puste. Jeśli zaś chodzi o wzelkie kombinacje z wirtualnymi plikami /proc/sys/net/ipv4/* to wystarczy sobie sprawdzić zawartość tych plików, aby stwierdzić, ze nie musimy nic z nimi kombinować, bo całą dobrą robotę już zrobili developerzy PLD, jedyne, co trzeba zrobić na pewno, gdy chcemy mieć internet w lokalnej sieci, to zmienić w /etc/sysctl.conf : net.ipv4.ip_forward = 0 na net.ipv4.ip_forward = 1 Jeśli jakakolwiek z domyślnych wartości w systemie plików /proc nam nie pasuje, to lepiej nie cudaczyć poprzez echo „0” > /proc/…. w jakiejś skrypcinie startowej, tylko zmienić właśnie w tym pliku. From: http://www.pld-users.org/ - PLD-users.org Permanent link: http://www.pld-users.org/pl/przewodniki/firewall-nat-zgodny-tandem Last update: 2008/03/29 09:07 PLD-users.org - http://www.pld-users.org/ Last update: 2008/03/29 09:07 http://www.pld-users.org/ pl:przewodniki:firewall-nat-zgodny-tandem http://www.pld-users.org/pl/przewodniki/firewall-nat-zgodny-tandem Printed on 2016/03/26 20:22