iptables script- Átnéznétek?

Fórumok

Pár napon belül be kel üzemelnem egy szervert, amin egy squid fog müködni transzparens proxy-ként, a gépen még dhcp szolgáltatás fog futni.(+ssh,apache2 stb..)

Átnéznétek az alábbi scriptet hogy milyen hibák vannak benne?
kösszi, fontos lenne
Imre

#!/bin/sh

echo -n 'Configuring firewall '

#allandok
NET_INT=192.168.0.0/255.255.0.0 #belsõ halozatot lefedõ teljes cimtartomany
IFACE_INT=eth0 #belsõ csatolo
IFACE_EXT=eth1 #kulsõ csatolo
IP_GW=192.168.1.1

PORT_SSH_EXT=10000 #SSH external port
MORE_F_TCP_PORTS="544 1755 2628 6881 81"
MORE_F_UDP_PORTS="544 1755"
#544-RealMedia 1755-WindowsMedia 2628-JDictionary 6880-BitTorrent

#IP_INT=192.168.100.1 #belsõ IP cim
IP_INT="`ifconfig $IFACE_INT | grep inet\ addr | cut -f2 -d: | cut -f1 -d\ `"
IP_EXT="`ifconfig $IFACE_EXT | grep inet\ addr | cut -f2 -d: | cut -f1 -d\ `" #külső IP cím

#regi szabalyok tõrlese
iptables -F
iptables --delete-chain
iptables -t nat -F
iptables -t nat --delete-chain
iptables -Z

#alapertelemzetten mindent eldob
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#visszahurkolo engedélyezése
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#tovabbi lancok letrehozasa:
iptables -N security
iptables -N dosattack
iptables -N sinput
iptables -N portscan

#gw elerhetõsege
iptables -A INPUT -s $IP_GW -j ACCEPT
iptables -A OUTPUT -d $IP_GW -j ACCEPT

#Portscan & PoD loggolas
iptables -A security -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "FW: Xmas-tree scan (?) "
iptables -A security -p tcp --tcp-flags ALL NONE -m state --state ! ESTABLISHED -j LOG --log-prefix "FW: Null scan (?) "
iptables -A security -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A security -p icmp --icmp-type echo-request -j LOG --log-prefix "FW: PingofDeath attack (?) "
iptables -A security -p icmp --icmp-type echo-request -j DROP

iptables -A INPUT -j security
iptables -A FORWARD -j security

#DoS tamadasok & portscanek szurese, loggolasa
iptables -A dosattack -p tcp --syn -m limit --limit 8/s -j sinput
iptables -A dosattack -p tcp --syn -j LOG --log-prefix "FW: Syn-Flood attack (?) "
iptables -A dosattack -p tcp --syn -j DROP
iptables -A dosattack -j sinput

#bejovo szabalyok

iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED #jovahagyott kapcsolatok elfogadasa
iptables -A INPUT -j dosattack

iptables -A sinput -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "FW: hidded portscan ? "
iptables -A sinput -p tcp ! --syn -m state --state NEW -j DROP
iptables -A sinput -i $IFACE_INT -p tcp -s $NET_INT --dport 20 -m state --state NEW -j ACCEPT #ftp
iptables -A sinput -i $IFACE_INT -p tcp -s $NET_INT --dport 21 -m state --state NEW -j ACCEPT #ftp
iptables -A sinput -i $IFACE_INT -p udp -s $NET_INT --dport 20 -m state --state NEW -j ACCEPT #ftp
iptables -A sinput -i $IFACE_INT -p udp -s $NET_INT --dport 21 -m state --state NEW -j ACCEPT #ftp
iptables -A sinput -i $IFACE_INT -p tcp -s $NET_INT --dport 22 -m state --state NEW -j ACCEPT
iptables -A sinput -i $IFACE_INT -p tcp -s $NET_INT --dport 3128 -m state --state NEW -j ACCEPT
iptables -A sinput -i $IFACE_INT -p tcp -s $NET_INT --dport 25 -m state --state NEW -j ACCEPT
iptables -A sinput -p tcp --dport 443 -j ACCEPT
iptables -A sinput -p icmp -j ACCEPT
#iptables -A sinput -j LOG --log-prefix "FW: Rejected default (in) "
iptables -A sinput -j REJECT

#kimenõ szabalyok
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT #ftp
iptables -A OUTPUT -p udp --dport 21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 20 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT #dns
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT #http
iptables -A OUTPUT -p udp --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -m state --state NEW -j ACCEPT #ntp
iptables -A OUTPUT -p tcp --dport 123 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT #https
iptables -A OUTPUT -p udp --dport 443 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -d $NET_INT --sport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp -d $NET_INT --sport 25 -j ACCEPT

iptables -A OUTPUT -j LOG --log-prefix "FW: Rejected default (out) "
iptables -A OUTPUT -j REJECT

#tovabbitt szabalyok
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 16/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
iptables -A FORWARD -p icmp -j ACCEPT

iptables -A FORWARD -i $IFACE_INT -p tcp --dport 80 -m state --state NEW,RELATED -j ACCEPT #http
iptables -A FORWARD -i $IFACE_INT -p udp --dport 80 -m state --state NEW,RELATED -j ACCEPT
iptables -A FORWARD -i $IFACE_INT -p tcp --dport 20 -m state --state NEW,RELATED -j ACCEPT #ftp-data
iptables -A FORWARD -i $IFACE_INT -p udp --dport 20 -m state --state NEW,RELATED -j ACCEPT
iptables -A FORWARD -i $IFACE_INT -p tcp --dport 21 -m state --state NEW,RELATED -j ACCEPT #ftp-ctrl
iptables -A FORWARD -i $IFACE_INT -p udp --dport 21 -m state --state NEW,RELATED -j ACCEPT
iptables -A FORWARD -i $IFACE_INT -p udp --dport 53 -m state --state NEW,RELATED -j ACCEPT #dns
iptables -A FORWARD -i $IFACE_INT -p tcp --dport 443 -m state --state NEW,RELATED -j ACCEPT #https
iptables -A FORWARD -i $IFACE_INT -p tcp --dport 25 -m state --state NEW,RELATED -j ACCEPT #smtp
iptables -A FORWARD -i $IFACE_INT -p tcp --dport 43 -m state --state NEW,RELATED -j ACCEPT #whois
iptables -A FORWARD -i $IFACE_INT -p udp --dport 43 -m state --state NEW,RELATED -j ACCEPT #whois

iptables -A FORWARD -i $IFACE_INT -p tcp --dport 110 -m state --state NEW,RELATED -j ACCEPT #pop3
iptables -A FORWARD -i $IFACE_INT -p tcp --dport 123 -m state --state NEW,RELATED -j ACCEPT #ntp
iptables -A FORWARD -i $IFACE_INT -p udp --dport 123 -m state --state NEW,RELATED -j ACCEPT

#Tovabbitasra a MORE_F_TCP_PORTS tombben tarolt portok kinyitasa
if test -n "$MORE_F_TCP_PORTS"
then
for i in $MORE_F_TCP_PORTS
do iptables -A FORWARD -i $IFACE_INT -p tcp --dport $i -m state --state NEW,RELATED -j ACCEPT
done
fi
if test -n "$MORE_F_UDP_PORTS"
then
for i in $MORE_F_UDP_PORTS
do iptables -A FORWARD -i $IFACE_INT -p udp --dport $i -m state --state NEW,RELATED -j ACCEPT
done
fi

#iptables -A FORWARD -j LOG --log-prefix "FW: Rejected default (fwd) "
iptables -A FORWARD -j REJECT

#NAT
iptables -t nat -A POSTROUTING -o $IFACE_EXT -j MASQUERADE

#transzparens proxy engedalyezase
iptables -t nat -A PREROUTING -i $IFACE_INT -s $NET_INT -p tcp --dport 80 -j REDIRECT --to-ports 3128

iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -m limit --limit 60/hour -j LOG --log-prefix "FW: Permitted SSH connect "
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -m limit --limit 60/hour -j DNAT --to $IP_INT:10000
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -j LOG --log-prefix "FW: Unpermitted SSH Connect "
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -j DROP
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT -j DNAT --to $IP_INT:10000

echo 'Done'

Hozzászólások

Miért nem használod a multiport kapcsolót?
Még Csákk Norisz sem bogozza ki hogy mit is akarsz. :)

Szerintem sokkal áttekinthetőbb igy...

iptables -A FORWARD -i $IFACE_INT -p tcp -m multiport --dport http,ftp,smtp -m state --state NEW,RELATED -j ACCEPT

--
maszili

oks, kösszi,átírtam, de még mindig nem jó valami :(

#!/bin/sh

echo -n 'Configuring firewall '
echo "1" > /proc/sys/net/ipv4/ip_forward
#allandok
NET_INT=192.168.0.0/255.255.0.0 #belsõ halozatot lefedõ teljes cimtartomany
IFACE_INT=eth0 #belsõ csatolo
IFACE_EXT=eth1 #kulsõ csatolo
IP_GW=192.168.1.1

PORT_SSH_EXT=10000 #SSH external port
MORE_F_TCP_PORTS="544 1755 2628 6881 81"
MORE_F_UDP_PORTS="544 1755"
#544-RealMedia 1755-WindowsMedia 2628-JDictionary 6880-BitTorrent

#IP_INT=192.168.100.1 #belsõ IP cim
IP_INT="`ifconfig $IFACE_INT | grep inet\ addr | cut -f2 -d: | cut -f1 -d\ `"
IP_EXT="`ifconfig $IFACE_EXT | grep inet\ addr | cut -f2 -d: | cut -f1 -d\ `" #külső IP cím

#regi szabalyok tõrlese
iptables -F
iptables --delete-chain
iptables -t nat -F
iptables -t nat --delete-chain
iptables -Z

#alapertelemzetten mindent eldob
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#visszahurkolo engedélyezése
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#tovabbi lancok letrehozasa:
iptables -N security
iptables -N dosattack
iptables -N sinput
iptables -N portscan

#gw elerhetõsege
iptables -A INPUT -s $IP_GW -j ACCEPT
iptables -A OUTPUT -d $IP_GW -j ACCEPT

#Portscan & PoD loggolas
iptables -A security -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "FW: Xmas-tree scan (?) "
iptables -A security -p tcp --tcp-flags ALL NONE -m state --state ! ESTABLISHED -j LOG --log-prefix "FW: Null scan (?) "
iptables -A security -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A security -p icmp --icmp-type echo-request -j LOG --log-prefix "FW: PingofDeath attack (?) "
iptables -A security -p icmp --icmp-type echo-request -j DROP

iptables -A INPUT -j security
iptables -A FORWARD -j security

#DoS tamadasok & portscanek szurese, loggolasa
iptables -A dosattack -p tcp --syn -m limit --limit 8/s -j sinput
iptables -A dosattack -p tcp --syn -j LOG --log-prefix "FW: Syn-Flood attack (?) "
iptables -A dosattack -p tcp --syn -j DROP
iptables -A dosattack -j sinput

#bejovo szabalyok

iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED #jovahagyott kapcsolatok elfogadasa
iptables -A INPUT -j dosattack

iptables -A sinput -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "FW: hidded portscan ? "
iptables -A sinput -p tcp ! --syn -m state --state NEW -j DROP

iptables -A sinput -i $IFACE_INT -p tcp -s $NET_INT -m multiport --dport 20,21,25,53,80,3128 -m state --state NEW -j ACCEPT
iptables -A sinput -i $IFACE_INT -p udp -s $NET_INT -m multiport --dport 20,21,25,53,80,3128 -m state --state NEW -j ACCEPT

iptables -A sinput -p tcp --dport 443 -j ACCEPT
iptables -A sinput -p icmp -j ACCEPT
#iptables -A sinput -j LOG --log-prefix "FW: Rejected default (in) "
iptables -A sinput -j REJECT

#kimenõ szabalyok
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
iptables -A OUTPUT -p icmp -j ACCEPT

iptables -A OUTPUT -p tcp -m multiport --dport 20,21,25,53,80,110,443 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --dport 20,21,25,53,80,110,443 -m state --state NEW,RELATED -j ACCEPT

iptables -A OUTPUT -p tcp -d $NET_INT --sport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp -d $NET_INT --sport 25 -j ACCEPT

iptables -A OUTPUT -j LOG --log-prefix "FW: Rejected default (out) "
iptables -A OUTPUT -j REJECT

#tovabbitt szabalyok
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 16/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
iptables -A FORWARD -p icmp -j ACCEPT

iptables -A FORWARD -i $IFACE_INT -p tcp -m multiport --dport 20,21,53,80,110,123,443 -m state --state NEW,RELATED -j ACCEPT
iptables -A FORWARD -i $IFACE_INT -p udp -m multiport --dport 20,21,53,80,110,123,44

#Tovabbitasra a MORE_F_TCP_PORTS tombben tarolt portok kinyitasa
if test -n "$MORE_F_TCP_PORTS"
then
for i in $MORE_F_TCP_PORTS
do iptables -A FORWARD -i $IFACE_INT -p tcp --dport $i -m state --state NEW,RELATED -j ACCEPT
done
fi
if test -n "$MORE_F_UDP_PORTS"
then
for i in $MORE_F_UDP_PORTS
do iptables -A FORWARD -i $IFACE_INT -p udp --dport $i -m state --state NEW,RELATED -j ACCEPT
done
fi

#iptables -A FORWARD -j LOG --log-prefix "FW: Rejected default (fwd) "
iptables -A FORWARD -j REJECT

#NAT
iptables -t nat -A POSTROUTING -o $IFACE_EXT -j MASQUERADE

#transzparens proxy engedalyezase
iptables -t nat -A PREROUTING -i $IFACE_INT -s $NET_INT -p tcp --dport 80 -j REDIRECT --to-ports 3128

iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -m limit --limit 60/hour -j LOG --log-prefix "FW: Permitted SSH connect "
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -m limit --limit 60/hour -j DNAT --to $IP_INT:10000
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -j LOG --log-prefix "FW: Unpermitted SSH Connect "
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT --syn -j DROP
iptables -t nat -A PREROUTING -p tcp --dport $PORT_SSH_EXT -j DNAT --to $IP_INT:10000

echo 'Done'

Emberek!

Próbaképpen beküldtem a debianos tuzfalamra ezt a konfigot saját hálóra igazitva. az eredmény: megállt minden.

Tuti, hogy menni fog?

Konfigom:

Linksys router IP:192.168.1.1 (net felé ADSL kapcsolat)
Firewall IP:
router felé: 192.168.1.10
belso hálo: 192.168.0.254

Mivel esetemben a router némi tűzfalat biztosít, csak egy egyszerübb konfigot irtam:

#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

iptables -X
iptables -F
iptables -t nat -F

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 20 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 21 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state ! INVALID -j ACCEPT
#iptables -A INPUT -j LOG --log-level warning

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state ! INVALID -j ACCEPT

iptables -A OUTPUT -j ACCEPT

(Erre is ránéztek?)

Husi

Csak érdeklődésképpen:
- szerintem praktikus lenne a belső háló felől kimenő kapcsolatot maszkolni;
- hivatkozol az eth0-ra, az éppen melyik? a router vagy a belső háló felé csatoló kártya?
- nem látom a default policy-t (nem lehet, hogy a két kártyát keverted és az alapértelmezett szabály emiatt eldob mindent?)

Azt is írd meg légyszi, hogy az "az eredmény: megállt minden." gondolatod mit jelent pontosan? A szerverre nem tudtál a netről csatlakozni? A belső háló felől nem láttad? Ha a szerveredre belépsz, maga a szerver nem lát, nem hall?

eth0 a net felé esik, az eth1 a belső háló felé néz. (bocsesz, ezt elfelejtettem leírni)

"az eredmény: megállt minden." alatt azt értettem, hogy nem volt látható a net a belső hálóról.

default policy accept, ugyanis ha a policy-t a köv képpen állítom be akkor szintén megáll a net bentről kifele, és kintről is.

iptables -P INPUT DROP
iptables -P FORWARD DROP

A szerveren sincs ilyen esetben net. (lynx nem hoz be oldalt, pingre a netfelől nem jön válasz).

Akkor a következők megoldást nyújthatnának:
- a POSTROUTING-ot cseréld PREROUTING-ra;
- csináld meg a szabályokat az eth1-re is az INPUT láncon illetve a FORWARD-on is, az eth0->eth1 és eth1->eth0 irányokba is;
- engedd az INPUT láncon az eth0-on befelé azokat a forgalmatkat is, amelyeket te indítottál (tehát aminek 1024 feletti a célportja és nem NEW vagy INVALID állapotúak);
- ezután állítsd be a default policy-ket DROP-ra (vagy REJECT-re, amelyik neked szimpatikusabb).

Ha ezután sem megy, írj újra, de másold be a módosított verziót is.
Ja és praktikussági okokból nyiss neki egy másik fórumthread-et (később könnyebb rátalálni).

Szerintem a portscan és egyéb szűrés felesleges, mivel azt már a cisco megszűri, gondolom, hogy ott csak azok a portok vannak nyitva amiket használsz. a DOS és egyéb ellen meg van védelme.

A ssh-s prerouting rész egy kicsit zavaros. miért kell meg csinálni?
Ez olyan mint egy hurok. Mire jó? lehet ,hogyén nem értem, de szerintem egy kicsit felesleges.

átfaragtam a konfigom az itt említett alapján, de csaknem akar rendesen menni. A levelezés a klienseknél nem működik ( külső mail szervert nem érnek el), és egyes, főleg külföldi oldalak amik eddig bejöttek nem jönnek be. pölö microsoft.com, scan.sygate.com de az origo, meg az index simán jön....

Mit böktem el?

eth0 belső háló eth1 ppp0 külső háló, a gép közvetlenül csatlakozik a nethez. Ping terén a linuxos gép is ugyanúgy viselkedik, mint a kliensek. ping origo.hu jön válasz, ping microsoft.com névfeloldás ok, válasz nincs. (route tábla rendben.)

IP: 192.168.0.1 a belső háló felé
futó szervizek: ssh, apache, mysql, ftp néha

#!/bin/sh

echo "Starting firewall"
external_ip="`ifconfig ppp0 |grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
echo " External IP: $external_ip"

echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

iptables -Z
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
#iptables -t nat -A PREROUTING -i ppp0 -s eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128

iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -m limit --limit 16/s -j ACCEPT
iptables -A INPUT -p tcp --syn -m limit --limit 8/s -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -m state --state ! INVALID -j ACCEPT
#iptables -A INPUT -j LOG --log-level warning

for i in 21 22 25 53 80 110 123 139 443 1863
do
iptables -A INPUT -i ppp0 -p tcp --dport $i -m state --state ! INVALID -j ACCEPT
done

for i in 21 22 25 53 80 110 123 443 1863
do
iptables -A INPUT -i ppp0 -p udp --dport $i -m state --state ! INVALID -j ACCEPT
done

for i in 21 22 25 53 80 110 123 139 443 1863
do
iptables -A INPUT -i eth0 -p tcp --dport $i -m state --state ! INVALID -j ACCEPT
done

for i in 21 22 25 53 80 110 123 443 1863
do
iptables -A INPUT -i eth0 -p udp --dport $i -m state --state ! INVALID -j ACCEPT
done

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -i ppp0 -m state --state ! INVALID -j ACCEPT
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 16/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
iptables -A FORWARD -p icmp -j ACCEPT

iptables -A OUTPUT -j ACCEPT
echo 'Done'

1863-as port elvileg a messengernek kell m$ oldal alapján...

Én azt szoktam csinálni - nem tudom mennyire rossz dolog - hogy default policy ACCEPT, és a lánc végén van két rule, az egyik a LOG-ba irányítja a nem engedett forgalmat, utána pedig DROP. Persze éles rendszernél a LOG-os sort kiveszem, de így el tudom küldeni a DROP-olandó csomikat debug céljából a syslogba. Ez mondjuk azért jó, mert soxor futottam már rá, hogy ennek-annak kellett ez-meg-az és valahol le kell fülelni a hiányzó portot. Szerintem ha a default policy a DROP akkor nem lehet LOG-olni...

Javítsatok ki kérlek ha tévednék.

Tevedsz; DROP policyvel is lehet logolni.
A szabalylistat kulonbozo utilitk kulonbozokeppen toltik be;
van amelyik egyszerre, hiba eseten kiszall, van amelyik egyenkent a hibas sorokat pedig kihagyja.
DROP policyvel konnyebben zarod ki magad, de masokat is -
ACCEPT policyvel viszont konnyebben hagyod nyitva a rendszert ;-P

Igen de DROP policy-nél milyen sort tennél a végére, hogy amit amúgy eldobna az szaladjon bele a LOG-ba előbb? Az egy dolog, hogy DROP policy alatt is küldhetek dolgokat a LOG-ba, de nekem pont azokat a csomikat kell oda küldeni, ami közvetlen utána eldobódik (mert hiszen akkor ez az utolsó rule). Nekem ez a fő gondom.

Sziasztok!

Nem nyitok külön topicot, gondolom passzol a témához.
Problémám: Amint DROP-ra állitom az OUTPUT láncot, hiába engedem ki az ntpdate-t, nem akar szinkronizálni. netstat -alpn-el megnéztem, azt a portot is beirtam de nem megy. Kernelben van ipv6 támogatás, de ipv4-es szerverrel is ugyanez a gond. Milyen ötletek van? Ill. ha kicsit debugolnátok, hogy jó lesz-e igy, külön megköszönném:)

Ime a tűzfal script:

#!/bin/bash

iptables -F
iptables -F -t mangle

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#####################
## INPUT szabályok ##
#####################

#engedelyezzuk befele, ami tolunk szarmazik
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#-------------------------------------------------------------
#DoS elleni védelem
------------------------
#portscan elleni vedelem
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#ping-flood elleni vedelem
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

#tiltas MS portoknak
iptables -A INPUT -i eth0 -p TCP --dport 135 -j DROP
iptables -A INPUT -i eth0 -p TCP --dport 139 -j DROP
iptables -A INPUT -i eth0 -p TCP --sport 135 -j DROP
iptables -A INPUT -i eth0 -p TCP --sport 139 -j DROP
#--------------------------------------------------------------

#Loopback
iptables -A INPUT -i lo -j ACCEPT

#DNS
#iptables -A INPUT -i eth0 -p UDP --sport 53 -j ACCEPT
#iptables -A INPUT -i eth0 -p TCP --sport 53 -j ACCEPT

#NS SERVERRE becsatlakozas(ha nameserverkent akarjak hasznalni a serverunket:))
iptables -A INPUT -i eth0 -p UDP --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP --dport 53 -j ACCEPT

#SSH SERVERRE becsatlakozas
iptables -A INPUT -i eth0 -p TCP --dport 22 -s 10.2.25.2 -j ACCEPT

#FTP SERVERRE becsatlakozas
iptables -A INPUT -i eth0 -p TCP --dport 21 -j ACCEPT

#POP3 SERVERRE becsatlakozas
iptables -A INPUT -i eth0 -p TCP --dport 110 -j ACCEPT

#SMTP SERVERRE becsatlakozas
iptables -A INPUT -i eth0 -p TCP --dport 25 -j ACCEPT

#IMAP SERVERRE becsatlakozas
iptables -A INPUT -i eth0 -p TCP --dport 143 -j ACCEPT

#HTTP SERVERRE becsatlakozas
iptables -A INPUT -i eth0 -p TCP --dport 80 -j ACCEPT

#HTTPS SERVERRE becsatlakozas
iptables -A INPUT -i eth0 -p TCP --dport 443 -j ACCEPT

#ICMP(ping) befele
iptables -A INPUT -i eth0 -p ICMP -j ACCEPT
iptables -A INPUT -i eth0 -p ICMP --icmp-type ! echo-request -j ACCEPT

#maradek eldobasa
iptables -A INPUT -i eth0 -j DROP

######################
## OUTPUT szabályok ##
######################

## jóváhagyott kapcsolatok engedélyezése
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT
#iptables -A OUTPUT -o eth0 -j ACCEPT

#DNS kifele(localrol inditva)
iptables -A OUTPUT -o eth0 -p TCP --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -p UDP --dport 53 -m state --state NEW -j ACCEPT

#ICMP(ping) kifele
iptables -A OUTPUT -o eth0 -p ICMP -j ACCEPT --icmp-type echo-request

#Kulso serverek elerese#
#======================#

#Kulso SSH-ra KI
iptables -A OUTPUT -o eth0 -p TCP --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

#Kulso FTP-re KI
iptables -A OUTPUT -o eth0 -p TCP --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

#Kulso HTTP-re KI
iptables -A OUTPUT -o eth0 -p TCP --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

#Kulso HTTPS-re KI
iptables -A OUTPUT -o eth0 -p TCP --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

#NTP date
iptables -A OUTPUT -d 148.6.0.1 -o eth0 -p tcp --dport 37 -m state --state NEW,ESTABLISHED -j ACCEPT

igen, úgy is próbáltam, de nem megy.
Erről az oldalról vettem a 37-es portot, de hiába.
http://config.hu/content.php?article.38
Tuti az OUTPUT-nál van gond, de ha arra állitom, h --dport 123 v. 37, IP-re le sem korlátozom, akkor sem jó.
Nem vagyok nagy iptables guru,de azt hiszem, hogy ez azért igy igazán mehetne..vagy elnéztem vmit?

Üdv!

"Gyorsba" össze kellett dobnom egy tűzfalat iptables-el!Előtte még nem igen volt dolgom ezzel, viszont kiindulásnak nagyon jó volt (sőt), amit itt találtam az abszolut használható és a nagyját képezi a tűzfalamnak.Mégis vannak vele gondok és nem igazán értek 1-2 dolgot!Szeretném,ha valaki lemeózná a szabályokat és segítségemre lenne!

Egy DNS szerverként funkcionáló gép tűzfala lenne!

Script: (Ahol vmit nem értek oda teszek egy "?"-et!)
-------

#!/bin/bash

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -X /?
iptables -N in_attack
iptables -N drop_icmp

#----------------------------------------------------------------------------------#
# INPUT lánc szabályai: #
#----------------------------------------------------------------------------------#

#lo interface mehet
iptables -A INPUT -i lo -j ACCEPT

#Meglévő és kapcsolódó folyamatokat engedélyezi
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#ping
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j drop_icmp

iptables -A INPUT -p icmp --icmp-type echo-request -m state --state NEW -j drop_icmp
iptables -A INPUT -d 255.255.255.0 -j DROP /?
iptables -A INPUT -d 224.0.0.0/8 -j DROP /?

#Gyanus csomagok eldobása
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j in_attack /?
iptables -A INPUT -i eth0 -s 172.16.0.0/16 -j in_attack /?
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j in_attack /?

#SSH engedése a megadott tartományról + loggolás
iptables -A INPUT -s x.x.x.x/24 -p tcp --dport 22 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "Bejövő SSH kapcsolat: "
iptables -A INPUT -s x.x.x.x/24 -p tcp --dport 22 -m limit --limit 1/hour --limit-burst 1 -j ACCEPT
iptables -A INPUT -s x.x.x.x/24 -p tcp --dport 22 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "3 Sikertelen próbálkozás: "

#dns
iptables -A INPUT -p udp --dport 53 -m state --state NEW,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW,RELATED -j ACCEPT

#Minden más bejövő eldobása és loggolása:
iptables -A INPUT -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "Tíltott bejövő kapcsolat: "
iptables -A INPUT -j DROP

#----------------------------------------------------------------------------------#
# OUTPUT lánc szabályai: #
#----------------------------------------------------------------------------------#

#lo interface mehet
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A OUTPUT -d 255.255.255.0 -j DROP /?
iptables -A OUTPUT -d 224.0.0.0/8 -j DROP /?

#Meglévő, új és a kapcsolódó folyamatokat engedélyezi
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#ftp
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 21 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 20 -m state --state NEW,RELATED -j ACCEPT

#dns
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,RELATED -j ACCEPT

#http
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 80 -m state --state NEW,RELATED -j ACCEPT

#smtp
iptables -A OUTPUT -p udp --dport 25 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW,RELATED -j ACCEPT

#Minden más loggolva lesz
iptables -A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "Eldobott kimenő kapcsolat: "
iptables -A OUTPUT -j DROP

#accept icmp
iptables -A drop_icmp -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix "Kitíltott ping: " /?
iptables -A drop_icmp -j DROP

#----------------------------------------------------------------------------------#
# Betörések elleni védekezés: #
#----------------------------------------------------------------------------------#

#Syn-flood elleni védelem
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

#Portscan elleni védelem
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#Ping-flood elleni védelem
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

Tehát ez egy DNS szerver tűzfala lesz.
-Csak a saját tartományból akarom engedni az ssh-t!
-Dns szerver 53-as port mehet.
-Ftp mivel akarom,h frissíteni a csomagokat
-Jelenleg be van kapcsolva a http is,de az nem kell
-Smtp 25-ös port,h a szerver tudjon levelet küldeni!

A Forward részt nem teljesen világos számomra!
Így lefuttatom a scriptet, hiba nélkül megy is és "működik", viszont állandóan tiltott bejövő kapcsolatot jelez a saját tartományunkból. Gondolom túl erős a log vagy?Ezt hol tudnám állítani?
Még egy olyan kellene nekem,h ne a klog-ba mentsen,hanem egy általam kinevezett fájlba és a logokat bizonyos időközönként küldje el nekem!

Előre is köszönöm
Üdv Corvin

iptables -X: összes nem beépített (pl. nem INPUT, stb) lánc törlése, amennyiben az üres (nincs benne szabály). Ez az iptables -F segítségével garantálható, utána törölhetőek a láncok. Egy a fontos: az iptables -F előtt állítsd a default policy-t ACCEPT-re mindenhol (pl. iptables -P INPUT ACCEPT), különben kizárod magad.

ptables -A INPUT -d 255.255.255.0 -j DROP /?
iptables -A INPUT -d 224.0.0.0/8 -j DROP /?
no, ezek nekem sem világosak. A broadcast cím (vagy a hálózat címe) sem ez, szóval szvsz mindkettő felesleges.

A "gyanús csomagok eldobása" - gondolom neten érvényes címe van az eth0 interface-nek. Ekkor viszont a csak NAT mellett működő (interneten nem érvényes) címtartományok nyugodtan letilthatóak. Ezek pont azok.

Ami a logot illeti: gondolom van a hálózaban windows, az meg ész nélkül próbál a 139, 445, stb. portokhoz kapcsolódni, ezért a LOG targetre mindig jutni fog pár csomag.

A drop_icmp lánc a tipikus hozzáállást valósítja meg: LOG&DROP, és nem akarsz minden csomagot logolni. Biztos, hogy azt a szabályt nem értetted?

Nem klog => nem LOG, hanem ULOG target + ulogd daemon kell neked. Beállításait nem ismerem, mindenesetre tud adatbázisba is menteni.

1.
iptables -A OUTPUT -d 255.255.255.0 -j DROP /?
iptables -A OUTPUT -d 224.0.0.0/8 -j DROP /?
- szerintem is feleslegesek.

2.
Gyanús csomagok eldobása
Ehhez fel kéne töltened a hivatkozott "in_attack" láncot valamilyen LOG&DROP-pal a végén.
Így simán átfut rajta minden.

3.
SSH engedélyezéses rész.
Itt van szerintem egy eb elhantolva.
Ez így percenként 3 próbálkozást logol. Óránként egyet beenged.
Aztán meg az első után 3-t a második logoló soron logol. De, hogy ez miért jó azt nem tudom.
Mindenesetre, mivel egy órán belül többször be akarsz menni ezért az első utáni próbálkozások DROP-pal végződnek, mert ezen a három szabálysoron át fognak menni.
Szerintem egyébként sem szerencsés ezt a limitesdit belekavarni az az elfogadásos szabályokba,
mert csak kuszálódáshoz vezet.

4. jó lenne tudni, hogy milyen hálóinterfészeid vannak és azok milyen subnetre néznek.
Ez a script valszeg valamilyen valódi IP-n lógó masináról származhat, gondolom ezért vannak benne a lokális subnetként működő IP tartományok tiltva. (gyanus csomagok eldobása rész pl.)

5.
az OUTPUT láncban szintén broadcast tiltást jelent az a két szabály. Tök felesleges szerintem.

6.
#accept icmp
iptables -A drop_icmp -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix "Kitíltott ping: " /?
iptables -A drop_icmp -j DROP

Ez egy érdekes felállás. A commentben accept ICMP van egyébként meg drop_icmp láncba pakol icmp tiltó szabályokat. Ami ide jön abból percenként 3 logolódik, majd eldobásra kerül.

---------------------
Kicsit többet kéne tudni arról, hogy hány NIC van a masinán, melyik milyen hálókra néz és merről merre mit szeretnél engedni és mit eldobni.

A FORWARD láncba rakott cuccoknak akkor van értelme általában, ha a masina route-ol is hálózatok közt és az ip_forward engedélyezett. Ilyenkor érdekes lehet, hogy miket engedsz át egyik hálózatból a másikba. De itt jelenleg nem nagyon értem ezt, ha csak egy NIC-ed van, mire jó, hogy a FORWARD-on bármit hegesszen az ember.

A logolási dolgokat a syslogd manpage-éből ki lehet deríteni.
Meg lehet adni, hogy milyen szolgáltatás milyen szintű logolási üzenete milyen logfájlba menjen.
Az IPTABLES log szabályánál meg ezt (a szintet) kézileg is lehet állítani az alapértelmezéshez képest. Akár direkt másik szerverre is logolhatsz, ha akarsz.

Ja és a Microsoftos protokollok szeretik teletrombitálni a hálózatot jó kis broadcast üzenetekkel, ezért ilyen packeteket nem kéne logolgatni (hacsak nem pont ez a cél), hanem eldobni, mert pillanatok alatt kilós logfájljaid lesznek. Én a 135-139,445 porttal foglalkozó dolgokat el szoktam hajigálni.

Üdv,
t

Azt lefelejtettem, hogy érdemes az iptables-export-tal kinyomni az éles szabálylistát egy állományba és azon végig elemezni, hogy mit is csinál.
Szoktak néha meglepő dolgok lenni, mivel esetenként bizonyos (pl pppoe) interfészek szeretnek iptables szabályokat pakolászni anélkül, hogy tudnál róla. Esetleg ez is bezavarhat, hogy ha nem egészen úgy működik a dolog ahogy szeretnéd.

Egyszer már elküldtem itt valakinek egy eléggé jól paraméterezhető tűzfal script hegyemet valakinek, aki azóta se szólt vissza, hogy akkor bikmakk tudta-e használni vagy sem. Ha az segít, elküldhetem neked is. (Bár az RedHat, Fedora linuxokon megy, de könnyen adaptálható szerintem.)

Üdv,
t

Üdv!

Így nézne ki a módosított tűzfalkonfigom:

#!/bin/bash

#----------------------------------------------------------------------------------#
# A láncok alaphelyzetbe állítása #
#----------------------------------------------------------------------------------#

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -X
iptables -N in_attack
iptables -N drop_icmp

#----------------------------------------------------------------------------------#
# INPUT lánc szabályai: #
#----------------------------------------------------------------------------------#

#lo interface mehet
iptables -A INPUT -i lo -j ACCEPT

#Meglévő és kapcsolódó folyamatokat engedélyezi
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#ping
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j drop_icmp
iptables -A INPUT -p icmp --icmp-type echo-request -m state --state NEW -j drop_icmp

#Gyanus csomagok eldobása
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j in_attack
iptables -A INPUT -i eth0 -s 172.16.0.0/16 -j in_attack
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j in_attack

#SSH engedése a megadott tartományról + loggolás
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "Bejövő SSH kapcsolat: "
iptables -A INPUT -s x.x.x.x/24 -p tcp --dport 22 -j ACCEPT

#dns
iptables -A INPUT -p udp --dport 53 -m state --state NEW,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW,RELATED -j ACCEPT

#Winfos ellen:
iptables -A INPUT -p tcp -m multiport --dport 135,136,137,138,139,445 -j REJECT
iptables -A INPUT -p udp -m multiport --dport 135,136,137,138,139,445 -j REJECT

#Minden más bejövő eldobása és loggolása:
iptables -A INPUT -j LOG --log-prefix "Tíltott bejövő kapcsolat: "
iptables -A INPUT -j DROP

#----------------------------------------------------------------------------------#
# OUTPUT lánc szabályai: #
#----------------------------------------------------------------------------------#

#lo interface mehet
iptables -A OUTPUT -o lo -j ACCEPT

#Meglévő, új és a kapcsolódó folyamatokat engedélyezi
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#ftp
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 21 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 20 -m state --state NEW,RELATED -j ACCEPT

#dns
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,RELATED -j ACCEPT

#http
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 80 -m state --state NEW,RELATED -j ACCEPT

#smtp
iptables -A OUTPUT -p udp --dport 25 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW,RELATED -j ACCEPT

#Minden más loggolva lesz
iptables -A OUTPUT -j LOG --log-prefix "Eldobott kimenő kapcsolat: "
iptables -A OUTPUT -j DROP

#droped icmp
iptables -A drop_icmp -j LOG --log-prefix "Kitíltott ping: "
iptables -A drop_icmp -j DROP

-------------------------------------------------------------------------------------------------------
Beletettem a windows-os portokat, amikhez próbál kapcsolódni:
#iptables -A INPUT -p tcp -m multiport --dport 135,136,137,138,139,445 -j REJECT
#iptables -A INPUT -p udp -m multiport --dport 135,136,137,138,139,445 -j REJECT
Sztem vmi gond van még vele,mivel még mindig kapom a Tíltott bejövő kapcsolatos logokat a képernyőre a tartományunkból!!!

A DNS szerver 6-7 saját domain-t fog kezelni és természetesen saját ügyfeleink részére cachelni is fog!
Nagyjából teljes lenne így (szvsz), még a loggolással fogok szenvedni,h külön fájlba szedje a dolgokat!
Mit szóltok hozzá?

1.
#ping
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j drop_icmp
iptables -A INPUT -p icmp --icmp-type echo-request -m state --state NEW -j drop_icmp

Ha csak az eth0 NIC-ed van, akkor nem értem hogy a drop_icmp-re ugrásnak mi értelme van.
Ugyanis az eth0-ra érkező pinget beengeded, ami meg nem onnan jön és ... azokat meg dropolod.

2.
#Gyanus csomagok eldobása
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j in_attack
iptables -A INPUT -i eth0 -s 172.16.0.0/16 -j in_attack
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j in_attack

Ahogy látom in_attack láncod továbbra sincsen, itt mégis hivatkozol rá.
Ha lenne és lenne benne DROP a végén akkor működne úgy, hogy a lokál subnetekből
az eth0-án bejövő packeteket hajigálná el.

3. FTP-vel nem tudom, hogy hogyan éred el a szervert, mert az az INPUT láncon nem tud bejönni.

Szerintem érdemes először cím alapján szelektálni, hogy egyáltalán honnan fogadsz el valamit, aztán meg protokoll alapján továbbszűrni, hogy mit.
Minden más LOG&DROP.

Üdv,
t

Üdv!

talisker: dj_crow@freemail.hu | Előre is köszönöm!
Kivettem az általad javasoltakat!Ftp-vel nem is akarom elérni a szervert,csak le akarom szedni a frissítéseket crontab segítségével a gépre!Ezért hagyom ezt kimenni, bejönni viszont nem kell,mert ftp nem fut a gépen!
smpt szintén csak azért van a kimenőbe,mert a logokat akarom hogy küldje nekem a gép!
A Winfosos portpásztázást kitíltottam:
#iptables -A INPUT -p tcp -m multiport --dport 135,136,137,138,139,445 -j REJECT
#iptables -A INPUT -p udp -m multiport --dport 135,136,137,138,139,445 -j REJECT
De még így is a tűzfal indulása után elkezdi a tartományból "Tíltott bejövő kapcsolat néven a loggolást..." - Lehet, hogy a végével van a probléma, hogy mindent logolok és utánna dobok el mindent???
Most engedem az icmp-t,erre érdemes lenne vmi megszorítást tenni?Pl, ha vki túl nagy csomaggal bombázza a szervert stb stb...
Vmilyen szabályt érdemes lenne még belefűzni?
Előre is köszönöm!
-------------------------------------------------------------------------------------------------------
Itt vannak a változtatások:

#!/bin/bash

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -X

#----------------------------------------------------------------------------------#
# INPUT lánc szabályai: #
#----------------------------------------------------------------------------------#

#lo interface mehet
iptables -A INPUT -i lo -j ACCEPT

#Meglévő és kapcsolódó folyamatokat engedélyezi
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#ping
iptables -A INPUT -i eth0 -p icmp -j ACCEPT

#Gyanus csomagok eldobása
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP

#SSH engedése a megadott tartományról + loggolás
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "Bejövő SSH kapcsolat: "
iptables -A INPUT -s x.x.x.x/24 -p tcp --dport 22 -j ACCEPT

#dns
iptables -A INPUT -p udp --dport 53 -m state --state NEW,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW,RELATED -j ACCEPT

#Winfos ellen:
iptables -A INPUT -p tcp -m multiport --dport 135,136,137,138,139,445 -j REJECT
iptables -A INPUT -p udp -m multiport --dport 135,136,137,138,139,445 -j REJECT

#Minden más bejövő eldobása és loggolása:
iptables -A INPUT -j LOG --log-prefix "Tíltott bejövő kapcsolat: "
iptables -A INPUT -j DROP

#----------------------------------------------------------------------------------#
# OUTPUT lánc szabályai: #
#----------------------------------------------------------------------------------#

#lo interface mehet
iptables -A OUTPUT -o lo -j ACCEPT

#Meglévő, új és a kapcsolódó folyamatokat engedélyezi
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#ftp
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 21 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 20 -m state --state NEW,RELATED -j ACCEPT

#dns
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,RELATED -j ACCEPT

#http
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --dport 80 -m state --state NEW,RELATED -j ACCEPT

#smtp
iptables -A OUTPUT -p udp --dport 25 -m state --state NEW,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW,RELATED -j ACCEPT

#Minden más loggolva lesz
iptables -A OUTPUT -j LOG --log-prefix "Eldobott kimenő kapcsolat: "
iptables -A OUTPUT -j DROP

Megkaptam talisker a konfigod...
Huhh mit ne mondjak csak pislogok!
Lehet,h most erre nem lesz időm,h élesbe betegyem, mert miliónyi dolog van még, amivel nem vagyok tisztába (sajnos)!!!
Az enyém, ami fent van egy pár hozzászólással feljebb, az nagyon fapad?
Amiket írtam hibákat azt még csinálja,de "elvileg" megyeget!
Jah, bocs ez kimaradt!
Köszönöm!

ööö, ejha.
ha én is szeretném megkapni esetleg, az már nagyon gáz lenne?:)
folyamatosan olvasom a topicot és más howto-kat is, de kicsit nehezen békülök ki az iptables lelkivilágával.
talán egy jól összerakott scriptból többet tudnék tanulni;)
előre is köszi: husumo@gmail.com
üdv

::sumo.conf::

Hello!

Egy szerverre szeretnék iptables scriptet írni. Azt szeretném, ha csak a megadott IP címről, az adott IP-hez rendelt MAC address-el, és csak megadott portokra lehetne csatlakozni.

Ilyesmire gondolok:

INPUT lánc policy DROP

-A INPUT --dport port1,port2,...,portn -s (IP) -m mac --mac (MAC) -j ACCEPT

Tehát hogy csak a szerver port1,port2,...,portn portjaira lehessen csatlakozni a megadott IP-jű, megadott MAC address-ű gépről.

Ez így jó? Vagy máshogy kell?

Petya

Próbálkozom, ezt írtam:

*filter
:INPUT DROP
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport ! port1 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport ! port2 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport ! port3 -j DROP
-A INPUT -i eth0 -s (IP1) -m mac --mac (MAC1) -j ACCEPT
-A INPUT -i eth0 -s (IP1) -m mac --mac (MAC2) -j ACCEPT
....
-A INPUT -i eth0 -s (IPn) -m mac --mac (MACn) -j ACCEPT
COMMIT

Szerintetek jó?

Petya

inkabb rossz.
a szabalyokat sorban az 1. illeszkedesig ertelmezi,


-A INPUT -i eth0 -p tcp -m tcp --dport ! port1 -j DROP

el fog dobni minden nem port1 celu tcp csomagot - port2, port3 -t is


-A INPUT -i eth0 -p tcp -s 1.2.3.4 -m multiport --dports 80,81,1234 -m mac --mac 00:11:22:33:44:55 -j ACCEPT

icmp -bol a 0(ping) tipus elhagyhato, a 3,4,(5),11,12 sokkal fontosabb.
...

Hello!


*filter
:INPUT DROP
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type 3,4,5,11,12 -j ACCEPT
-A INPUT -i eth0 -p tcp -s (IP1) -m multiport --dports port1,port2,port3 -m mac --mac-source (MAC1) -j ACCEPT
-A INPUT -i eth0 -p tcp -s (IP2) -m multiport --dports port1,port2,port3 -m mac --mac-source (MAC2) -j ACCEPT
....
-A INPUT -i eth0 -p tcp -s (IPn) -m multiport --dports port1,port2,port3 -m mac --mac-source (MACn) -j ACCEPT
COMMIT

Így jó?

Petya

Hali!

Szabadidőmben kísérletezgettem 1-2 dologgal, és akadt egy érdekes problémám.

Kipróbáltam, hogy működik e az ha percenként csak 3-szor engedek ssh kapcsolatot a gépmhez, így:

iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/m -j LOG --log-prefix "SSH_ACCEPT: "
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/m -j ACCEPT

Működik szépen. A pingeléssel ez már nem olyan szépen működik:

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/m -m length --length 0:85 -j LOG --log-prefix "rovid_ping_ACCEPT: "
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/m -m length --length 0:85 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/m -m length --length 86:65535 -j LOG --log-prefix "hosszu_ping_DROP: "
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/m -m length --length 86:65535 -j DROP

Úgy működik, hogy ha megpingelem magam kívülről akkor az első 5 ping válasz megérkezik mintha misem történt volna, a 6. ping választól úgy jön ahol kell, 20 másodpercenként. Vajon miért "szökik" be az az 5 ping? Mindegy mit állítok a limithez (1/m) akkor is ugyan ez történik.

Tudja valaki miért?

Hello!

A segítségeteket kérném:

Van egy router, a FORWARD-on csináltam egy saját láncot, itt szerepelnek azok az IP-t, akiknek a forgalmát korlátozni szeretném.

Ilyen szabályok vannak jelenleg:

-A sajat_lanc_neve -s a.gep.ip.cime -d 0.0.0.0/0 -p tcp -m multiport --dport ! 80,443 -j DROP

Itt én csak egy portot, vagy port tartományt tudok megadni, de pl azt, hogy "http,https,ftp", nem. Hogyan tudnám megoldani ezt a problémát?

Tehát: azt szeretném, hogy:

-A sajat_lanc_neve -s a.gep.ip.cime -d 0.0.0.0/0 -p tcp -m multiport --dport http,https,ftp -j DROP

Csakhogy ezt nem fogadja el az iptables.

Petya

Sziasztok!
Van egy szerverem, ami 1 tartományban van, de kintről is szeretném, ha különböző szolgáltatásai is elérhetőek lennének különböző címekről. A gépnek van publikus címe. Amire szükség van:
helyi hálózatból minden engedélyezett
Internet felől:
ssh elérés néhány ip címről,
80-as, 8080-as portok elérése (egyelőre) néhány ip címről,
1194-es udp (OpenVPN) port elérése néhány ip címről.
ftp szerver elérése néhány címről
11111-es port továbbítása a helyi háló adott gépe felé mindenhonnan (de jobb lenne, csak Magyarországra szűrni)
1099, 1100, 1199, 1200 portok engedélyezése néhány ip címről
Kérlek benneteket, segítsétek a munkámat annyival, hogy átnézitek az elkészített scriptemet, és ha valami hiányzik\nem jó, szóljatok!

A script:
#!/bin/sh

echo -n 'Configuring firewall '
# 1. firewall script by csonkasanyi
#

#Allandok
intface='192.168.10.252'
extface='1.2.3.4'
dns1='x.x.x.x'
dns2='y.y.y.y'

#A policy-t minden esetben DROPra állítjuk
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables -t nat -P PREROUTING DROP
iptables -t nat -P POSTROUTING DROP
iptables -t nat -P OUTPUT DROP

iptables -t mangle -P INPUT DROP
iptables -t mangle -P FORWARD DROP
iptables -t mangle -P OUTPUT DROP
iptables -t mangle -P PREROUTING DROP
iptables -t mangle -P POSTROUTING DROP

#Töröljük a korábbi bejegyzéseket
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT

iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -t nat -F OUTPUT

iptables -t mangle -F INPUT
iptables -t mangle -F FORWARD
iptables -t mangle -F OUTPUT
iptables -t mangle -F PREROUTING
iptables -t mangle -F POSTROUTING

#Kezdjünk el engedélyezni... :-)

#A localhostról, és a helyi hálózatról engedélyezzük a hozzáférést
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -s 192.168.10.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.10.0/24 -j ACCEPT

#DNS jó, ha van...
iptables -A INPUT -s $dns1 -j ACCEPT
iptables -A INPUT -s $dns2 -j ACCEPT

#Az általunk kezdeményezett kapcsolatokra szeretnénk választ kapni!
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#22-es, 80-as, illetve a 8080-as portok engedélyezése
iptables -A INPUT -s a.a.a.a -p tcp -m multiport --dport 22,80,8080 -j ACCEPT
iptables -A INPUT -s b.b.b.b -p tcp -m multiport --dport 22,80,8080 -j ACCEPT
iptables -A INPUT -s c.c.c.c -p tcp -m multiport --dport 22,80,8080 -j ACCEPT
iptables -A INPUT -s d.d.d.d -p tcp -m multiport --dport 22,80,8080 -j ACCEPT

#a 21, 22-es portok engedélyezése
iptables -A INPUT -s e.e.e.e -p tcp -m multiport --dport 21,22 -j ACCEPT
iptables -A INPUT -s e.e.e.e -p tcp -m multiport --dport 21,22 -j ACCEPT

#Telephelyről 22-es, 80-as, 8080-as tcp, 1194-es udp portok engedélyezése
iptables -A INPUT -s f.f.f.f -p tcp -m multiport --dport 22,80,8080 -j ACCEPT
iptables -A INPUT -s g.g.g.g -p udp --dport 1194 -j ACCEPT

#1099-es, 1100-as, 1199-es 1200-as tcp portok engedélyezése
iptables -A INPUT -s h.h.h.h -p tcp -m multiport --dport 1099,1100,1199,1200 -j ACCEPT
iptables -A INPUT -s i.i.i.i -p tcp -m multiport --dport 1099,1100,1199,1200 -j ACCEPT
iptables -A INPUT -s j.j.j.j -p tcp -m multiport --dport 1099,1100,1199,1200 -j ACCEPT
iptables -A INPUT -s k.k.k.k -p tcp -m multiport --dport 1099,1100,1199,1200 -j ACCEPT
iptables -A INPUT -s l.l.l.l -p tcp -m multiport --dport 1099,1100,1199,1200 -j ACCEPT

#A 11111-es portra érkező kéréseket továbbítjuk a belső gépünk felé
iptables -t nat -A PREROUTING -i eth0 -p tcp -d $extface --dport 11111 -j DNAT --to 192.168.10.246:11111

Köszi, Sanyi

FTP-hez a 20-as port is kell... 20-21 a két port.
A végére egy


echo 1 > /proc/sys/net/ipv4/ip_forward

sem árt. ;)
Amúgy nekem jónak tűnik, bár hozzáteszem: nem vagyok pro iptables-ből. :P
[szerk] De mielőtt élesbe úgy hagynád, ki kell próbálni mindent!
--
Discover It - Have a lot of fun!

iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
ezzel a szabállyal szerintem minden kimenő kapcsolatot engedélyeztél, így az elején kiadott OUTPUT -P DROP sosem fog egyezni. Plusz én annyit szoktam még, hogy az adott portra érkező szabályoknál csak a -m state --state NEW csomagokat engedem be, a többit az ESTABILESHED,RELATED rész elintézi, valamint -m state --state INVALID csomagokat pedig még az elején dobom, mer' minek. A szavaim nem 100%, hogy igazak megerősítést|cáfolatot igényelhetnek.

--
HUP Firefox extension

A portok felsorolásánál mindenhova beszúrtam a "-m state --state NEW" részletet, valamint az OUTPUT-ból kivettem a NEW state-et.
Viszont mi a helyzet, akkor, ha pl.: upgradelni akarok, vagy bármit, ahol én kezdeményezek kifele kapcsolatot? Akkor szvsz kell engedni a kifele menő NEW kéréseket is...

Az echo sort szintén felvettem a végére, illetve a 20-as portot, ahol ftp-zni akarok.

Mégvalami észrevétel?

Sanyi

Amennyiben akarsz kifelé kapcsolatot kezdeményezni, természetesen azt ki kell engedni. A topicnyitó scriptben találsz rá példát is. Esetleg még az üres láncokat is törölném az elején, bár igaz, hogy most nem használsz saját láncokat, de később még előfordulhat. Ezt megteheted ugyanúgy mint a lánc ürítésnél (-F), csak -F-et -X-re kell cserélni.
--
HUP Firefox extension

Hát annak azért kicsit egyszerűbb a beállítása. A saját konfig fájlából az is iptables rule-okat csinál.
Igaz, hogy ezzel talán precízebben be lehet állítani, de nagyon oda kell figyelni, és nagyon könnyű elrontani/elnézni valamit...
--
Discover It - Have a lot of fun!

Hali!

Az itt olvasottak alapjan gondoltam, en is osszealitok egy kis tuzfalat. Persze nem akar ugy mukodni, ahogy kellene. A belso halozatban meghalnak a szolgaltatasok, amikre szuksegem lenne.
A halozat es az igenyek a kovetkezok:
ADSL kapcsolat van az eth0 ppp0 interfacen.
A belso halo az eth1 interfacre csatlakozik.
Szeretnem, ha a server (ami egy hazi webserver csupan webprogramozas celjara, mindenfele dolgokkal: apache, php, mysql, ruby on rails...) internet felol tokeletes vedelmet elvezne, belso halorol pedig minden megengedett lenne.
Itt a hozzaszolasokban lattam a --dport port1,port2 -vel valo port felsorolast, ezzel szerettem volna a ki/be meno portokat engedelyezni internet felol. Sajnos tobb oranyi kiserletezes utan is lehalat a halozat fele:(
A problema meg az, hogy belso halozati geprol internetezek es eleg sokfele szolgaltatast hasznalok, amik persze nem tudom milyen porton csatlakoznak a nethez. Tehet a kimeno kapcsolataimat is ugy kellene beallitani, hogy barhova lehetseges legyen a kapcsolodas.

Az alap scriptem ennyi lenne, amivel a netmegosztas mukodik:


# Adatforgalom megosztasa a helyi halozatra
iptables -A FORWARD -i ppp0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# IP tovabbitas engedelyezese
echo "1" > /proc/sys/net/ipv4/ip_forward

Par mintat szivessen vennek, amivel mukodne par dolog, mert ahogy en osszeolloztam, az halal volt a halozatra:)
Elore is koszi!

Oke, vegre sikerult osszedobni egy egesz jol mukodo tuzfalat, csupan egyetlen dolog nem akar mukodni internet felol, meghozza az FTP. Belso halorol tokeletes, kivulrol nem csatlakozik. Ranyomtam egy port scannert ami szerint a 20-as port zarva, 21-es nyitva. De mindent ugyanazzal a parancsal nyit ki, akor miert lehet zarva csak a 20-as?
Egyebkent mas hiabat, vagy otletet lattok benne?


#!/bin/sh

# Enable IP forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

# IPTables
IPT="iptables"

# Internet Interface
INET_IFACE="ppp0"
INET_ADDRESS="195.228.0.234"

# Local Interface Information
LOCAL_IFACE="eth1"
LOCAL_IP="192.168.0.1"
LOCAL_NET="192.168.0.0/24"

# Flush the tables
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F -t nat

# Define default policy to DROP packets
$IPT -P INPUT   DROP
$IPT -P OUTPUT  DROP
$IPT -P FORWARD DROP
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT

# Delete the optional user-defined chains specified
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Allow ICMP types ('echo request/reply' and 'time exceeded') traffic
$IPT -A INPUT -i $INET_IFACE -p icmp --icmp-type 0 -j ACCEPT
$IPT -A INPUT -i $INET_IFACE -p icmp --icmp-type 8 -j ACCEPT
$IPT -A INPUT -i $INET_IFACE -p icmp --icmp-type 11 -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT

# Permit DNS traffic
$IPT -A INPUT -i $INET_IFACE -p udp --dport 53 -j ACCEPT
$IPT -A OUTPUT -p udp --sport 53 -j ACCEPT

# Accept network return traffic from the internet:
$IPT -A INPUT -i $INET_IFACE -m state -p tcp --dport 1024:65535 --state ESTABLISHED,RELATED  -j ACCEPT
$IPT -A OUTPUT -m state -p tcp --sport 1024:65535 ! --state INVALID  -j ACCEPT

# Accept SSH traffic from the internet
$IPT -A INPUT -i $INET_IFACE  -m state -p tcp -s 0/0 --dport 22 ! --state INVALID -j ACCEPT
$IPT -A OUTPUT -m state -p tcp --sport 22 --state ESTABLISHED,RELATED -j ACCEPT

# Accept FTP traffic from the internet
$IPT -A INPUT -i $INET_IFACE  -m state -p tcp -s 0/0 --dport 21 ! --state INVALID -j ACCEPT
$IPT -A OUTPUT -m state -p tcp --sport 21 --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i $INET_IFACE  -m state -p tcp -s 0/0 --dport 20 ! --state INVALID -j ACCEPT
$IPT -A OUTPUT -m state -p tcp --sport 20 --state ESTABLISHED,RELATED -j ACCEPT

# Accept HTTP traffic from the internet
$IPT -A INPUT -i $INET_IFACE  -m state -p tcp -s 0/0 --dport 80 ! --state INVALID -j ACCEPT
$IPT -A OUTPUT -m state -p tcp --sport 80 --state ESTABLISHED,RELATED -j ACCEPT

# Accept RoR traffic from the internet
$IPT -A INPUT -i $INET_IFACE  -m state -p tcp -s 0/0 --dport 3000 ! --state INVALID -j ACCEPT
$IPT -A OUTPUT -m state -p tcp --sport 3000 --state ESTABLISHED,RELATED -j ACCEPT


# Accept all local (loopback) traffic on the lo interface
$IPT -A INPUT -s 127.0.0.1 -i lo -j ACCEPT
$IPT -A OUTPUT -d 127.0.0.1 -o lo -j ACCEPT

# Accept private subnet traffic on LOCAL_IFACE
$IPT -A INPUT -s $LOCAL_NET -i $LOCAL_IFACE -j ACCEPT
$IPT -A OUTPUT -d $LOCAL_NET -o $LOCAL_IFACE -j ACCEPT

# Allow forwarding packets:
$IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT
$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# Packet masquerading
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

Ujrairtam a tuzfalamat, eddig minden mukodik vele ami kell. Kintrol, bentrol, azt erek el amit engedek.
De gondoltam kicsit tovabbfejlesztem. A serevren es a kliens gepen is FTP server van, mert szamomra ez a legjobb file megosztasi eljaras. De mindigis problema volt ha nem voltam otthon es kellet valami a belso geprol. Gondoltam most a belso gep FTP portjat bellitom 1021-re a tuzfalban pedig ezt atiranyitom a belso gep IP-jere. De az istenert sem akar mukodni!

Ime az eddigi tuzfalam:


#!/bin/bash

# Kernel modulok betolltese
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

# IP tovabbitas engedelyezese
echo "1" > /proc/sys/net/ipv4/ip_forward

# Tuzfal szabalyok torlese es alapertelmezesbe allitasa
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat

# INPUT lanc
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 20,21,22,80,1021 -j ACCEPT
iptables -A INPUT -j LOG --log-prefix "FW_INPUT_DROP: "
iptables -A INPUT -j DROP

# OUTPUT lanc
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dport 20,21,22,80,1863,6667,1021 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -j LOG --log-prefix "FW_OUTPUT_DROP: "
iptables -A OUTPUT -j DROP

# Belso gep FTP eleresenek engedelyezese a 1021-as porton
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 1021 -j DNAT --to-destination 192.168.0.2:1021

# Adatforgalom megosztas a helyi halozatra
iptables -A FORWARD -i ppp0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Mar rengeteg kombinaciot csialtam a port tovabbitasra, de egyszeruen nem megy. Arra gondoltam, hogy tobb kell hozza mint sima tovabbitas. Ebben az esetben vajon mi?

Segitsegul nehagy halozati adatom:
ppp0 az internet interface
eth0 amire a DSL modem van dugva
eth1 a belso halozat interface
a server belso IP cime: 192.168.0.1
a kliens IP cime: 192.168.0.2

Megkoszonnem a segitsegeteket!

Fordítva!

ftp-data 20/tcp File Transfer [Default Data]
ftp-data 20/udp File Transfer [Default Data]
ftp 21/tcp File Transfer [Control]
ftp 21/udp File Transfer [Control]

Tehát a 21-es a control (command) port és a 20-as az adat.

http://www.iana.org/assignments/port-numbers

----------------------------
színes ingyen domain domain

Nekem ezek kellettek a VPN forwardolásához:

eht0 = public IP
eth1 = private IP
a 192.168.2.45 a belső gép IP-je amina VPN szerver fut.

# INPUT chain
iptables -A PREROUTING -t nat -d $eth0 -p udp --dport 1194 -j DNAT --to-destination 192.168.2.45:1194
iptables -A POSTROUTING -t nat -d 192.168.2.45 -p udp --dport 1194 -j SNAT --to-source $eth1

#FORWARD chain
iptables -A FORWARD -d 192.168.2.45 -p udp --dport 1194 -j ACCEPT
iptables -A FORWARD -s 192.168.2.45 -p udp --sport 1194 -j ACCEPT

Mjad tenyél minden lánc végére egy mindent loggol és ledob szabályt, abból látni fogod, hogy a próbálkozások során milyen csomagok vesznek el.

Nos en a fentebbi scriptemet millonyi mas dologgal kiprobaltam, es nem mukodik at FTP eleres. (Azota a 40004-es porton kellene)
Ime nehany kiprobalt beallitas:


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 40004 -j DNAT --to-destination 192.168.0.2:40004
iptables -A FORWARD -i eth1 -o eth0 -p TCP --sport 1024:65535 --dport 1024:65535 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p TCP --sport 1024:65535 --dport 1024:65535 -j ACCEPT
iptables -A FORWARD -d 192.168.0.2 -p tcp --dport 40004 -j ACCEPT
iptables -A FORWARD -s 192.168.0.2 -p tcp --sport 40004 -j ACCEPT

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 195.228.0.234 --dport 40004 -j DNAT --to-destination 192.168.0.2
iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn -d 192.168.0.5 --dport 40004 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A PREROUTING -t nat -p tcp -i eth1 --dport 40004 -j DNAT --to 192.168.0.2:40004
iptables -A FORWARD -i eth1 -p tcp -d 192.168.0.2 --dport 40004 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i ppp0 -m tcp -p tcp --sport ftp-data:ftp
iptables -A FORWARD -o ppp0 -m tcp -p tcp --dport ftp-data:ftp

UNPRIVPORTS="1024:65535"
iptables -A FORWARD -i eth0 -o eth1 -p tcp -s 192.168.0.2 --sport $UNPRIVPORTS -d 192.168.0.1 --dport 40004 -m state --state NEW -j ACCEPT
# This will handle active FTP data transfers
iptables -A FORWARD -i eth1 -o eth0 -p tcp -s 192.168.0.1 -d 192.168.0.2 --sport $UNPRIVPORTS --dport $UNPRIVPORTS -m helper --helper ftp -m state --state RELATED -j ACCEPT
# This will handle passive FTP data transfers
iptables -A FORWARD -i eth0 -o eth1 -p tcp -s 192.168.0.2 -d 192.168.0.1 --sport $UNPRIVPORTS --dport $UNPRIVPORTS -m helper --helper ftp -m state --state RELATED -j ACCEPT

Most annyi tortenik, hogy Connectizal az FTP kliens, majd befagy 1-2 perc utan :D
Ha agyon utnek sem jovok ra, miert nem jo:( Google-ben mar 15. oldalnal tartok ezugyben :S

Nem egészen tiszta mit szeretnél, de sztem nem kezeled le, hogy a FTP mindenképp keresi a 20-as portot, független attól hogy hanyas porton szeretnéd ezt a forgalmat látni. Ja, és a OUTPUT láncon a ESTABLISHED,RELATED státuszú csomagok ki vannak engedve? A conntrack modult probáltad már?

Van az alábbi scriptem. A problémám az, hogy hiába állítom be a portokat, mégsem megy az SSMTP és az SPOP3 (465 és 995 portok). Elvileg más rendben, de az nmap nem jelzi, hogy ezek nyitva vannak. A squid is fennt van és az SSL_ports -nál megadtam a 465 és 995 portokat, de nem megy.
Szerintetek mi lehet a gond?
Íme a teljes script
#!/bin/bash
TITLE="myfw"
IPTABLES=/sbin/iptables
SYSCTL=/sbin/sysctl
INET_IF=eth0 #külső interfész
LNET_IF=eth1 #belső interfész
INET_ADDR="a.b.c.d" #külső IP cím
FW_ADDR="192.168.0.1" #belső IP cím
LNET_ADDR="192.168.0.0/24" #védett hálózat IP címe
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED="240.0.0.0/5"
DENIED_IPS="61.31.0.0/16
61.140.0.0/11
61.220.0.0/10
62.165.226.178
62.165.227.56
62.165.227.223
62.165.225.99
62.165.224.86
62.165.215.44
62.165.224.241
62.165.215.19
62.165.227.41
62.165.227.97
64.12.24.161
66.137.176.6
89.132.26.222
86.106.44.179
200.195.0.0/10
210.73.133.22
210.212.0.0/16
218.248.35.62
218.188.23.45
218.248.35.62
218.13.0.0/11
218.160.0.0/12
219.80.0.0/15
219.128.0.0/12
222.156.0.0/15
"
#
# Szűrési láncok létrehozása
#
create_chains() {
# Beállítjuk az alapértelmezett policykat: DROP Eldobunk minden
# csomagot alapból, előtte válogatunk.
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
# Csoportosított láncok a forgalom iránya alapján
# a gépről az internetre menő csomagok
$IPTABLES -N fw_to_inet
# az internetről a gépre jövő csomagok
$IPTABLES -N inet_to_fw
# a lokális hálózatról az internetre menő csomagok (forward)
$IPTABLES -N lnet_to_inet
# az internetről a lokális hálózatra menő csomagok
$IPTABLES -N inet_to_lnet
# a lokális hálózatról a gépre jövő csomagok
$IPTABLES -N lnet_to_fw
# a gépről a lokális hálózatra menő csomagok
$IPTABLES -N fw_to_lnet
# szűrési lánc
$IPTABLES -N security
}
#
# Láncok törlése
#
delete_chains() {
# Táblák tisztítása
$IPTABLES -F
$IPTABLES -X
$IPTABLES -F -t nat
$IPTABLES -X -t nat
$IPTABLES -F -t mangle
$IPTABLES -X -t mangle
# Csomagszámlálók nullázása
$IPTABLES -Z
# Minden forgalom engedélyezése
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
}
#
# Átirányítások
#
basic_rules() {
# Loopbacken mindent fogadunk
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
# Bejövő csomagok
$IPTABLES -A INPUT -i $INET_IF -j inet_to_fw
$IPTABLES -A INPUT -i $LNET_IF -s $LNET_ADDR -j lnet_to_fw
# Kimenő csomagok
$IPTABLES -A OUTPUT -o $INET_IF -j fw_to_inet
$IPTABLES -A OUTPUT -o $LNET_IF -d $LNET_ADDR -j fw_to_lnet
# Átmenő csomagok - továbbítás
$IPTABLES -A FORWARD -i $INET_IF -o $LNET_IF -d $LNET_ADDR -j inet_to_lnet
$IPTABLES -A FORWARD -i $LNET_IF -o $INET_IF -s $LNET_ADDR -j lnet_to_inet
}
#
# Az internetről a tűzfalra érkező csomagok
#
inet_to_fw() {
# Tiltott IP-k szűrése
for i in `echo $DENIED_IPS`; do
$IPTABLES -A inet_to_fw -s $i -j DROP
done

# Hamisított IP-k szűrése (sysctl-k bebiztosítása)
$IPTABLES -A inet_to_fw -s $CLASS_A -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_fw -s $CLASS_A -j DROP
$IPTABLES -A inet_to_fw -s $CLASS_B -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_fw -s $CLASS_B -j DROP
$IPTABLES -A inet_to_fw -s $CLASS_C -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_fw -s $CLASS_C -j DROP
$IPTABLES -A inet_to_fw -s $CLASS_D_MULTICAST -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_fw -s $CLASS_D_MULTICAST -j DROP
$IPTABLES -A inet_to_fw -s $CLASS_E_RESERVED -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_fw -s $CLASS_E_RESERVED -j DROP
# SYN-Flood
$IPTABLES -A inet_to_fw -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT
$IPTABLES -A inet_to_fw -p tcp --syn -j LOG --log-prefix "$TITLE : SYN-Flood attack "
$IPTABLES -A inet_to_fw -p tcp --syn -j DROP
# Nmap FIN/URG/PSH
$IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/m -j LOG --log-prefix "$TITLE : Nmap XMAS scan "
$IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

# SYN/RST
$IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/m -j LOG --log-prefix "$TITLE : SYN/RST scan "
$IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#SYN/FIN
$IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m -j LOG --log-prefix "$TITLE : SYN/FIN scan "
$IPTABLES -A inet_to_fw -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# Portscan,PoD
$IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "$TITLE : XMAS-tree scan "
$IPTABLES -A inet_to_fw -p tcp --tcp-flags ALL NONE -m state --state ! ESTABLISHED -j LOG --log-prefix "$TITLE : NULL scan "
# PING -re ne válaszoljunk
$IPTABLES -A inet_to_fw -m state --state NEW -p icmp -j DROP
$IPTABLES -A inet_to_fw -p icmp --icmp-type echo-request -m limit --limit 3/s -j ACCEPT
$IPTABLES -A inet_to_fw -p icmp --icmp-type echo-request -j LOG --log-prefix "$TITLE : PoD attack "
$IPTABLES -A inet_to_fw -p icmp --icmp-type echo-request -j DROP

# Az Ăşj kapcsolatok helyesen kezdődjenek ( közvetett DoS )
$IPTABLES -A inet_to_fw -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$TITLE : hidden portscan "
$IPTABLES -A inet_to_fw -p tcp ! --syn -m state --state NEW -j DROP

# Jóváhagyott kapcsolatok elfogadása
$IPTABLES -A inet_to_fw -m state --state ESTABLISHED,RELATED -j ACCEPT

# Szolgáltatások engedélyezése (nyitott portok)
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 20 -j ACCEPT # Ftp-data
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 20 -j ACCEPT # Ftp-data
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 21 -j ACCEPT # Ftp
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 21 -j ACCEPT # Ftp

$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 23 -j ACCEPT # Telnet
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 23 -j ACCEPT # Telnet
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 25 -j ACCEPT # SMTP
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 25 -j ACCEPT # SMTP
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 465 -j ACCEPT # Secure SMTP
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 465 -j ACCEPT # Secure SMTP
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 53 -j ACCEPT # DNS
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 53 -j ACCEPT # DNS
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 80 -j ACCEPT # HTTP
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 80 -j ACCEPT # HTTP

$IPTABLES -A inet_to_fw -m state --state NEW -p tcp -s $LNET_ADDR --dport 22 -j ACCEPT # ssh
$IPTABLES -A inet_to_fw -m state --state NEW -p udp -s $LNET_ADDR --dport 22 -j ACCEPT # ssh
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 107 -j ACCEPT # rtelnet
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 107 -j ACCEPT # rtelnet
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 110 -j ACCEPT # POP3
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 110 -j ACCEPT # POP3
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 995 -j ACCEPT # Secure POP3
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 995 -j ACCEPT # Secure POP3
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 143 -j ACCEPT # IMAP
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 143 -j ACCEPT # IMAP
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 3389 -j ACCEPT # Távsegítség
$IPTABLES -A inet_to_fw -m state --state NEW -p udp --dport 3389 -j ACCEPT # Távsegítség
$IPTABLES -A inet_to_fw -m state --state NEW -p tcp -s 127.0.0.1 --dport 3128 -j ACCEPT # loopback engedélyezése az 5555 porton
$IPTABLES -A inet_to_fw -m state --state NEW -p udp -s 127.0.0.1 --dport 3128 -j ACCEPT # loopback engedélyezése az 5555 porton

$IPTABLES -A inet_to_fw -m state --state NEW -p tcp -s $LNET_ADDR --dport 3128 -j ACCEPT # belső hálózat engedélyezése az 5555 porton
$IPTABLES -A inet_to_fw -m state --state NEW -p udp -s $LNET_ADDR --dport 3128 -j ACCEPT # belső hálózat engedélyezése az 5555 porton

}
#
# Az internetről a LAN-ra továbbított csomagok
#
inet_to_lnet() {
# Tiltott IP-k szűrése
for i in `echo $DENIED_IPS`; do
$IPTABLES -A inet_to_fw -s $i -j DROP
done
# Hamisított IP-k szűrése (sysctl-k bebiztosítása)
$IPTABLES -A inet_to_lnet -s $CLASS_A -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_lnet -s $CLASS_A -j DROP
$IPTABLES -A inet_to_lnet -s $CLASS_B -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_lnet -s $CLASS_B -j DROP
$IPTABLES -A inet_to_lnet -s $CLASS_C -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_lnet -s $CLASS_C -j DROP
$IPTABLES -A inet_to_lnet -s $CLASS_D_MULTICAST -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_lnet -s $CLASS_D_MULTICAST -j DROP
$IPTABLES -A inet_to_lnet -s $CLASS_E_RESERVED -j LOG --log-prefix "$TITLE : fake IP source "
$IPTABLES -A inet_to_lnet -s $CLASS_E_RESERVED -j DROP

# SYN-Flood
$IPTABLES -A inet_to_lnet -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT
$IPTABLES -A inet_to_lnet -p tcp --syn -j LOG --log-prefix "$TITLE : SYN-Flood attack "
$IPTABLES -A inet_to_lnet -p tcp --syn -j DROP

# Nmap FIN/URG/PSH
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/m -j LOG --log-prefix "$TITLE : Nmap XMAS scan "
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

# SYN/RST
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/m -j LOG --log-prefix "$TITLE : SYN/RST scan "
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#SYN/FIN
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m -j LOG --log-prefix "$TITLE : SYN/FIN scan "
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# Portscan,PoD
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "$TITLE : XMAS-tree scan "
$IPTABLES -A inet_to_lnet -p tcp --tcp-flags ALL NONE -m state --state ! ESTABLISHED -j LOG --log-prefix "$TITLE : NULL scan "

# PING -re ne válaszoljunk
$IPTABLES -A inet_to_lnet -m state --state NEW -p icmp -j DROP
$IPTABLES -A inet_to_lnet -p icmp --icmp-type echo-request -m limit --limit 3/s -j ACCEPT
$IPTABLES -A inet_to_lnet -p icmp --icmp-type echo-request -j LOG --log-prefix "$TITLE : PoD attack "
$IPTABLES -A inet_to_lnet -p icmp --icmp-type echo-request -j DROP

# Az Ăşj kapcsolatok helyesen kezdődjenek ( közvetett DoS )
$IPTABLES -A inet_to_lnet -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$TITLE : hidden portscan "
$IPTABLES -A inet_to_lnet -p tcp ! --syn -m state --state NEW -j DROP

# Jóváhagyott kapcsolatok elfogadása
$IPTABLES -A inet_to_lnet -m state --state ESTABLISHED,RELATED -j ACCEPT

# Szolgáltatások engedélyezése (nyitott portok)
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 20 -j ACCEPT # Ftp-data
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 20 -j ACCEPT # Ftp-data
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 21 -j ACCEPT # Ftp
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 21 -j ACCEPT # Ftp
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 23 -j ACCEPT # Telnet
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 23 -j ACCEPT # Telnet
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 25 -j ACCEPT # SMTP
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 25 -j ACCEPT # SMTP
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 465 -j ACCEPT # Secure SMTP
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 465 -j ACCEPT # Secure SMTP
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 53 -j ACCEPT # DNS
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 53 -j ACCEPT # DNS
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 80 -j ACCEPT # HTTP
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 80 -j ACCEPT # HTTP
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 22 -j ACCEPT # ssh
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 22 -j ACCEPT # ssh
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 107 -j ACCEPT # rtelnet
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 107 -j ACCEPT # rtelnet
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 110 -j ACCEPT # POP3
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 110 -j ACCEPT # POP3
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 995 -j ACCEPT # Secure POP3
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 995 -j ACCEPT # Secure POP3
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 143 -j ACCEPT # IMAP
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 143 -j ACCEPT # IMAP
$IPTABLES -A inet_to_lnet -m state --state NEW -p tcp --dport 3389 -j ACCEPT # Távsegítség
$IPTABLES -A inet_to_lnet -m state --state NEW -p udp --dport 3389 -j ACCEPT # Távsegítség
}
#
# A LAN-ról a tűzfalra érkező csomagok
#
lnet_to_fw() {
# Itt mindent engedünk
$IPTABLES -A lnet_to_fw -j ACCEPT
# Másik alternatíva : SSH-t engedünk, pingelni lehet, dhcp ok
$IPTABLES -A lnet_to_fw -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A lnet_to_fw -m state --state NEW -p tcp --dport 22 -j ACCEPT
$IPTABLES -A lnet_to_fw -m state --state NEW -p udp --dport 22 -j ACCEPT
$IPTABLES -A lnet_to_fw -m state --state NEW -p icmp -j ACCEPT
$IPTABLES -A lnet_to_fw -p udp --dport 67 -j ACCEPT # DHCP
$IPTABLES -A lnet_to_fw -j DROP
}
#
# A LAN-ról az internetre küldött csomagok
#
lnet_to_inet() {
# Itt mindent engedünk
$IPTABLES -A lnet_to_inet -j ACCEPT
}
#
# A tűzfalról a LAN-ra küldött csomagok
#
fw_to_lnet() {
# Itt mindent engedünk
$IPTABLES -A fw_to_lnet -j ACCEPT
}
#
# A tűzfalról az internetre küldött csomagok
#
fw_to_inet() {
# Itt mindent engedünk
$IPTABLES -A fw_to_inet -j ACCEPT
}
#
# Internet megosztása a LAN számára
#
nat() {
$IPTABLES -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE
}
#
# Sysctl beállítások a /proc fájlrendszeren
#
sysctls() {
# ICMP redirect fogadásának kikapcsolása
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.accept_redirects=0 > /dev/null;
done
$SYSCTL -w net.ipv4.conf.all.accept_redirects=0 > /dev/null

# A forrás-routolási csomagok kikapcsolása
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.accept_source_route=0 > /dev/null;
done
$SYSCTL -w net.ipv4.conf.all.accept_source_route=0 > /dev/null

# A lehetetlen IP ről jövő csomagok loggolása
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.log_martians=1 > /dev/null;
done
$SYSCTL -w net.ipv4.conf.all.log_martians=1 > /dev/null

# Routolási háromszögelés illetve ip spoofing védelem
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.rp_filter=1 > /dev/null;
done
$SYSCTL -w net.ipv4.conf.all.rp_filter=1 > /dev/null

# ICMP redirect engedélyezése az átjáróknak
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.secure_redirects=1 > /dev/null;
done
$SYSCTL -w net.ipv4.conf.all.secure_redirects=1 > /dev/null

# ICMP redirect kikapcsolása Ha a gép router, írjuk át 1-re, és a
# többi host kap ICMP redirect-t
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.send_redirects=0 > /dev/null;
done
$SYSCTL -w net.ipv4.conf.all.send_redirects=0 > /dev/null

# PING-re válaszolunk - majd a láncokon szűrjük/kikapcsolhatjuk
$SYSCTL -w net.ipv4.icmp_echo_ignore_all=0 > /dev/null
# Ne válaszoljunk a broadcast PING-re
$SYSCTL -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
# Ne loggoljuk a hibás router broadcastokat
$SYSCTL -w net.ipv4.icmp_ignore_bogus_error_responses=1 > /dev/null
# IP routolás engedélyezése NAT-hoz
$SYSCTL -w net.ipv4.ip_forward=1 > /dev/null
}
#
# Sysctl visszaállítások
#
unsysctls() {
# Default értékeket visszaállítjuk
# --- mégjobb lenne: config fájlban elmenteni a tűzfal előtti
# beállításokat, és onnan visszamenteni! ---
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.accept_redirects=1 > /dev/null;
done
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.accept_source_route=0 > /dev/null;
done
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.log_martians=0 > /dev/null;
done
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.rp_filter=0 > /dev/null;
done
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.secure_redirects=1 > /dev/null;
done
for f in /proc/sys/net/ipv4/conf/*; do
$SYSCTL -w net.ipv4.conf.`basename $f`.send_redirects=1 > /dev/null;
done
$SYSCTL -w net.ipv4.icmp_echo_ignore_all=0 > /dev/null
$SYSCTL -w net.ipv4.icmp_echo_ignore_broadcasts=0 > /dev/null
$SYSCTL -w net.ipv4.icmp_ignore_bogus_error_responses=0 > /dev/null
$SYSCTL -w net.ipv4.ip_forward=0 > /dev/null
}
#
# Az internethozzáférés zárása
#
lock() {
LINE=`$IPTABLES -L inet_to_lnet -n | head -3 | tail -1`
if ! ( [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]); then
$IPTABLES -I inet_to_lnet 1 -j DROP
fi
LINE=`$IPTABLES -L inet_to_fw -n | head -3 | tail -1`
if ! ( [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]); then
$IPTABLES -I inet_to_fw 1 -j DROP
fi
}
#
# Az internethozzáférés engedélyezése
#
unlock() {
LINE=`$IPTABLES -L inet_to_lnet -n | head -3 | tail -1`
if [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]; then
$IPTABLES -D inet_to_lnet 1
fi
LINE=`$IPTABLES -L inet_to_fw -n | head -3 | tail -1`
if [ `echo $LINE | awk '{print $1}'` == "DROP" ] && [ `echo $LINE | awk '{print $2}'` == "all" ] && [ `echo $LINE | awk '{print $4}'` == "0.0.0.0/0" ] && [ `echo $LINE | awk '{print $5}'` == "0.0.0.0/0" ]; then
$IPTABLES -D inet_to_fw 1
fi
}
case "$1" in
start)
if [ ! -x $IPTABLES ]; then
echo "No iptables found so not starting firewall..."
exit 1
fi
echo " * Starting Firewall..."
sysctls
delete_chains
create_chains
basic_rules
inet_to_fw
inet_to_lnet
lnet_to_fw
lnet_to_inet
fw_to_lnet
fw_to_inet
nat
;;
stop)
echo " * Stopping Firewall..."
delete_chains
unsysctls
;;
restart)
$0 stop
sleep 1
$0 start
;;
lock)
echo " * Locking System & LAN from Internet access..."
lock
;;
unlock)
echo " * Unlocking System & LAN for Internet acccess..."
unlock
;;
list)
$IPTABLES -L -n
;;
*)
echo "Usage : $0 {start|stop|restart|lock|unlock}"
exit 1
;;
esac

Remélem így jó. Bocsi, hogy csak így bevágtam, de eredetileg nem nem néztem, hogy más a kódolás.

Szia!

Eloszor is:
Le tudod tesztelni, hogy az adott sorra ($IPTABLES -A inet_to_fw -m state --state NEW -p tcp --dport 995 -j ACCEPT # Secure POP3) matchel e csomag ha kilistazod az iptables szabalyokat:

Nalam a 80 port:
iptables -L -nv | grep "dpt:80"
1433 77465 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

Amit kiemeltem a matchelt csomagszam (1443) es a merete byte-ban (77465).

Ebbol lathatod, hogy van forgalma, tehat a szabaly jo.

Kovetkezo lepes kb a tcpdump, ha meg mindig itt akarsz keresgelni, de szamomra nem egyertelmu abbol amit irtal, mierta tuzfaladra gyanakszol. Sokkal valoszinubb hogy a levelezo (szerver) beallitasokkal van baj. Nezz logokat kozben ...

U.i.> koszi, hogy kijavitottad. Talan meg annyi, hogy legkozelebb toltsd fel valahova es linkeld be, vagy pastebin. De nem akarok okoskodni ide, csak tanacs :)

-
budacsik

A felállás a következő:
van egy gép, melyen keresztül osztom a netet. Rajta fut ez a script és egy Squid transzparens módban. Arra is gyanakszom, hogy a Squid felülkonfigurálja a porteléréseket (abban is vannak port szabályok: acl ports, stb., lehet hgy törölni kellene). Nem tudom, hogy ez lehetséges-e, bocs ha hülyeséget kérdezek.
Holnap megnézem a postfixet is.
Ja és a levelezőprogram a klienseken, mely nem tud leveleket letölteni: Outlook Express.

To machobymb!

Most futottam neki masodjara (par nappal kesobb) de megint abbahagytam.
Ugye latod miert ... es valoszinuleg ezert nem jott meg valasz ra.

(Direkt nem arra valaszoltam, hogy szerkeszthesd)
-
budacsik

én is most barátkozom a netfilter használatával, aminek képességei igencsak ámulatba ejtenek, és jó lenne benne kissé elmélyednem - így nekem is lenne 1 közszemlére váró szkriptem, ami alapvetően működik, de néhány kellemetlen hiba miatt azért elég zavaró... :
első körben sikerült kizárnom magam 1 jó távoli szerverből, amit aztán csak e-mailezgetés útján tudtam újraindíttatni, így javaslom minden hozzám hasonló kontárnak, h vagy otthoni gépen kísérletezzen először v. a crontab-ban helyesen (én pl. path nélkül adtam meg a szkriptet...:D) adjon meg 1 iptables nullázós parancsot úgy 10 percenként :)
node jelenlegi problémáim szűk szavakban azoknak, akik nem akarják átnyálazni a pastebin-es irományt:
* első körben a mindenfelé fellelhető DoS,Ping of Death és egyéb támadások elleni védelemmel kapcs. kérdezem, h ezek mennyire valós veszélyek egy serverpark-ban elhelyezett gépnél (előszűrés a gépek előtt?) ill. gondolom a portscan ellen érdemes lehet védekezni (majd tesztelem, h műdödik-e rendesen az általam használt sorhalmaz...)
* a LOG érdekesen működik, pontosabban nem sikerült annak minden csínját-bínját elsajátítanom: kb. mindig az utolsó (INPUT DROP) bejegyzést kapom... próbáltam az elején logolni a SYN-flood részt (kikommentezve a szkriptben), de ennek hatására böngészőből érvénytelen portra való kapcsolódás kapásból SYN-flood bejegyzést eredményezett (bár lehetséges, h ez normális és ilyen esetben a böngésző elárasztja?)...
ami viszont komolyabb: az SSH port védése percenkénti 3 próbálkozási lehetőséggel/IP sikeres volt, azonban az ahhoz gyártott LOG-olási kísérletem totál működésképtelennek tűnik... (mind a tiltás, mind a sikeres bejelentkezés rögzítése)
elnézéseteket kérem a hosszú bejegyzésért és köszönet előre is azoknak, akik átnézik soraimat...

1./ Javitsatok ki ha tevedek, de ezzel a szaballyal (elegge az elejen van), minden uj csomagot beengedsz, fuggetlenul attol, hogy mi az, csak az ido limitnek kell megfelelnie:
$IPTABLES -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec --limit-burst 4 -j ACCEPT

Bocs, most latom, hogy ott a DROP, csak ki van kommentezve. Miert?

2./ Feltetelezem ez egy otthoni szerver?!
3./ A kimeno lancot is szurd.

4./ Nem vagyok tisztaban az ICMP-s tamadasoknak, de biztos nem art ha azokat is limitalva engedelyezed. Biztos ami biztos :)

-
budacsik

köszönöm a segítséged :)
amúgy épp ezzel "küzdök" újra, nagyjából sikerül már összepakolni azt hiszem... de észrevételeidből újra tanulok:)
1.) Azt a részt azért kommenteztem ki, m ha bent volt, akkor böngészőből tesztelve egy olyan portot, amin nem fut szolgáltatás (+ később ugye nem is volt engedélyezve): telepakolta a LOG-ot "SYN-flood attack" bejegyzésekkel, amit kissé furcsáltam... de gondolom ez a böngésző folyamatos kapcsolódási kísérlete miatt lehet. Viszzarakom, aztán megnézem mvmi normális próbával!
2.) Hát helyileg nem itthon fut, de nincs rajta semmi éles szolgáltatás, hobbi/tanulás célokat szolgál...
3.) Úgy lesz :)
4.) Én meg nagyon nem, így marad 1enlőre, aztán utánajárok lassan...
köszi még1szer!

átalakítgattam a szkriptet, egyre inkább működik :)
viszont az 1. részben megjelölt szabály hatására tényleg minden csomag bejut (ezért is maradtak el a várt SSH-s logjaim...), tökmind1, h szerepel-e utána a DROP... ennek még utána kell járnom (most kiszedtem), de alakul ez!
ezt leszámítva viszont úgy tűnik minden klappol (engedélyek/tiltás/logok) + SSH-szűrésre találtam 1 kellemesebb algoritmust :)

"1. részben megjelölt szabály hatására tényleg minden csomag bejut (ezért is maradtak el a várt SSH-s logjaim...), tökmind1, h szerepel-e utána a DROP"

Igen, mert a DROP csak azt dobja el ami nem felelt meg az időlimit meghatározásnak. Ami megfelelt az be is jutott, legyen bármi.
Tedd külön láncba.

pl.:

# vedekezesek tamadasok ellen
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "INVALID_SYN "
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Syn-flood vedelem:
iptables -A INPUT -p tcp --syn -m state --state NEW -j syn_flood
iptables -A syn_flood -p tcp --syn -m limit --limit 1/s --limit-burst=4 -j RETURN
iptables -A syn_flood -p tcp --syn -m limit --limit 1/s --limit-burst=4 -j LOG --log-prefix "SYN_DROP "
iptables -A syn_flood -p tcp --syn -j DROP

Tehát ami megfelel az idő limitre az visszatér az eredeti láncba (INPUT) és halad tovább míg nem matchel valamire(pl ssh)

-
budacsik

köszi szépen! és azt hiszem lassan kezdem átlátni a netfilter logikáját...
javításaid, meglátásaid immáron szokás szerint hasznosítom :)
a végső véltozat (amit valszeg fent is hagyok pastebin-en, hátha vkinek jól jön kezdő szkriptnek...) úgy néz ki, h kifogástalanul működik! de azért tesztelgetem majd még, ha nagyon unatkozom... a log-level benne maradt, h hátha egyszer átpakolom más levelre a LOG teljes elkülönítése céljából.

Öhmm, működik az SSH lánc is? Mert úgylátom először definiálod rá a szabályokat, de csak utána küldesz rá csomagokat.

backlist szintúgy

Még egy észrevétel. Ha jól tudom az alapértelmezett loggolási szint a 4. Tehát nem kell megadni.

+1
#
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "XMAS-tree scan " --log-level 4

ezt csak loggolod

-
budacsik

Sziasztok!

Már vagy 2 hete próbálok összerakni egy tűzfalat...de sajnos egyelőre nem túl sok sikerrel.
Már nem bírom tovább, és hozzátok fordulok segítségért.
Sajnos kezdő vagyok a témában. Pedig olvastam már egy rakás iptables example scriptet meg howto-t. Valami sohasem akar helyesen működni.

Konkrét példa:
adott egy szerver:

eth1.61 kulso fix ip
eth0 belso ip

ha ez a script fut le indulaskor akkor jo minden:

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables-restore < /root/myip

a "myip" konkretan igy nez ki:

# Generated by iptables-save v1.3.6 on Tue Feb 19 18:47:38 2008
*filter
:INPUT DROP [203:41765]
:FORWARD DROP [394:29935]
:OUTPUT ACCEPT [1580:212066]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,80,3389,443 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
COMMIT
# Completed on Tue Feb 19 18:47:38 2008
# Generated by iptables-save v1.3.6 on Tue Feb 19 18:47:38 2008
*nat
:PREROUTING ACCEPT [9426:1250219]
:POSTROUTING ACCEPT [319:45799]
:OUTPUT ACCEPT [173:23755]
-A PREROUTING -i ! eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.100.2
-A POSTROUTING -o eth1.61 -j MASQUERADE
COMMIT
# Completed on Tue Feb 19 18:47:38 2008

Ezt nekem sikerult osszrakni,de ez ugye az alapnak az alapja, mindenfele vedelem nelkul.
Ha probalok (az itt lathato hozzaszolasok alapjan) lopni otletet mas scriptbol, akkor a szerver
belassul, ftp nem mukodik. Persze nem mintha a lopott otlet lenne rossz, hanem csak egyszeruen nekem nem akar mukodni az en verziomban. Legyszives segitsetek, meg ha nagyon primitiv hibakat is vetek. Valahol el kell kezdeni, de a HUP-on kivul nincs aki segítsen nekem. Koszonom!!!

A nem mukodo (es gondolom hibaktol hemzsego iptables mentesem):

# Generated by iptables-save v1.3.6 on Tue Mar 4 16:14:28 2008
*nat
:PREROUTING ACCEPT [875:122533]
:POSTROUTING ACCEPT [51:6496]
:OUTPUT ACCEPT [8:1546]
-A POSTROUTING -o eth1.61 -j MASQUERADE
COMMIT
# Completed on Tue Mar 4 16:14:28 2008
# Generated by iptables-save v1.3.6 on Tue Mar 4 16:14:28 2008
*filter
:INPUT DROP [1:52]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [176:24276]
:dosattack - [0:0]
:portscan - [0:0]
:security - [0:0]
:sinput - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -j security
-A INPUT -j dosattack
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j security
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 16/sec -j ACCEPT
-A FORWARD -p icmp -m icmp --icmp-type 8 -j DROP
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i eth0 -p tcp -m multiport --dports 20,21,53,80,110,123,443 -m state --state NEW,RELATED -j ACCEPT
-A FORWARD -i eth0 -p udp -m multiport --dports 20,21,53,80,110,123,443 -m state --state NEW,RELATED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A dosattack -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 8/sec -j sinput
-A dosattack -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j LOG --log-prefix "FW: Syn-Flood attack (?) "
-A dosattack -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A dosattack -j sinput
-A security -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j LOG --log-prefix "FW: Xmas-tree scan (?) "
-A security -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -m state --state INVALID,NEW,RELATED,UNTRACKED -j LOG --log-prefix "FW: Null scan (?) "
-A security -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A security -p icmp -m icmp --icmp-type 8 -j LOG --log-prefix "FW: PingofDeath attack (?) "
-A security -p icmp -m icmp --icmp-type 8 -j DROP
-A sinput -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "FW: hidded portscan (?) "
-A sinput -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A sinput -s 192.168.100.0/255.255.255.0 -i eth0 -p tcp -m multiport --dports 20,21,25,53,80,3128 -m state --state NEW -j ACCEPT
-A sinput -s 192.168.100.0/255.255.255.0 -i eth0 -p udp -m multiport --dports 20,21,25,53,80,3128 -m state --state NEW -j ACCEPT
-A sinput -p tcp -m tcp --dport 443 -j ACCEPT
-A sinput -p tcp -m tcp --dport 80 -j ACCEPT
-A sinput -p tcp -m tcp --dport 22 -j ACCEPT
-A sinput -p icmp -j ACCEPT
-A sinput -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Mar 4 16:14:28 2008

---------------------------
A UNIX élt, él és élni fog!

Szerintem indulj el a működő szkripteddel.
Majd egyessével tegyél be új szabályokat, és teszteld, mielőtt a következőt is betennéd.
És ha elakadsz egy konkrét dolognál írd ide.

Bocsi, de részemről elég fárasztó ezt átnézni sorról sorra, és így Te is jobban tanulsz.

-
budacsik

Sziasztok!

Én is kérnék egy kis segítséget iptables ügyben.
Otthonra csináltam egy kis scriptet, nagyobb részt innen a hupról meg egy két más helyről összetallózva, amit majd a routeren(WRT54GL, Tomato-val) szeretnék használni, egyenlőre a gépemen tesztelem.
Nagyjából működik is minden, de pl. bizonyos eldobott csomagokat nem logol.
Mondjuk a whois nem ment(tcp/43) vagy ha nem szabvány ftp porton akartam csatlakozni simán csak elszállt timeouttal, logban semmi.
Meg ha törlöm a láncok tartalmát(iptables -F), akkor az egész adatkommunikáció meghal, semmit nem lehet pingelni, router sem elérhető(connect: Network is unreachable).
/etc/init.d/networking restart vagy ifconfig eth0 up/down sem segít, reboot után jó.
Most meg egy reboot után azt csinálja, hogy lefut a script, de ezt a hibát adja:

iptables v1.3.8: Unknown arg `--dport'
Try `iptables -h' or 'iptables --help' for more information.

A rendszerem egy Debian testing.
Itt van maga a script:

#!/bin/sh

## otthoni tűzfal

## először törlünk minden szabályt.
iptables -F
iptables -X
iptables -Z
## alap policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

## INPUT szabályok.
iptables -A INPUT -i lo -j ACCEPT ## loopback -en engedélyezzük a forgalmat.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## engedélyezzük befele, ami tőlünk származik.
iptables -A INPUT -p tcp --dport ssh -m limit --limit 3/m -j LOG --log-uid --log-prefix "SSH_ACCEPT: "
iptables -A INPUT -p tcp -s 192.168.1.1 --syn --dport ssh -m limit --limit 3/m -j ACCEPT
iptables -A INPUT -p tcp --syn --dport ssh -m recent --update --seconds 60 --hitcount 3 -j DROP
iptables -A INPUT -p tcp --syn --dport
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT ## kintről "ping" mehet.
iptables -A INPUT -p tcp --dport 54896:54897 -j ACCEPT ## torrent
iptables -A INPUT -p udp --dport 54896:54897 -j ACCEPT ## torrent
iptables -A INPUT -p tcp ! --syn -m state --state NEW -m limit --limit 2/min # uj kapcsolat
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #nem syn-nel kezdodik, kulonben esetleg tamadas
iptables -A INPUT -j LOG --log-uid --log-prefix "INPUT_DROP: "

## OUTPUT szabályok.
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT ##kifele menő "ping" -re szükség lehet.
iptables -A OUTPUT -o lo -j ACCEPT ## loopback -en engedélyezzük a forgalmat.
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## jóváhagyott kapcsolatok engedélyezése.
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT ## a DNS -re szükség van.
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT ## ntp mehet
iptables -A OUTPUT -p tcp --dport 123 -m state --state NEW -j ACCEPT

iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT ## http mehet.
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT ## https mehet
iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT ## ssh mehet.
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp control mehet
iptables -A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp data mehet
iptables -A OUTPUT -p tcp --dport 31337 -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp
iptables -A OUTPUT -p tcp --dport 43 -m state --state NEW,ESTABLISHED -j ACCEPT ## whois
iptables -A OUTPUT -p tcp -d mail.chello.hu --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés SMTP
iptables -A OUTPUT -p tcp -d imap.gmail.com --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés IMAP4s
iptables -A OUTPUT -p tcp --dport 45761 -m state --state NEW,ESTABLISHED -j ACCEPT ## router távoli elérés
iptables -A OUTPUT -p tcp --dport 56732 -m state --state NEW,ESTABLISHED -j ACCEPT ## VNC

iptables -A OUTPUT -p tcp --dport 1863 -m state --state NEW,ESTABLISHED -j ACCEPT ## msn
iptables -A OUTPUT -p tcp --dport 6667 -m state --state NEW,ESTABLISHED -j ACCEPT ## irc
iptables -A OUTPUT -p tcp --dport 54896:54897 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent
iptables -A OUTPUT -p udp --dport 54896:54897 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent
iptables -A INPUT -j LOG --log-uid --log-prefix "OUTPUT_DROP: "

# FORWARD lanc
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 3/m --limit-burst 1 -j ACCEPT

Plusz kérdés, szerintetek a routeren is menni fog logolás?
Mert dmesg van, de amúgy a /tmp/var/log/messages fájlba logol.

Ja és légyszíves a válaszoknál vegyétek figyelembe, hogy nem vagyok egy guru, köszi. :)

Pár órája már ülök felette, ott elakartam kezdeni valamit írni, de úgy tűnik elmaradt.
Most vettem észre, hogy az OUTPUT láncnál is az INPUT dropjait logoltam, meg a router távoli elérését is a saját gépemről akartam megvalósítani, a belső háló már nem is jó. :))

Valóban a default policy volt a hibás, azt most ACCEPT-re állítottam, és minden lánc végére ment egy DROP, a logolás után, így törléskor rendben van és logol is mindent rendesen.
Köszi a segítséget!

Még egy dolog jutott az eszembe.

iptables -A INPUT -p tcp --syn --dport ssh -m recent --update --seconds 60 --hitcount 3 -j DROP

Ez a sor ugye elvileg azt csinálja, hogy ha ugyanarról az IP-ről 3 sikertelen bejelentkezés van akkor kitiltja egy percre, igaz?
Amennyiben kihagyom az "--update --seconds 60" részt akkor véglegesen kitiltja az adott IP-t?
Ha igen, akkor a későbbiekben hogyan tudom újra engedélyzni?

UP

Azt még sejtem is a man alapján, hogy letiltja fixen 3 próbálkozás után, de azt nem látom hogyan lehetne utána engedélyezni.
Vagy ahhoz, hogy letiltsa kellene utána ez a sor is "iptables -A INPUT -p TCP --syn --dport ssh -m recent --set -j ACCEPT"?
Bár ha jól értettem ez csak hozzáadja a forrás IP-t a listához.

Én igy használom:

iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 120 --hitcount 3 -j REJECT

Ezzel az SSH_2_perc_alatt_csak 3 kapcsolatot engedélyez! Nem kell nullázni semmit.

--
Desktop: 2.6.21-gentoo-r4 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
Laptop: 2.6.22-gentoo-r5 Mobile Intel(R) Pentium(R) 4 - M CPU 2.00GHz

Mármint 3 kapcsolódási kísérletet 2 perc alatt, igaz?
De összesen vagy egy adott IP-ről?
Bocs a lámaságomért...

Ez nehezebb lesz mint gondoltam.
Gépen belőttem faszán a tűzfalat, ment is minden, de ahogy felraktam a routerre összeomlott az egész, át kellett írni jó pár dolgot s őszintén szólva már totál belezavarodtam, hogy melyik láncon mit kell engedélyezni.
Most nagyjából minden megy, de a torrent nem hajlandó elindulni, a trackerekhez sem tud csatlakozni s nem vágom miért.
Itt a jelenlegi script, még eléggé gányolt verzió.

## otthoni t 171zfal

## el 151ször törlünk minden szabályt.
iptables -F
iptables -X
iptables -Z
## alap policy
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

## INPUT szabályok.
iptables -A INPUT -i lo -j ACCEPT ## loopback -en engedélyezzük a forgalmat.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## engedélyezzük befele, ami t 151lünk származik.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -m limit --limit 2/min # uj kapcsolat
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #nem syn-nel kezdodik, kulonben esetleg tamadas
iptables -A INPUT -p tcp --dport ssh -m limit --limit 3/m -j LOG --log-uid --log-prefix "SSH_ACCEPT: "
iptables -A INPUT -p tcp -s 192.168.1.2 --syn --dport ssh -m limit --limit 3/m -j ACCEPT
iptables -A INPUT -p tcp -s 145.236.252.34 --syn --dport ssh -m limit --limit 3/m -j ACCEPT
iptables -A INPUT -p tcp -s 212.51.124.92 --syn --dport ssh -m limit --limit 3/m -j ACCEPT
iptables -A INPUT -p tcp --syn --dport ssh -m recent --update --seconds 60 --hitcount 3 -j DROP
iptables -A INPUT -p tcp --dport 45761 -m state --state NEW,ESTABLISHED -j ACCEPT ## router távoli elérés
iptables -A INPUT -p tcp --dport 56732 -m state --state NEW,ESTABLISHED -j ACCEPT ## VNC
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT ## kintr 151l "ping" mehet.
iptables -A INPUT -p tcp --dport 54896:54897 -j ACCEPT ## torrent
iptables -A INPUT -p udp --dport 54896:54897 -j ACCEPT ## torrent
iptables -A INPUT -p tcp -d kiszolgalo -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp
iptables -A INPUT -p udp --dport 68 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.2 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.1.2 -j ACCEPT
iptables -A INPUT -j LOG --log-uid --log-prefix "INPUT_DROP: "
iptables -A INPUT -j DROP

## OUTPUT szabályok.
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## jóváhagyott kapcsolatok engedélyezése.
iptables -A OUTPUT -p tcp -d 192.168.1.2 --syn --dport ssh -m limit --limit 3/m -j ACCEPT
iptables -A OUTPUT -j LOG --log-uid --log-prefix "OUTPUT_DROP: "
iptables -A OUTPUT -j DROP

# FORWARD lanc
iptables -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT ## loopback -en engedélyezzük a forgalmat.
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT ## jóváhagyott kapcsolatok engedélyezése.
iptables -A FORWARD -p udp --dport 53 -j ACCEPT ## a DNS -re szükség van.
iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --dport 123 -j ACCEPT ## ntp mehet
iptables -A FORWARD -p tcp --dport 123 -m state --state NEW -j ACCEPT

iptables -A FORWARD -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT ## http mehet.
iptables -A FORWARD -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT ## https mehet
iptables -A FORWARD -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT ## ssh mehet.
iptables -A FORWARD -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp control mehet
iptables -A FORWARD -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp data mehet
iptables -A FORWARD -p tcp -d kiszolgalo -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp
iptables -A FORWARD -p tcp --dport 43 -m state --state NEW,ESTABLISHED -j ACCEPT ## whois
iptables -A FORWARD -p tcp -d mail.chello.hu --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés SMTP
iptables -A FORWARD -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés IMAP4s

iptables -A FORWARD -p tcp --dport 1863 -m state --state NEW,ESTABLISHED -j ACCEPT ## msn
iptables -A FORWARD -p tcp --dport 6667 -m state --state NEW,ESTABLISHED -j ACCEPT ## irc
iptables -A FORWARD -p tcp --dport 54896:54897 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent
iptables -A FORWARD -p udp --dport 54896:54897 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent
iptables -A FORWARD -p tcp --dport 2710 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent trackerek
iptables -A FORWARD -p udp --dport 2710 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent trackerek
iptables -A FORWARD -j LOG --log-uid --log-prefix "FORWARD_DROP: "
iptables -A FORWARD -j DROP

Ha jól értelmeztem akkor minden a gépemtől érkező kapcsolatot engedélyezni kell, mert a routernek az INPUT-nak számít, amiket aztán a forward láncon továbbít a külvilágnak.
Az OUTPUT láncot csak akkor használja ha ő maga kezdeményez kapcsolatot a gépem vagy a külvilág felé.
Ez így stimmel?
Natolásra kellene nekem figyelni a tűzfal szintjén vagy azt a router elvégzi magától?

Kezdjük a végéről! Ha jól értettem, ezek a szabályok a routerre kerülnének. A géped és a külvilág közötti forgalom nem érinti a routeren lévő INPUT és az OUTPUT láncot, csak a FORWARD-ot. Az INPUT-on és az OUTPUT-on csak a router által lokálisan generált illetve a kifejezetten neki címzett csomagok mennek át. Tehát ami a gépen az INPUT, OUTPUT láncokban biztosította a külső kommunikációt, az a routeren (csak) a FORWARD láncba kell hogy kerüljön.

Ebből az következik, hogy a fenti listából az INPUT-ból kivehető az VNC, torrent, FTP. Ha az internetelérés nem DHCP által kapott IP-n valósul meg, akkor bootpc sem fog jönni kívülről, belülről meg valószínűleg statikus IP-je van a routernek, így az nem kér IP-t. Ha viszont a router a belső hálózat számára DHCP szerver, akkor bootps kellene. Egyszóval csak a router menedzselésére használt protokollok maradjanak, plusz néhány egyéb szükséges dolog (DHCP). A TCP syn limites sorból nem hiányzik a target? Így csak számolod a csomagokat, utána meg eldobod. Nem --syn akart lenni "! --syn" helyett?

Az OUTPUT-ban most csak a géped felé indított SSH van engedélyezve, és az INPUT-ban engedett forgalomhoz tartozó visszirány. Ha esetleg a routert használnád name serverként, nem menne. Vagy például nem tudnál pingelni sem a routerből. A loopback forgalmat nem kellene tiltani.

A FORWARD láncban ha először kiengeded az ESTABLISHED állapotú kapcsolathoz tartozó csomagokat, akkor ezt a későbbieken már felesleges, elég csak a NEW-val foglalkozni. A loopback interfészről itt nem fog semmi sem kimenni. ICMP-ből is jó lenne többet átengedni, nem csak az echot. Az aktív FTP adatot is kezeli a RELATED. Az "## ftp" komment ellenére minden TCP forgalom át van engedve a "kiszolgalo" felé.

Általában érdemes megmondani a csomag forrását, célját, input vagy output interfészét, ami egyértelművé teszi az átengedni kívánt irányt, mert úgy nem olyan könnyű véletlenül kiskapukat nyitni. Ugye a 192.168.1.1 a router, és a 192.168.1.2 a mögötte lévő gép? A fenti tűzfal éppúgy átengedné például a HTTP-t úgy kifelé mint befelé kezdeményezve. Azért a feltételes mód, mert a megfelelő NAT-ok hiánya nélkül mégsem megy.

A NAT-olást valószínűleg szintén meg kell írni, de ezt ellenőrizheted a nat tábla szabályainak listázásával. Ha üres, akkor hiányzik. Kifelé SNAT vagy MASQUERADE, befelé - ha van publikus szolgáltatás a gépen - DNAT.

Ha valami nem megy, akkor viszonylag könnyű rájönni hogy mi hiányzik, mivel minden eldobott csomag megy a logba.

Először is köszönöm a segítséget!
Igen, ezek a szabályok a routerre kerülnének.
INPUT láncból ftp-t, torrentet kivettem, de a VNC-nek maradnia kell, különben távolról hogyan csatlakozom a géphez?

UPC-nél vagyok, tőlük dhcp-vel kapom az IP-t így folyamatosan jönnek bootstrap üzenetek, ezért engedélyeztem az INPUT-ban, a belső hálón lévő gépek fix IP-t kapnak.
A --syn limites sorból valóban hiányzott a target, köszi, bár ha végiggondolon nem tudom kell-e egyáltalán az a sor, az utána lévő úgyis eldobja a nem syn-es csomagokat, a nem kívánt forgalom meg úgysem jut át a többi szabály miatt, nem?

OUTPUT-on loopbacket engedélyeztem és az 53-as portot is, valóban a router van megadva name servernek.

FORWARD javítva, ftp-nél azért van külön megadva egy kiszolgáló, mert ő a 31337-es porton kommunikál, azonban amikor teszteltem a gépen hiába engedélyeztem a portot, nem volt adatforgalmam tőle, csatlakozni tudtam rá, de pl. egy "ls" parancsra már nem jött válasz, azért lett így megoldva.

A legtöbb esteben nem fix se a forrás se a cél, ahol tudtam, ott igyekeztem megadni, de pl. amikor csak a google imap szervere felé engedélyeztem a 993-as portot nem kommunikált, amint töröltem a célt és csak a portot hagytam működött, viszont a 25-ösnél érdekes mód nem zavarja a cél megadása.
"Ugye a 192.168.1.1 a router, és a 192.168.1.2 a mögötte lévő gép?" Igen, így van.

Az interfészekkel viszont bajban vagyok, egész másképp működik látszólag mint a gépen.
ifconfig kimenete:

# ifconfig 
br0        Link encap:Ethernet  HWaddr 00:1C:10:88:56:71  
           inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:1157122 errors:0 dropped:0 overruns:0 frame:0
           TX packets:1285335 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:228217809 (217.6 MiB)  TX bytes:1345458877 (1.2 GiB)

eth0       Link encap:Ethernet  HWaddr 00:1C:10:88:56:71  
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:2749077 errors:3 dropped:0 overruns:3 frame:3
           TX packets:2406807 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:100 
           RX bytes:1628382191 (1.5 GiB)  TX bytes:1593592113 (1.4 GiB)
           Interrupt:4 Base address:0x1000 

eth1       Link encap:Ethernet  HWaddr 00:1C:10:88:56:73  
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:100 
           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
           Interrupt:2 Base address:0x5000 

lo         Link encap:Local Loopback  
           inet addr:127.0.0.1  Mask:255.0.0.0
           UP LOOPBACK RUNNING MULTICAST  MTU:16436  Metric:1
           RX packets:62 errors:0 dropped:0 overruns:0 frame:0
           TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:5297 (5.1 KiB)  TX bytes:5297 (5.1 KiB)

vlan0      Link encap:Ethernet  HWaddr 00:1C:10:88:56:71  
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:1157122 errors:0 dropped:0 overruns:0 frame:0
           TX packets:1285334 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:232846581 (222.0 MiB)  TX bytes:1350598707 (1.2 GiB)

vlan1      Link encap:Ethernet  HWaddr 00:50:8D:F9:F3:E6  
           inet addr:86.101.4.240  Bcast:86.101.4.255  Mask:255.255.255.0
           UP BROADCAST RUNNING MULTICAST  MTU:1492  Metric:1
           RX packets:1591955 errors:0 dropped:0 overruns:0 frame:0
           TX packets:1121475 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:1346053670 (1.2 GiB)  TX bytes:242994974 (231.7 MiB)

Ebből elvileg az következik, hogy a br0-án kommunikál befele, a vlan1-en pedig kifele, de nem értem miért a vlan1-en és akkor mire van az eth0 és eth1?
Az OUTPUT-ban mindkettőt engedélyezni kell, mert mehet a külvilág fele is és a gépem fele is kapcsolat kezdeményezés, igaz?
INPUT-nál a br0-át kellene megadni, FORWARD-nál meg a vlan1-et?

NAT-oláshoz totál nem értek egyenlőre, de ha szükséges lesz majd utánaolvasok, egyenlőre bemásolom, hogy milyen szabályok vannak alapból a routerben.

# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 10457 packets, 1083K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       0    --  vlan1  *       0.0.0.0/0            192.168.1.0/24      
    0     0 DNAT       icmp --  *      *       0.0.0.0/0            86.101.4.240        to:192.168.1.1 
    2   120 DNAT       tcp  --  *      *       0.0.0.0/0            86.101.4.240        tcp dpt:8080 to:192.168.1.1:443 
    9   540 DNAT       tcp  --  *      *       0.0.0.0/0            86.101.4.240        tcp dpt:22 to:192.168.1.1:22 
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            86.101.4.240        tcp dpt:56732 to:192.168.1.2 
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            86.101.4.240        udp dpt:56732 to:192.168.1.2 
 3013  178K DNAT       tcp  --  *      *       0.0.0.0/0            86.101.4.240        tcp dpts:54896:54897 to:192.168.1.2 
  742 36438 DNAT       udp  --  *      *       0.0.0.0/0            86.101.4.240        udp dpts:54896:54897 to:192.168.1.2 
    6   360 DNAT       tcp  --  *      *       0.0.0.0/0            86.101.4.240        tcp dpt:64561 to:192.168.1.2 

Chain POSTROUTING (policy ACCEPT 3712 packets, 212K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 SNAT       tcp  --  *      *       192.168.1.0/24       192.168.1.2         tcp dpt:56732 to:192.168.1.1 
    0     0 SNAT       udp  --  *      *       192.168.1.0/24       192.168.1.2         udp dpt:56732 to:192.168.1.1 
   57  3420 SNAT       tcp  --  *      *       192.168.1.0/24       192.168.1.2         tcp dpts:54896:54897 to:192.168.1.1 
    0     0 SNAT       udp  --  *      *       192.168.1.0/24       192.168.1.2         udp dpts:54896:54897 to:192.168.1.1 
    0     0 SNAT       tcp  --  *      *       192.168.1.0/24       192.168.1.2         tcp dpt:64561 to:192.168.1.1 
 4549  454K MASQUERADE  0    --  *      vlan1   0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 30 packets, 2034 bytes)
 pkts bytes target     prot opt in     out     source               destination         
# iptables -vnL       
Chain INPUT (policy DROP 2660 packets, 398K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       0    --  br0    *       0.0.0.0/0            86.101.4.240        
   36  3686 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID 
22946 1892K ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
  495 30357 ACCEPT     0    --  br0    *       0.0.0.0/0            0.0.0.0/0           
    8   517 ACCEPT     0    --  lo     *       0.0.0.0/0            0.0.0.0/0           
    2   120 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.1         tcp dpt:443 
    9   540 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.1         tcp dpt:22 

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  373 22960 ACCEPT     0    --  br0    br0     0.0.0.0/0            0.0.0.0/0           
    0     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID 
 6195  335K TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 tcpmss match 1453:65535 TCPMSS set 1452 
2058K 1365M ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
 7157  374K wanin      0    --  vlan1  *       0.0.0.0/0            0.0.0.0/0           
 5172  497K wanout     0    --  *      vlan1   0.0.0.0/0            0.0.0.0/0           
 5172  497K ACCEPT     0    --  br0    *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 25337 packets, 3344K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain wanin (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.2         tcp dpt:56732 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            192.168.1.2         udp dpt:56732 
 4968  274K ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.2         tcp dpts:54896:54897 
 2183 99708 ACCEPT     udp  --  *      *       0.0.0.0/0            192.168.1.2         udp dpts:54896:54897 
    6   360 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.2         tcp dpt:64561 

Chain wanout (1 references)
 pkts bytes target     prot opt in     out     source               destination         

Nem tudom ez így megfelelő-e vagy bele kell vetnem magam a NAT rejtelmeibe? :)

A logolás még egy érdekes téma, elvileg minden lánc végén ott a szabály, de pl. amikor az imap szerverrel nem tudott kommunikálni a logok üresek voltak, a torrent szintén elszállt timeout-al, pedig a bejövő forgalomra használt és a trackerek elérését biztosító portok is engedélyezve voltak a FORWARD láncon, logokban szintén semmi, hogy miért nem tudott csatlakozni.
Nem értem, netán valamely más tábla szabályain akadna fenn?
De melyikén?

Végül bemásolom a jelenlegi scriptet:

## otthoni tuzfal

## eloszor torlunk minden szabalyt.
iptables -F
iptables -X
iptables -Z
## alap policy
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

## INPUT szabalyok.
iptables -A INPUT -i lo -j ACCEPT ## loopback -en engedelyezzuk a forgalmat.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## engedelyezzuk befele, ami tolunk szarmazik.
iptables -A INPUT -p tcp --syn -m state --state NEW -m limit --limit 2/min -j ACCEPT # uj kapcsolat
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #nem syn-nel kezdodik, kulonben esetleg tamadas
iptables -A INPUT -p tcp --dport ssh -m limit --limit 3/m -j LOG --log-uid --log-prefix "SSH_ACCEPT: "
iptables -A INPUT -p tcp -s 192.168.1.2 --syn --dport ssh -j ACCEPT
iptables -A INPUT -p tcp -s 145.236.252.34 --syn --dport ssh -j ACCEPT
iptables -A INPUT -p tcp -s 212.51.124.92 --syn --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --syn --dport ssh -m --set -j ACCEPT
iptables -A INPUT -p tcp --syn --dport ssh -m recent --update --seconds 60 --hitcount 3 -j DROP
iptables -A INPUT -p tcp --dport 45761 -m state --state NEW -j ACCEPT ## router tavoli eleres
iptables -A INPUT -p tcp --dport 56732 -m state --state NEW -j ACCEPT ## VNC
iptables -A INPUT -p icmp -j ACCEPT ## kintrol "ping" mehet.
iptables -A INPUT -p udp --dport 68 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.2 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.1.2 -j ACCEPT
iptables -A INPUT -j LOG --log-uid --log-prefix "INPUT_DROP: "
iptables -A INPUT -j DROP

## OUTPUT szabalyok.
iptables -A OUTPUT -o lo -j ACCEPT ## loopback -en engedelyezzuk a forgalmat.
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## jovahagyott kapcsolatok engedelyezese.
iptables -A OUTPUT -p tcp -d 192.168.1.2 --syn --dport ssh -m limit --limit 3/m -j ACCEPT
iptables -A OUTPUT -s 192.68.1.1 -d 213.46.246.53:213.46.246.54 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 192.68.1.1 -d 213.46.246.53:213.46.246.54 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -j LOG --log-uid --log-prefix "OUTPUT_DROP: "
iptables -A OUTPUT -j DROP

# FORWARD lanc
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT ## jovahagyott kapcsolatok engedelyezese.
iptables -A FORWARD -p udp --dport 53 -j ACCEPT ## a DNS -re szukseg van.
iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --dport 123 -j ACCEPT ## ntp mehet
iptables -A FORWARD -p tcp --dport 123 -m state --state NEW -j ACCEPT

iptables -A FORWARD -p tcp --dport 80 -m state --state NEW -j ACCEPT ## http mehet.
iptables -A FORWARD -p tcp --dport 443 -m state --state NEW -j ACCEPT ## https mehet
iptables -A FORWARD -p tcp --dport 22 -m state --state NEW -j ACCEPT ## ssh mehet.
iptables -A FORWARD -p tcp --dport 21 -m state --state NEW -j ACCEPT ## ftp control mehet
iptables -A FORWARD -p tcp --dport 20 -m state --state NEW -j ACCEPT ## ftp data mehet
iptables -A FORWARD -p tcp -d kiszolgalo -m state --state NEW -j ACCEPT ## ftp
iptables -A FORWARD -p tcp --dport 43 -m state --state NEW -j ACCEPT ## whois
iptables -A FORWARD -p tcp -d mail.chello.hu --dport 25 -m state --state NEW -j ACCEPT ## Levelezes SMTP
iptables -A FORWARD -p tcp --dport 993 -m state --state NEW -j ACCEPT ## Levelezes IMAP4s

iptables -A FORWARD -p tcp --dport 1863 -m state --state NEW -j ACCEPT ## msn
iptables -A FORWARD -p tcp --dport 6667 -m state --state NEW -j ACCEPT ## irc
iptables -A FORWARD -p tcp --dport 54896:54897 -m state --state NEW -j ACCEPT ## torrent
iptables -A FORWARD -p udp --dport 54896:54897 -m state --state NEW -j ACCEPT ## torrent
iptables -A FORWARD -p tcp --dport 2710 -m state --state NEW -j ACCEPT ## torrent tracker
iptables -A FORWARD -p udp --dport 2710 -m state --state NEW -j ACCEPT ## torrent tracker
iptables -A FORWARD -j LOG --log-uid --log-prefix "FORWARD_DROP: "
iptables -A FORWARD -j DROP

"Igen, ezek a szabályok a routerre kerülnének. INPUT láncból ftp-t, torrentet kivettem, de a VNC-nek maradnia kell, különben távolról hogyan csatlakozom a géphez?"
Pont ugyanemiatt vehető ki a VNC is, mivel nem a routert szeretnéd elérni VNC-vel, hanem a routeren keresztül a gépet, ez pedig az FTP-hez hasonlóan ugyanúgy nem INPUT, hanem FORWARD forgalom. A -p tcp -s 192.168.1.2 --syn --dport ssh -j ACCEPT felesleges, ha utána -p tcp -s 192.168.1.2 -j ACCEPT következik.

Az interfészek ennek alapján:
  eth0: internal interface between CPU and the 6-port switch
  eth1: Wireless LAN
  vlan0: wired LAN ports
  vlan1: wired WAN port
  br0: internal LAN bridge (configurable) for wired LAN and Wireless LAN

Tehát a LAN-ra a WLAN-nal együtt a br0, a WAN-ra a vlan1 használható.

Példa és javaslat arra, amit a szabályok irányának egyértelműsítéséről írtam. Hogy az INPUT-ban az ICMP-t beengedő szabály a mellette lévő megjegyzésnek megfeleljen, vagy ha például nincs a gépen webszerver, és ha van.

  iptables -A INPUT -p icmp -j ACCEPT ## kintrol "ping" mehet.

  iptables -A FORWARD -p tcp --dport 80 -m state --state NEW -j ACCEPT ## http mehet.

helyett lehet:

  iptables -A INPUT -i vlan1 -p icmp -j ACCEPT ## kintrol "ping" mehet.

  iptables -A FORWARD -i br0 -p tcp --dport 80 -m state --state NEW -j ACCEPT ## http mehet belulrol kifele.

  iptables -A FORWARD -i vlan1 -p tcp -d 192.168.1.2 --dport 80 -m state --state NEW -j ACCEPT ## http johet kivulrol befele.

Az OUTPUT-ban nem látom értelmét a routerből a gép felé kezdeményezett SSH limitálásának.

A FORWARD láncon keresztülmenő forgalomról el kell dönteni, hogy mit szolgáljon. Most mindkét irányba kezdeményezett kapcsolatot enged, de csak felsorolt protokollokon és potokon. Biztos ez a cél? Nem az, hogy bentről kifelé minden mehessen, de kintről befelé csak néhány szükséges? Ha ezt szeretnéd, akkor megoldás lehet ez:

  iptables -A FORWARD -i br0 -m state --state NEW -j ACCEPT

Ezután pluszban csak a kívülről befelé kezdeményezetteket kell engedélyezni, illetve előtte - ha vannak -, a kimenő kivételeket tiltani. Így ha nem fut a gépeden kívülről is használható HTTP, HTTPS, web, FTP, IMAP, NTP, IRC, whois szerver, ezeket a szabályokat ki lehet venni. Ha viszont az a cél, hogy a megadottakon kívül ne lehessen más módon belülről sem elérni külső (pl. POP3) szervert, akkor jó a mostani szabály is. Egy másik kérdés, hogy az eredeti tűzfalszabály-struktúrát ki akarod-e iktatni. Ha igen, akkor mehet minden odavaló a FORWARD láncba, ha nem, akkor érdemes a wanin és wanout láncok alá betenni.

A fenti iptables -t nat -vnL alapján a bentről jövő forgalmat source NAT-olja a WAN címre, így kifelé menni fog. A géped publikus szolgáltatásait, portjait be kell NAT-olni a 192.168.1.2-re, ehhez a PREROUTING lánc DNAT-ja használható (pl.:

iptables -i vlan1 -t nat -A PREROUTING -p ... --destination-port ... -j DNAT --to-destination 192.168.1.2

).

Köszi, egy-két dolgogra én is rájöttem közben, de párat ismét sikerült megvilágítanod. :)
Azonban egyenlőre megdölni látszik a routeres tűzfel projekt, emiatt.
Ha sikerülne megoldani, akkor beleírnék még egy-két változást a javaslataid alapján, azonban ha nem jön össze akkor csak az INPUT lánc lesz korlátozva routeren, a többi pedig a gépen.

Amúgy FORWARD-nál szerintem jobb ha bentről is van szűrve, pl. hogy spamelés ne mehessen program által létrehozott smtp szerverrel vagy spyware progi ne tudjon adatokat küldeni akármelyik porton.

"Egy másik kérdés, hogy az eredeti tűzfalszabály-struktúrát ki akarod-e iktatni"
Nem igazán tudom milyen struktúrára gondolsz...
Annyiról lenne szó, hogy a FORWARD lánc alatt szedjem szét mi megy a wanra ki és mi jön befelé és ezeknek hozzak létre 2 külön láncot?

sziasztok! én http://cvk.hu/tuzfal/ipfw ezt használom tűzfal scriptnek, de a torrentet sehogy nem tudom működésre bírni. tegnap óta szenvedek a tűzfal beállítással, a google a p2p-iptables keresésre olyat dob ki, hogy hogy kell letiltani...na az nekem megy alapból. :D rtorrentet használok, beállítottam a konfig fájlba, hogy csak a 6890-6895 terjedő portokat hasznája. tudna valaki valami segítséget adni? köszi

Sziasztok!

Egy gatewayen menne a lenti tűzfal script, ami működik, de ilyenekkel szorja a kern.log-t:


Apr 22 17:01:17 IBM-Server FORWARD_DROP: IN=eth2 OUT=eth3 SRC=192.168.1.74 DST=84.1.109.74 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=63895 DF PROTO=TCP SPT=3212 DPT=28554 WINDOW=65535 RES=0x00 SYN URGP=0
Apr 22 17:01:17 IBM-Server FORWARD_DROP: IN=eth2 OUT=eth3 SRC=192.168.1.74 DST=85.186.2.86 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=63896 DF PROTO=TCP SPT=3214 DPT=16488 WINDOW=65535 RES=0x00 SYN URGP=0
Apr 22 17:01:18 IBM-Server FORWARD_DROP: IN=eth2 OUT=eth3 SRC=192.168.1.74 DST=145.236.126.69 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=64200 DF PROTO=TCP SPT=3211 DPT=10211 WINDOW=65535 RES=0x00 SYN URGP=0
Apr 22 17:01:22 IBM-Server FORWARD_DROP: IN=eth2 OUT=eth3 SRC=192.168.1.74 DST=85.66.101.127 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=65054 DF PROTO=TCP SPT=3219 DPT=62675 WINDOW=65535 RES=0x00 SYN URGP=0
Apr 22 17:01:22 IBM-Server FORWARD_DROP: IN=eth2 OUT=eth3 SRC=192.168.1.74 DST=86.101.150.158 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=65055 DF PROTO=TCP SPT=3220 DPT=42091 WINDOW=65535 RES=0x00 SYN URGP=0
Apr 22 17:01:25 IBM-Server FORWARD_DROP: IN=eth2 OUT=eth3 SRC=192.168.1.74 DST=86.101.150.158 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=65534 DF PROTO=TCP SPT=3220 DPT=42091 WINDOW=65535 RES=0x00 SYN URGP=0
Apr 22 17:01:41 IBM-Server FORWARD_DROP: IN=eth2 OUT=eth3 SRC=192.168.1.74 DST=84.3.131.116 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=3380 DF PROTO=TCP SPT=3225 DPT=15312 WINDOW=65535 RES=0x00 SYN URGP=0

Mitől lehet?
Továbbá érdekelne, hogy működése mellett, biz.tech szempontból is jó lesz-e ez a script? (gw-re még nem raktam tűzfalat)
A legfontosabb: jelenleg koliban teszteljük, később adsl-en lesz. Elég csak a KULSO_ETH=ppp0-ra átirni?


#!/bin/sh

echo "Starting firewall"
BELSO_ETH=eth2
KULSO_ETH=eth3

iptables -Z
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo "1" > /proc/sys/net/ipv4/ip_forward                # IP forwarding bekapcsolása
echo "1" >/proc/sys/net/ipv4/tcp_syncookies     # DOS vedelem
echo "1" >/proc/sys/net/ipv4/conf/all/rp_filter # Source Address Verification

# INPUT lanc
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A INPUT -i $BELSO_ETH -j ACCEPT
 iptables -A INPUT -i lo -j ACCEPT

 iptables -A INPUT -i $KULSO_ETH -p tcp --dport 22 -j ACCEPT
 iptables -A INPUT -i $KULSO_ETH -p tcp --dport 22 -m limit --limit 3/m -j LOG --log-prefix "SSH_ACCEPT: "
 iptables -A INPUT -i $KULSO_ETH -p tcp -m multiport --dport 21,80 -j ACCEPT 

 iptables -A INPUT -i $BELSO_ETH -p tcp --syn -s 192.168.1.0/8 -dport 139 -j ACCEPT

 iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/m --limit-burst 1 -j ACCEPT
 iptables -A INPUT -j LOG --log-prefix "INPUT_DROP: "


# OUTPUT lanc
 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT # dns
 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT # dns

# iptables -A OUTPUT -o $BELSO_ETH -j ACCEPT
# iptables -A OUTPUT -o $KULSO_ETH -j ACCEPT
 iptables -A OUTPUT -p tcp -m multiport --dport 20,21,22,80,1863,6667,1021 -j ACCEPT
 iptables -A OUTPUT -j LOG --log-prefix "OUTPUT_DROP: "


# FORWARD lanc
 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
 iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 3/m --limit-burst 1 -j ACCEPT

 iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/8 --destination-port 80 -j REDIRECT --to-ports 3128 # squid

iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu         # packet fregmentálódásra

 iptables -A FORWARD -j LOG --log-prefix "FORWARD_DROP: "

# NAT
 iptables -t nat -A POSTROUTING -o $KULSO_ETH -s 192.168.1.0/8 -j MASQUERADE

"tűzfal script, ami működik"
Biztos hogy úgy működik ahogy szeretnéd, vagy csak a webet próbáltad ki a transzparens proxyn keresztül?

A log azért keletkezik, illetve ezek a logolt csomagok azért kerülnek eldobásra, mert a FORWARD láncon nincsenek kiengedve a belső hálózat felől induló kapcsolatok (NEW).

Az OUTPUT lánc szabályai teljesen feleslegesek illetve a logolás félrevezető az ACCEPT default policy mellett.

Az MSS kezelése kétszer szerepel.
Mivel az ACCEPT terminál, az SSH csomagok elfogadása után már nem lesz logolás. A logolást is érdemesebb lenne csak a SYN-re korlátozni, mert így hamar teleírja a logot.

Ha a belső hálózat felől nincs védve a tűzfal, a bentről kifelé való pingelést szerintem nem kellene korlátozni, ellenben néhány más ICMP-típust illene átengedni.

Ha már a tűzfalon Samba is megy, akkor érdemes kinyitni a TCP/445-öt is a TCP/139 mellett. De ennek sincs értelme, mivel előzőleg belülről már át lett engedve.

"Elég csak a KULSO_ETH=ppp0-ra átirni?"
Igen. Vagy ha nem biztos, hogy "ppp0" lesz, akkor "ppp+"-ra.

"Biztos hogy úgy működik ahogy szeretnéd, vagy csak a webet próbáltad ki a transzparens proxyn keresztül?"

web, ftp, msn, ssh megy kifele, azért is furcsáltam.

"A log azért keletkezik, illetve ezek a logolt csomagok azért kerülnek eldobásra, mert a FORWARD láncon nincsenek kiengedve a belső hálózat felől induló kapcsolatok (NEW)."

ilyesmi lenne a megoldás?
iptables -A FORWARD -i $BELSO_ETH -m state --state NEW -j ACCEPT
szerk.: úgy néz ki jó lett, mert ezzel a sorral már nincs forward_drop üzenet.

"Az MSS kezelése kétszer szerepel."
Igaz, köszönöm:)

SSH-t, Sambat, icmp-t köszi, javitom őket.

PPP-vel ezek szerint nem lesz gond, remek!

Itt az enyém, egy klaszikus LAMP szervert fog védeni.
A szerver egy VPS eddig nem volt rajta semmi publikus.
Ezután egy .hu domain lesz rajta.
Kis magyarázat.
A black_list láncot egy cron szkript frissiti egy fájlból.
A wan_net_ssh és wan_net_private láncokat port kopogtató démon intézi.
Nyilván még messze nincs kész.
Arra lennék kiváncsi hogy az alap felépités logikailag helyes e.
Köszönöm.

#!/bin/bash
wan_interface=eth0
#lan_interface=eth1
wan_address=192.168.3.173
#lan_address=192.168.3.173
#ip_cim=192.168.3.173

iptables -F
iptables -X
iptables -Z

iptables -P FORWARD DROP
iptables -P INPUT DROP
#A fekete lista szabalyai
#A fekete lista vegen minden el nem dobott csomag visszater az wan_net lancba
iptables -N black_list
iptables -A black_list -j RETURN

#Letrehozzut a wan_net lancot
iptables -N wan_net
#Letrehozzut a wan_net_icmp lancot
iptables -N wan_net_icmp

iptables -A wan_net_icmp -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A wan_net_icmp -p icmp --icmp-type echo-request -j LOG --log-prefix "FW: PingofDeath attack (?) "
iptables -A wan_net_icmp -p icmp --icmp-type echo-request -j REJECT

#Letrehozzut a wan_net_ssh lancot
iptables -N wan_net_ssh
iptables -A wan_net_ssh -s 192.168.3.57 -j ACCEPT
iptables -A wan_net_ssh -j REJECT --reject-with icmp-host-unreachable

#Letrehozzut a wan_net_private lancot
iptables -N wan_net_private
iptables -A wan_net_private -j REJECT --reject-with icmp-host-unreachable

#�tengedj�k a lo interfacet
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#Atadjuk a wan_net tartalmat elemzesre a black_list lancnak
iptables -A wan_net -j black_list

#Megvizsgaljuk hogy tortent e cim hamisitast
iptables -A wan_net -s 127.0.0.1 -j DROP
#iptables -A wan_net -s $lan_address -j DROP

#Az icmp forgalmat levalasztjuk wan_net lancrol
iptables -A wan_net -p icmp -j wan_net_icmp

iptables -A wan_net -p tcp --syn -m limit --limit 8/s -j ACCEPT
iptables -A wan_net -p tcp --syn -j DROP

## DoS elleni vedelem bekapcsolva ...
iptables -A wan_net -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#ssh forgalmat atiranyitjuk a wan_net_ssh lancba
iptables -A wan_net -p tcp --dport 22 -j wan_net_ssh

#Adadjuk a maganhasznalati forgalmat a wan_net_private lancnak
iptables -A wan_net -p tcp --dport 24340 -j wan_net_private
iptables -A wan_net -p tcp --dport 232431 -j wan_net_private
iptables -A wan_net -p tcp --dport 14310 -j wan_net_private
iptables -A wan_net -p tcp --dport 14345 -j wan_net_private
iptables -A wan_net -p tcp --dport 13213 -j wan_net_private

iptables -A wan_net -p tcp --dport 80 -j ACCEPT
iptables -A wan_net -p tcp --dport 25 -j ACCEPT
iptables -A wan_net -j DROP

# felol jon es nem a mi ipcimunk a celja
iptables -A INPUT -i $wan_interface -d ! $wan_address -j DROP

#A wan interface forgamat a wan_net lancba kuldjuk
iptables -A INPUT -i $wan_interface -j wan_net

Az a syn limit biztos jó helyen van ott? Ezzel minden, nem a 192.168.3.57-ről jövő új TCP-kapcsolatot limitálsz. Elképzelhető, hogy a tervezett terhelésre elég a 8 új kapcsolat másodpercenként, de ezt külső körülmények is befolyásolják. Az OUTPUT láncra felesleges szabályt írni, mivel a default policy ACCEPT. Az ICMP-ből miért csak az echo request van beengedve? Mi történik az erről a gépről kezdeményezett kapcsolatok visszajövő forgalmával? Javasolnám a state modul használatát.

Helló mindenkinek!

SZükségem lenne egy kis segítségre iptables témában:

A belső hálón lévő Tomcat felületét szeretném elérhetővé tenni kívülről.
Az idevágó részlet a scriptből:

iptables -F
iptables -t nat -F

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -A INPUT -i eth0 -p tcp -d xxx.xxx.13.50 --dport 22 -j ACCEPT
...
iptables -A INPUT -i eth0 -p tcp -m state --state NEW,ESTABLISHED -d xxx.xxx.13.50 --dport 18080 -j LOG --log-prefix "INPUT " --log-level 0
iptables -A INPUT -i eth0 -p tcp -m state --state NEW,ESTABLISHED -d xxx.xxx.13.50 --dport 18080 -j ACCEPT

iptables -A FORWARD -i eth1 -p tcp -d xxx.xxx.64.223 --dport 18080 -j LOG --log-prefix "FORWARD " --log-level 0
iptables -A FORWARD -i eth1 -p tcp -d xxx.xxx.64.223 --dport 18080 -j ACCEPT

iptables -t nat -A PREROUTING -i eth0 -p tcp -d xxx.xxx.13.50 --dport 18080 -j LOG --log-prefix "PREROUTING " --log-level 0
iptables -t nat -A PREROUTING -i eth0 -p tcp -d xxx.xxx.13.50 --dport 18080 -j DNAT --to-destination xxx.xxx.64.223:18080

iptables -t nat -A POSTROUTING -o eth1 -s xxx.xxx.64.223 -d 0/0 -j LOG --log-prefix "POSTROUTING " --log-level 0
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.64.223 -d 0/0 -j SNAT --to-source 213.163.13.50
...
echo 1 > /proc/sys/net/ipv4/ip_forward

De ez így nem igazán mükszik, és logban sem látszik semmi. Aki tud, kérem segítsen....

Ha jól gondolom, az eth0 a külső interfész. Ekkor a FORWARD láncban --sport kellene. Ez a forgalom nem érinti az INPUT láncot, tehát felesleges, viszont a FORWARD-on át kellene engedni mindkét irányba. Bár jelenleg az ACCEPT default policy miatt úgyis átmegy. A POSTROUTING szintén nem kell.

Sajnos így sem működik, a Firefox ezt válaszolja:
Firefox can't establish a connection to the server at xxx.xxx.13.50:18080.

A TELJES SCRIPT így néz ki, (nem én írtam):

export LAN=eth1
export WAN=eth0
iptables -F
iptables -t nat -F

iptables -A INPUT -i eth0 -p tcp -d xxx.xxx.13.50 --dport 8080 -j DROP
iptables -A FORWARD -i ${LAN} -s xxx.xxx.64.0/24 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d xxx.xxx.64.0/24 -j ACCEPT

...
#TOMCAT

iptables -A FORWARD -i eth1 -p tcp -s xxx.xxx.13.50 --sport 18080 -j LOG --log-prefix "FORWARD " --log-level 0
iptables -A FORWARD -i eth1 -p tcp -s xxx.xxx.13.50 --sport 18080 -j ACCEPT

iptables -t nat -A PREROUTING -i eth0 -p tcp -d xxx.xxx.13.50 --dport 18080 -j LOG --log-prefix "PREROUTING " --log-level 0
iptables -t nat -A PREROUTING -i eth0 -p tcp -d xxx.xxx.13.50 --dport 18080 -j DNAT --to-destination xxx.xxx.64.223:18080

echo 1 > /proc/sys/net/ipv4/ip_forward

Jelen állás szerint a "#TOMCAT" alatti FORWARD szabályok feleslegesek a felette lévők miatt, azok ugyanis átengednek mindent. A DNAT jónak tűnik.

Biztosan hallgat a Tomcat a TCP/18080-on? Belső hálózatról működik? A default route a tűzfal eth1-ének az IP-jére mutat?

A 213.163.13.50 a tűzfal külső IP-je, vagy egy külön szabad IP? Fel van véve az eth0-ra aliasként, vagy van rá külön route?

Logolni szerintem a bejövő csomagokat érdemesebb, de most ez nem befolyásolja a működést.

FORWARD szabály kivéve. Belső hálón hallgat a TOMCAT. A default route el volt állítva, beálítottam, mire a szerver nem fogad el semmiféle kapcsolódást háló felől. Egy külsős cég állította be, nem a mi felügyeletünk alá tartozik. 213. a tűzfal külső IP-je.

Fel van véve az eth0-ra aliasként, vagy van rá külön route? <--ezt itt nem igazán értem, hogy mit akarsz, kérlek pontosítsd

"Fel van véve az eth0-ra aliasként, vagy van rá külön route? <--ezt itt nem igazán értem, hogy mit akarsz, kérlek pontosítsd"
A kívülről érkező csomagnak el kell jutnia a tűzfal külső interfészére, ez pedig akkor fog megtörténni, ha a tűzfal válaszol az adott IP-re vonatkozó ARP-kérésre, vagy rá van route-olva a tűzfal külső IP-jére. Ha például a tűzfal külső IP-jének maszkja /29, akkor:
1.) a tűzfal külső IP-jére menő forgalmat DNAT-olod
2.) a tűzfal külső IP-je és a DNAT-os IP különbözik:
2.a) a tűzfal külső interfészére felveszed a DNAT-os IP-t aliasként
2.b) a tűzfal előtt lévő eszközről (pl. szolgáltatói vagy saját router) a DNAT-os IP-t a tűzfal külső IP-jére route-olod

"Belső hálón hallgat a TOMCAT."
Tehát a tűzfalról (illetve a belső hálózat valamely tagjáról) rá lehet telnetelni a 18080-as portra?

"A default route el volt állítva, beálítottam, mire a szerver nem fogad el semmiféle kapcsolódást háló felől."
A belső hálóról sem? Ott nem befolyásolhat semmi a default route.

Javasolnék egy tcpdumpot a külső és a belső interfészen egyaránt. Ez megmutatja, hogy kintről odaérkezik-e a csomag, átmegy-e a tűzfalon, illetve a válasszal mi történik:

  tcpdump -i eth0 -nvvv -s 1500 port 18080 or icmp
  tcpdump -i eth1 -nvvv -s 1500 port 18080 or icmp

Továbbá nézzük meg a számlálóértékeket is:

  iptables -nvL FORWARD
  iptables -t nat -nvL PREROUTING

subscribe

---
Ami a windowsban szarrágás, az linuxban hegesztés.
Ha megszeretted a windowst, tanuld meg használni!
A linux igenis felhasználó-, és NEM idiótabarát.
A linuxot mi irányítjuk, a windows minket irányít.

Milyen paranccsal lehet egy adott portra érkező kérést egy másik ip-re átirányítani? Mindkét IP külső IP, semmilyen belső hálózat nincs.

Tehát a célom az, hogy ha valaki az egyik Interneten levő szerverem 21-es portjára akar csatlakozni, akkor a szerver a kérést passzolja át egy másik Interneten közvetlenül levő szerver szintén 21-es portjára úgy, hogy a felhasználó ebből semmit se lásson.

Tehát a cél, hogy a tényleges szerver IP-je rejtve legyen.

Köszi

Szerintem DNAT, massal ilyesmit nem nagyon lehet megcsinalni. Viszont a komplett forgalom rajtad is at fog menni.

Viszont, ha a kerdes tenyleg FTP, akkor nagyon megszivtad, azt nem lehet atiranyitani egyszeruen. Nem tudod, hogy milyen portra fogja a kovetkezo kerest kuldeni. Jobban jarsz, ha kozlod a felhasznaloval az uj IP cimet. Ez nem lerazas, tenyleg nagy szopas FTP-t atiranyitani.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

"Szerintem DNAT, massal ilyesmit nem nagyon lehet megcsinalni. Viszont a komplett forgalom rajtad is at fog menni."
Nem elég a DNAT, kelleni fog az SNAT is mellette.

"ha a kerdes tenyleg FTP, akkor nagyon megszivtad, azt nem lehet atiranyitani egyszeruen. Nem tudod, hogy milyen portra fogja a kovetkezo kerest kuldeni."
Ezért van a NAT helper modul.

"Ezért van a NAT helper modul."
Ami nagyon jo, ha tuzfalad van, azonban itt nem errol van szo. Rendes SNAT/DNAT-hoz mindenkepp meg kell hataroznod _explicite_ azokat a portokat, amiket atiranyitasz. Ez FTP eseteben _lehetetlen_, es itt nem segit semmilyen helper modul.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

"ha tuzfalad van, azonban itt nem errol van szo"
Ezt nem igazán értem. Ez a topik a Linux-haladó kategóriában az "iptables script- Átnéznétek?" címet viseli. A man iptables szerint pedig: "iptables -- administration tool for IPv4 packet filtering and NAT".

Holcam azt kérdezte, hogyan tudja megoldani. Most meg azon vitatkozunk, hogy a Linux netfilter "rendes SNAT/DNAT" vagy nem? A kérdés az, hogy működik-e. A válasz pedig az, hogy igen, helyesen működik az DNAT-SNAT alapú átirányítás FTP protokollra is.

"Rendes SNAT/DNAT-hoz mindenkepp meg kell hataroznod _explicite_ azokat a portokat, amiket atiranyitasz."
A "rendes" jelzőt nem tudom megfelelően értelmezni. Nem kell explicite. Az implicit módon való követést teszi lehetővé a helper (NAT és connection tracking). Attól, hogy te nem tekinted a helpereket a netfilter - és ilyen módon a tűzfal és a NAT - részének, még a netfilter részei.

Mennyire beszélünk el egymás mellett? :)

Kb nagyon.

Egy portforwardhoz (mert ez a kerdes valojaban) a kovetkezot kell tenni iptables alatt (egybol iptables-save formatumot hasznalok, mert az rovidebb):


*filter
-A INPUT -m tcp -p tcp --dport 21 -j ACCEPT
-A FORWARD -m tcp -p tcp --dport 21 -j ACCEPT
*nat
-A PREROUTING -m tcp -p tcp --dport 21 -j DNAT --to-destination 192.168.2.5

Ezert mondtam, hogy explicite meg kell adni a portokat. Meg ha az INPUT es FORWARD mezoket ki is hagyom, a DNAT-hoz mindenkepp meg kell adni explicite a portot amit atiranyitasz (nyilvan Holcam-nak nem cel az, hogy a teljes fele iranyulo mindenfele forgalmat atiranyitsa a masik szerver fele, emiatt mindenkepp meg kell mondani a tuzfalnak, hogy mit es merre iranyitson).
Itt az a kerdes, hogy a 21-es port atiranyitasa eleg-e ahhoz, hogy a NAT helper modul beinduljon, es a rakovetkezo, random portra erkezo csomagot is atdobja a masik gep fele. Mert szerintem nem.

Ja, es ha netfilter alatt a -j REDIRECT -re gondolsz, megsugom, hogy az csak egy gepen beluli portatiranyitas mellett mukodik.

Egyebkent szerintem fuss neki megeccer a kommentemnek, par dolgot sikerult benezned. Senki nem vitatkozik azon, hogy a Linux netfilter mennyire rendes, valamint senki nem kerdojelezte meg, hogy az iptables mire valo.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

"Itt az a kerdes, hogy a 21-es port atiranyitasa eleg-e ahhoz, hogy a NAT helper modul beinduljon, es a rakovetkezo, random portra erkezo csomagot is atdobja a masik gep fele. Mert szerintem nem."
De elég, éppen ez az egész értelme. Méghozá így:


iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 21 -j DNAT --to-destination 2.2.2.2
iptables -t nat -A POSTROUTING -p tcp -d 2.2.2.2 --dport 21 -j SNAT --to-source 1.1.1.1

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 2.2.2.2 --dport 21 -j ACCEPT

, ahol 1.1.1.1 a tűzfal IP-je, 2.2.2.2 az FTP szerver IP-je. (Moduláris kernel estén az nf_nat_ftp modul betöltése szükséges.)

"Ja, es ha netfilter alatt a -j REDIRECT -re gondolsz, megsugom, hogy az csak egy gepen beluli portatiranyitas mellett mukodik."
Nem arra gondoltam, lásd fent.

"Senki nem vitatkozik azon, hogy a Linux netfilter mennyire rendes"
Ezért mondtam az előbb, hogy nem tudtam hova tenni a rendes jelzőt. A lényeg az belőle, hogy te azt mondtad, mindenképpen kell porttartomány megadása az natoláshoz, én pedig azt mondtam, hogy az a helperek feladata normális esetben. Helper használata esetén csak a control connection portját kell a tűzfalszabályba beírni explicite.

Köszi, ez a változat teljesen működik. Hogyan néz ki amúgy a fenti beállítás, ha más a cél és a forrás port (80-as portról 8080-ra menne)?

A kérdés amúgy nem feltétlen az FTP-ről szól. Pontosabban a 80-as port kell mindenképp (webszerver), és az FTP is. Az egyáltalán nem gond, és ez is a cél, hogy a tűzfalon (1. szerveren) átmenjen minden forgalom.

Köszönöm az eddigi segítségeteket. Ha simán át tudom irányítani a fenti parancsokkal a 21-es és 80-as portot, már jó vagyok, erre pedig teljesen jó a válasz. Esetleg még a másik IP másik portjára irányítás?

Köszönöm a kedvességeteket.

iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to-destination 2.2.2.2:8080
iptables -t nat -A POSTROUTING -p tcp -d 2.2.2.2 --dport 8080 -j SNAT --to-source 1.1.1.1

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 2.2.2.2 --dport 8080 -j ACCEPT

Ha a mindkét porthoz megcsinálod egymás után, az ESTABLESHED,RELATED sorból csak egy kell majd. És még egy megjegyzés ehhez. Igaz, hogy a kliens számára az IP-t tekintve nem a valódi szerver fog látszani, de a szerver számára is a portforwardot végző gép IP-je lesz a kliens, azaz ez fog a logjába kerülni stb.

Világ életemben mind az INPUT, mind az OUTPUT láncon be- illetve ki voltak engedve a RELATED,ESTABLISHED állapotú kapcsolatok (TCP protokoll esetén).

Most találtam egy másfajta megközelítést: http://www.sns.ias.edu/~jns/wp/2006/01/12/iptables-connection-tracking-…

iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT

(A cikknek magyar vonatkozása is van, Kadlecsik József személyében, a második oldalon.)

----------------------------
színes ingyen domain domain


$IPT -t filter -P INPUT DROP
$IPT -t filter -P OUTPUT DROP
$IPT -t filter -P FORWARD DROP

.
.
.

$IPT -t filter -I INPUT -i lo -j ACCEPT
$IPT -t filter -I OUTPUT -o lo -j ACCEPT
.
.
.
$TFA INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
.
.
.
$TFA OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$TFA OUTPUT -p UDP -d 8.8.8.8 --dport 53 -j ACCEPT
$TFA OUTPUT -p UDP -d 8.8.4.4 --dport 53 -j ACCEPT
$TFA OUTPUT -p TCP -m multiport --dports 80,443 -m state --state NEW -j ACCEPT

--------------------------------------------------------------------------
színes

Ezek mellé


$IPT -t filter -I INPUT -i lo -j ACCEPT
$IPT -t filter -I OUTPUT -o lo -j ACCEPT

van értelme/kellenek a következő szabályok


$IPT -t filter -I INPUT -o lo -j ACCEPT
$IPT -t filter -I OUTPUT -i lo -j ACCEPT

???

(Az INPUT és az OUTPUT policy is egyaránt DROP.)

--------------------------------------------------------------------------
színes

Köszi.

Hiába, sok fals infó van a neten, ezért mindig

i) gondolkodni
ii) kérdezni

kell.

A fenti kérdésemet a következő oldal indukálta: http://www.debuntu.org/iptables-how-to-share-your-internet-connection-p2
(Lap alja felé, sárga háttér, piros háromszög, benne felkiáltójel...)

--------------------------------------------------------------------------
színes