[Redhat 7.2] iptables is dit een goed script?

Pagina: 1
Acties:

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
Ok met een hoop lezen/klooien en de voorbeelden op deze LinuxGuruz en Hakkefest heb ik een aardig iptables script gemaakt. :)

Deze firewall met transparant proxy server is voor een bedrijf maar voorlopig test ik hem nog even thuis met een adsl modem.

Opzich werkt het goed maar toch vraag ik mij af of ik het wel goed doe. staat er met het volgende script niet teveel open ?

De bedoeling is: een redelijke security maar het belangrijkste is de toegang vanaf de pc's in het netwerk beperken tot tot www, email e.d. Maar de pc's mogen wel van alle services op de linux server gebruik maken.

In de meeste scripts wordt iptables -input LAN drop gebruikt en men zet daarna de juiste portjes open, dit heb ik dus niet gedaan ipv hiervan heb ik met iptables -A forward opgegeven wat vanaf het lan naar internet mag.

Mijn vraag aan de experts :), is de aanpak in dit script goed of zit ik het toch totaal verkeerd te doen ??

Mijn met hoop zweet en tranen :) gemaakte script:

echo OK run flush script en set firewall/NAT op default rules.
/etc/ah/fire/flush

echo OK load variable settings
TCP_SERVICES="80" # Porten die vanaf internet toegankelijk zijn.
ipt=iptables

echo OK Load modules
modprobe ip_nat_ftp #nodig om te kunnen ftp'n
modprobe ip_conntrack_ftp #nodig weet niet waarvoor

echo OK enable nat
#PREROUTING behandel inkomende packets
#POSTROUTING behandel uitgaande packets
ipt -t nat -F PREROUTING
ipt -t nat -F POSTROUTING

echo OK Kernel guard against SYN flooding
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

echo OK firewall INPUT rules. Regels voor inkomende packets
ipt -P INPUT DROP # standaard policy DROP all packets
ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

ipt -A INPUT -i ppp0 -m state --state NEW -p tcp -m multiport \
-dport $TCP_SERVICES -j ACCEPT

#geen beperking op de loopback en intern netwerk.
ipt -A INPUT -i eth0 -m state --state NEW -j ACCEPT
ipt -A INPUT -i lo -m state --state NEW -j ACCEPT

echo OK log dropped packets
ipt -A INPUT -j LOG --log-prefix "FW_INPUT"


echo OK firewall FORWARD rules Wat mag vanaf het LAN naar internet.
ipt -P FORWARD DROP #Standaard policy is altijd drop all packets

echo OK allow traffic van eth0 naar ppp0
ipt -A FORWARD -i eth0 -o ppp0 -j ACCEPT

echo OK forward www op 443 secure www
#port 80 gaat naar een transparante proxy
ipt -A FORWARD -i ppp0 -p tcp --sport 443 -m state --state \ ESTABLISHED,RELATED -j ACCEPT


echo OK allow ftp
ipt -A FORWARD -i ppp0 -p tcp --sport 20 -m state --state
ESTABLISHED,RELATED -j ACCEPT

ipt -A FORWARD -i ppp0 -p tcp --sport 21 -m state --state
ESTABLISHED,RELATED -j ACCEPT

echo OK allow telnet
ipt -A FORWARD -i ppp0 -p tcp --sport 23 -m state --state
ESTABLISHED,RELATED -j ACCEPT


echo OK allow smtp
iptables -A FORWARD -i ppp0 -p tcp --sport 25 -m state --state ESTABLISHED,RELATED -j ACCEPT


echo OK allow icmp pingen
iptables -A FORWARD -i ppp0 -p icmp -m state --state
ESTABLISHED,RELATED -j ACCEPT



#log dropped packets
ipt -A FORWARD -j LOG --log-prefix "FW_FORWARD"


###############################################
echo OK firewall OUTPUT rules #uitgaande packets
ipt -P OUTPUT ACCEPT #deze mag wel standaard op ACCEPT staan
###################################################


echo OK NAT rules
#interface masquerade en speciale behandeling voor bepaalde packets.
ipt -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

echo OK Enable transparant proxy
#stuur al het www verkeer naar onze proxy
ipt -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT
--to-port 3128

#websites die niet op portje 80 zitten ook in
#de proxy proppen vraag me af of dit wel nut heeft.
ipt -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j
REDIRECT --to-port 3128

###################################################
#diverse zaken..
echo OK Start forwarding #voor het geval deze nog uit stond.
echo 1 > /proc/sys/net/ipv4/ip_forward
exit 0

  • JF_
  • Registratie: Juni 2001
  • Laatst online: 13-08 17:11

JF_

Zo zie je niets over iptables, en nu ineens twee op een avond :-)
Er zijn toch een paar dingetjes waar ik al direct vraag/-uitroeptekens bij wil zetten.
- ik weet niet precies 't verschil tussen de twee modules nat_ftp en conntrack_ftp, volgens mij was de 1 voor 'passive ftp' (client maakt zowel control als data-link) en de ander voor 'active' (client legt control, server probeert de data-link te leggen).
- je INPUT-rules zijn wat onduidelijk, maar kloppen geloof ik wel. Ik zou ze zelf niet uitgesplitst hebben naar state, maar botweg alles op eth0 en lo toestaan, evenals alles naar dport $SERVICES op ppp0, en established/related op ppp0. 't Is wel hetzelfde (toch?), maar 't leest makkelijker.
- Je forward-regels kan ik niet echt volgen... Je zet van alles in je forward-chain, ftp, telnet, smtp, icmp, maar volgens mij gaat dat niet zonder meer werken. Outgoing FTP wel, daar had je die twee modules al voor (dus geen rules nodig). Maar voor telnet en smtp zul je toch in je nat-prerouting table moeten aangeven naar welk IP ze doorgelust moeten worden (interne IP's zijn van buitenaf immers niet direct adresseerbaar). ICMP idem dito.

edit: 'k Zit te slapen... Je geeft zo natuurlijk toestemming voor *uitgaande* telnet, smtp enzo... Zo kunnen ze wel verbinding leggen naar waar ze maar willen, maar krijgen geen reactie terug behalve als ze connecten naar telnet of smtp.
Volgens mij heeft icmp trouwens geen state-established en state-related, maar daar kan ik me in vergissen.



- Ook niet onbelangrijk: volgens mij moet je forwarding inschakelen (1>ip_forward)*voordat* je de forward-ruleset kunt opstellen... In ieder geval ging dat bij mij (RH7.2) niet goed toen ik 't andersom probeerde.

OVerigens, hoort dit niet onder networking in plaats van OS's?

Verwijderd

Voordat ik verder wat zinnigs robeer te zeggen, welke interface is voor internet, welke voor je LAN?
ppp0 of eth0?

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
Ik denk dat dit toch wel echt linux stuff is vandaar dat ik het in non windows heb geplaatst.

Maar voor de duidelijkheid die forward rules zijn er om bijvoorbeeld www/telnet toe te staan vanaf binnen naar internet.. En deze zijn niet om vanaf internet bepaalde services in het interne netwerk te gebruiken.

Dit script werkt dus wel maar of het de juiste manier is weet ik niet :)

ppp0 is internet (ppp is in principe altijd internet) en eth0 is het lan en aan eth2 hangt het adsl modem.

Ik zit nu ff met die input rules ik heb het idee dat alles op de ppp0 (internet) nu gewoon open staat..

  • JF_
  • Registratie: Juni 2001
  • Laatst online: 13-08 17:11

JF_

't Is een twijfelgevalletje... 't Is inderdaad een Linux-vraag, maar wel over networking. O well, boeit niet.

Waarom doe je trouwens zo ingewikkeld met die uitgaande telnet/smtp? Ik denk dat eea wel op een duidelijker (en nettere) manier is op te lossen.
Btw: ik weet niet hoe performance-critical die firewall is, maar over het algemeen zet je de rules die het meest gebruikt worden zo vroeg mogelijk... Scheelt weer een paar checks per packet. Zeker bij complexe en/of zwaar belaste firewalls kan dat flink schelen.

FORWARD-policy DROP is uiteraard een hele sterke om mee te beginnen :-)

Vervolgens alle incoming related toestaan, zodat packets die over een bestaande connectie binnenkomen netjes doorwandelen:
iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Ook een leuke: als je de '-o eth0' niet opgeeft kan volgens mij iedereen van je router gebruik maken om z'n eigen IP te verbergen... Kleine moeite om dat gelijk even dicht te zetten.

FTP wordt afgevangen door de twee modules, die hebben geen extra modules nodig. Outgoing web, telnet, smtp(), etc:
iptables -A FORWARD -i eth0 -o ppp0 --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 --dport 23 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 --dport 25 -j ACCEPT
Multiport-oplossing kan uiteraard ook :-)

ICMP:
iptables -A FORWARD -i eth0 -o ppp0 -p icmp -j ACCEPT

In de input-chain zou je nog wat opruiming kunnen houden door iets minder kwistig met state-checks te strooien, of ze wat beter te combineren, maar dat is detail-werk.

Alleen dat stukje met securewww op (source?-)port 443 zit er nu nog niet in... Wat moet dat eigenlijk doen?

Het script zoals jij het hebt staan heeft ppp0 volgens mij goed dichtgespijkerd... In de input-chain worden alleen de poorten $TCP_SERVICES toegestaan, en de responses op connecties die van binnen uit zijn gemaakt. Je kunt 'm van buitenaf nieteens pingen :-)

Draait de transp. proxy trouwens op dezelfde machine als de firewall? Anders moet je 'ipt -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128' ook nog even vervangen door iets als -j DNAT --to <ip:port>

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
Bedankt voor de tips en ik heb ze gelijk gebruikt, begin het een beetje door te krijgen :)

Er zullen max +/- 25 users zijn dus ik verwacht geen performance problemen bovendien draait op deze server een transparante proxy die meer url's blokt dan doorlaat.
Dus echt veel surfen kunnen de users toch niet :)

Ik denk dat dit script nu aardig compleet is. Ik heb ook wat beperkingen gemaakt tbv pop3/smtp want ik kwam er dus achter dat iemand nog vrolijk verder kon klooien met chat proggies e.d. die wandelen rustig op een pop3 portje naar buiten en dat kan nu dus ook niet meer :)

Die modules zijn nodig voor ftp maar volgens mij deze regel ook.
ipt -A FORWARD -i eth0 -o ppp0 --dport21 -j ACCEPT
zonder deze regel doet ftp het echt niet.

Het stukje over ftp moet ik dus nog ff uitzoeken maar daar kom ik nu ook wel uit hoop ik :)

Dit is mijn nieuwe scriptje:

#!/bin/bash
echo OK run flush script en set firewall/NAT op default waardes.
/etc/ah/fire/flush

echo OK load variable settings
TCP_SERVICES="80" # Porten die vanaf internet toegankelijk zijn.

#Ip nr's of netwerk van gebruikers met extra rechten.
BOSS1="192.168.0.1" #ik mag alles :)

#pop3 servers die gebruikt mogen worden.
POPBOX1="pop.xs4all.nl"
POPBOX2="pop.cablewanadoo.nl"
POPBOX3="pop.wanadoo.nl"
POPBOX4="pop.vuurwerk.nl"
POPBOX5="pop.planet.nl"
POPBOX6="pop.hetnet.nl"

#SMTP servers die gebruikt mogen worden
SMTP_1="smtp.xs4all.nl"
SMTP_2="smtp.cablewanadoo.nl"

#TELNET servers die gebruikt mogen worden
TEL1="xs4all.nl" #xs4all.nl is ff om te testen.

#SSH servers die gebruikt mogen worden
SSH1="xs4all.nl" #voor het geval ssh ooit nodig is..

echo OK Load modules
modprobe ip_nat_ftp #nodig om te kunnen ftp'n
modprobe ip_conntrack_ftp #nodig weet niet waarvoor

echo OK flush rules
ipt -F INPUT
ipt -F FORWARD
ipt -F OUTPUT

echo OK enable nat
ipt -t nat -F PREROUTING#Behandel incoming packets
ipt -t nat -F POSTROUTING#Behandel outgoing packets

echo OK Kernel guard against SYN flooding
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

echo OK firewall INPUT rules. Regels voor inkomende packets
ipt -P INPUT DROP # standaard policy DROP all packets
ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ipt -A INPUT -i ppp0 -m state --state NEW -p tcp -m multiport
--dport $TCP_SERVICES -j ACCEPT

echo OK allow incomping op eth0 en loopback.
ipt -A INPUT -i eth0 -m state --state NEW -j ACCEPT
ipt -A INPUT -i lo -m state --state NEW -j ACCEPT

echo Log dropped packets
ipt -A INPUT -j LOG --log-prefix "FW_INPUT"

echo OK NAT rules
#interface masquerade en speciale behandeling voor bepaalde packets.
ipt -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

echo OK Enable transparant proxy #port 80 naar de proxy
ipt -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

#####################################################

echo OK firewall FORWARD rules - Wat mag vanaf het LAN naar internet.
ipt -P FORWARD DROP #Standaard policy is altijd drop all packets

#echo OK allow traffic van eth0 naar ppp0
#Deze regel komt dus te vervallen
#ipt -A FORWARD -i eth0 -o ppp0 -j ACCEPT

echo OK allow traffic vanaf ppp0 naar eth0 voor bestaande connecties
ipt -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

echo OK allow secure https op portje 443 =https
#secure www op port 443 voor beveiligde website met https
#of deze regel echt noodzakelijk is weet ik nog niet.
ipt -A FORWARD -i eth0 -o ppp0 -p tcp --dport https -j ACCEPT

#echo OK allow pop3 - email zonder beperking
#het pop3 portje kan ook misbruikt worden voor andere programma's
#ipt -A FORWARD -i eth0 -o ppp0 -p tcp --dport pop3 -j ACCEPT

echo OK allow pop3 alleen met bekende pop3 servers
#op deze manier kan het pop3 portje niet misbruikt worden.
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $POPBOX1 --dport pop3 -j ACCEPT
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $POPBOX2 --dport pop3 -j ACCEPT
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $POPBOX3 --dport pop3 -j ACCEPT
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $POPBOX4 --dport pop3 -j ACCEPT
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $POPBOX5 --dport pop3 -j ACCEPT
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $POPBOX6 --dport pop3 -j ACCEPT

#echo OK allow smtp zonder beperking
#het smtp portje kan ook misbruikt worden voor andere doel einden.
#ipt -A FORWARD -i eth0 -o ppp0 -p tcp --dport smtp -j ACCEPT

echo OK allow smtp alleen naar bekende smtp servers
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $SMTP_1 --dport smtp -j ACCEPT


echo OK allow telnet alleen naar bekende server
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $TEL1 --dport telnet -j ACCEPT


echo OK allow ssh alleen naar bekende server
ipt -A FORWARD -i eth0 -o ppp0 -p tcp -d $SSH1 --dport ssh -j ACCEPT


echo OK allow icmp pingen
ipt -A FORWARD -i eth0 -o ppp0 -p icmp -j ACCEPT

##en deze host mag gewoon ales :)
echo OK allow this host onbeperkte toegang
ipt -A FORWARD -i eth0 -s $BOSS1 -o ppp0 -j ACCEPT
#
log dropped packets
ipt -A FORWARD -j LOG --log-prefix "FW_FORWARD"
#########################################################################
echo OK firewall OUTPUT rules #uitgaande packets
ipt -P OUTPUT ACCEPT #deze mag wel standaard op ACCEPT staan
#########################################################################

  • JF_
  • Registratie: Juni 2001
  • Laatst online: 13-08 17:11

JF_

Op zaterdag 05 januari 2002 17:17 schreef Thijs B het volgende:
Die modules zijn nodig voor ftp maar volgens mij deze regel ook.
ipt -A FORWARD -i eth0 -o ppp0 --dport21 -j ACCEPT
zonder deze regel doet ftp het echt niet.
Je hebt inderdaad gelijk... Bij mij werkt 't wel zonder die regel, omdat mijn FORWARD-policy op ALLOW staat. Jij hebt policy=DROP, dus je moet inderdaad aangeven wat er *wel* mag. 't Was al laat, zullen we maar zeggen :-)
Pagina: 1