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

Podobne dokumenty