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ć
![Embarassed :oops:](./images/smilies/icon_redface.gif)
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.