|
Iptables - brak internetu na komputerach w sieci
nox - 15-09-2009 17:53
Próbuję pisać samemu firewall, na zasadzie - blokuje wszystko, wpuszczam tylko konkretne usługi. Problem jest taki, że przy tej konfiguracji (Domyślna polityka łańcuchów na DROP): ####### NET FORWARD ####### echo "1" > /proc/sys/net/ipv4/ip_forward # KERNEL NET FORWARD
####### SECURITY ####### echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # ICMP ECHO REQUEST @ BROADCAST ignore echo "1" > /proc/sys/net/ipv4/tcp_syncookies # SYN FLOOD refuse echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route # SOURCE ROUTED PACKETS refuse echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter # SOURCE VALIDATION by REVERSED PATH
####### RULES CHAINS FLUSHING ####### iptables -F # STANDARD CHAINS iptables -t nat -F iptables -t mangle -F
####### RULES CHAINS GENERATE ####### iptables -P INPUT DROP # STANDARD CHAINS POLICY iptables -P OUTPUT DROP iptables -P FORWARD DROP
######## ESTABLISHED CONNECTIONS KEEP ####### iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
####### ALLOWING PROTCOLS ####### #---------- WWW ----------# iptables -A INPUT -p tcp --sport 80 -j ACCEPT # HTTP:80 iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -p tcp --sport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 443 -j ACCEPT # HTTPS:443 iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT #---------- SSH ----------# iptables -A INPUT -p tcp -i eth0 --dport 22 -j DROP # WAN SSH iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT # LAN SSH #---------- DNS ----------# iptables -A INPUT -p udp --sport 53 -j ACCEPT # DNS ALLOW iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A FORWARD -p udp --sport 53 -j ACCEPT iptables -A FORWARD -p udp --dport 53 -j ACCEPT #------ LO Interface -----# iptables -A INPUT -i lo -j ACCEPT # LO ALLOW iptables -A OUTPUT -o lo -j ACCEPT
####### NETWORK ROUTING ####### iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j MASQUERADE # LAN MASQUARADE iptables -A FORWARD -s 192.168.3.0/24 -j ACCEPT
nie działają strony WWW na komputerach w sieci wewnętrznej. nox-debian:~# iptables -L -v Chain INPUT (policy DROP 33 packets, 2931 bytes) pkts bytes target prot opt in out source destination 119 25566 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:www 0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:https 0 0 DROP tcp -- eth0 any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT tcp -- eth1 any anywhere anywhere tcp dpt:ssh 1 61 ACCEPT udp -- any any anywhere anywhere udp spt:domain 0 0 ACCEPT all -- lo any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 15 3138 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 1 52 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www 0 0 ACCEPT tcp -- any any anywhere anywhere tcp spt:www 0 0 ACCEPT udp -- any any anywhere anywhere udp spt:domain 0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:domain 0 0 ACCEPT all -- any any localnet/24 anywhere
Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 126 25733 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 2 120 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https 3 194 ACCEPT udp -- any any anywhere anywhere udp dpt:domain 0 0 ACCEPT all -- any lo anywhere anywhere
Nie bardzo mogę jakoś dojść przyczyny błędu. Prosiłbym o pomoc. #---------- WWW ----------# iptables -A INPUT -p tcp --sport 80 -j ACCEPT # HTTP:80 iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -p tcp --sport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 443 -j ACCEPT # HTTPS:443 iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
Czy FORWARD jest tutaj potrzebne? Czy nie?
bbmti - 17-09-2009 10:21
No jak chcesz udostępniać internet innym komputerom w sieci to musisz mieć łańcuch FORWARD. Dodaj jeszcze coś takiego dla protokołu UDP iptables -A FORWARD -p udp --dport 80 -j ACCEPT
Możesz jeszcze bardziej sprecyzować podając -i ethX
gdzie X to interfejs LAN
Dodałbym jeszcze moduły jeżeli nie są załadowane: modprobe ip_conntrack modprobe ip_nat
michnik - 17-09-2009 13:01
Aby skrypt miał funkcje start | stop opakuj swoje definicje w coś takiego:
#! /bin/sh
IPTABLES=/usr/local/sbin/iptables test -x $IPTABLES || exit 1
case $1 in start | restart | force-reload)
$IPTABLES -F -t nat $IPTABLES -X -t nat $IPTABLES -P INPUT DROP $IPTABLES -F INPUT $IPTABLES -P FORWARD DROP $IPTABLES -F FORWARD
#### #### tu dajesz wpisy iptables ####
echo " koniec." echo 1 >/proc/sys/net/ipv4/ip_forward ;; stop) echo 1 >/proc/sys/net/ipv4/ip_forward echo -en "Usuwam zasady firewall'a ..." $IPTABLES -F -t nat $IPTABLES -X -t nat $IPTABLES -P INPUT ACCEPT
echo " koniec." ;; esac
Nasŧepnie mozesz to uruchamiać z poziomu /etc/init.d jako szeregowy deamon.
Cyphermen - 18-09-2009 20:27
Ja to najpierw zacząłbym od włączenia polityki ,,output'' na ,,accept''.
nox - 20-09-2009 08:40
wedle sugestii nie zmieniło to nic: nox-debian:~# iptables -L -v Chain INPUT (policy DROP 60 packets, 4206 bytes) pkts bytes target prot opt in out source destination 308 22356 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https 0 0 DROP tcp -- eth0 any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT tcp -- eth1 any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT udp -- any any anywhere anywhere udp spt:domain 0 0 ACCEPT all -- lo any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 14 732 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:www 0 0 ACCEPT udp -- any any anywhere anywhere udp spt:domain 0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:domain 0 0 ACCEPT all -- any any localnet/24 anywhere
Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 466 198K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:www 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www 0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:domain 0 0 ACCEPT all -- any lo anywhere anywhere
a włączenie OUTPUT na ACCEPT nie jest tym, co chce, bo wedle poradników, wszystko trzeba DROP i wpuszczać po kolei.
bbmti - 20-09-2009 16:49
ÂŁańcuch OUTPUT służy do przepuszczania/dropowania ruch wychodzącego z serwera. Patrząc na Twoją konfigurację firewalla nie masz logowania więc nawet nie wiesz czy jakaś usługa działająca lokalnie może działać prawidłowo a jeżeli tylko Ty korzystasz z tego serwera to polityka OUTPUT na ACCEPT jest dobrym pomysłem.
Jeżeli chodzi i łańcuch FORWARD to do przepuszczenia ruchu w obie strony dla danego hosta dodałbym iptables -A FORWARD -s 192.168.3.0/24 -d 0/0 -j ACCEPT iptables -A FORWARD -s 0/0 -d 192.168.3.0/24 -j ACCEPT
W ten sposób przepuszczasz cała podsieć, jak to nie skótkuje to można określić doładnie dla każedego adresu: iptables -A FORWARD -s 192.168.3.X -d 0/0 -j ACCEPT iptables -A FORWARD -s 0/0 -d 192.168.3.X -j ACCEPT
Wprowadź wszystkie sugerowane zmiany, przeładuj skrypt, przeprowadź testy i wklej wyniki.
nox - 21-09-2009 07:24
Zrobiłem to o czym mówiłeś, jednak żadna wersja nie pomogła. Próbowałem z ustawieniem: iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT -m state --state NEW
wtedy działa, ale działa każdy protokół a nie tylko WWW, co chcę osiągnąć.
grzesiek - 21-09-2009 19:24
nox - Panie, może najpierw przydałoby się dowiedzieć jak działa protokół http? Przepuszczasz połączenia na port docelowy 80 i 8080 do WAN. Z LAN (źródłowy) na portach 1024-65535.
nox - 25-09-2009 16:45
Witam. Przebudowałem firewall i teraz może będzie łatwiej dojść do tego,, jak blokować konkretne usługi w sieci. echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
#-------------------------------# # CZYSZCZENIE RELUL # #-------------------------------# iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -F -t nat
#-------------------------------# # LO ACCEPT # #-------------------------------# iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A FORWARD -o lo -j ACCEPT
#-------------------------------# # POLACZENIA NAWIAZANE # #-------------------------------# iptables -A INPUT -p all -j ACCEPT -m state --state ESTABLISHED,RELATED
#-------------------------------# # ICPM # #-------------------------------# iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with icmp-port-unreachable iptables -A INPUT -p tcp --dport 1080 -j REJECT --reject-with icmp-port-unreachable
#-------------------------------# # LAN TRUST # #-------------------------------# iptables -A INPUT -i eth1 -p all -j ACCEPT -m state --state NEW
#-------------------------------# # LOGOWANIE # #-------------------------------# iptables -A INPUT -i eth0 -j LOG iptables -A FORWARD -j LOG # RUCH PRZEKAZYWANY
#-------------------------------# # ETH 0 - WAN # #-------------------------------# iptables -A OUTPUT -p udp -o eth0 --dport 53 --sport 1024:65535 -j ACCEPT # DNS iptables -A INPUT -p udp -i eth0 --sport 53 --dport 1024:65535 -j ACCEPT iptables -A INPUT -p tcp -i eth0 --dport 22 --sport 1024:65535 -j REJECT --reject-with icmp-port-unreachable # WAN SSH
#-------------------------------# # ETH 1 - LAN # #-------------------------------# iptables -A FORWARD -i eth0 -o eth1 -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # TYLKO POLACZENIA NAWIAZANE iptables -A FORWARD -i eth1 -o eth0 -p all -j ACCEPT
iptables -A FORWARD -j DROP # RUCH PRZEKAZYWANY
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.3.0/24 -j SNAT --to 87.204.232.82 # SNAT
Wystarczy mi prosty jedne przykład na zasadzie blokowania jednej usługi - na przykład zablokowanie w sieci LAN dostępu do HTTPS(443)
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|