PDA

Bekijk Volledige Versie : Iptabels



marcelenting
02/07/04, 13:00
Hoi, heb een server draaien onder Debian en wil deze gaan gebruiken als web en ftp server. Nu is mijn vraag hoe kan ik deze goed beveiliging is IPTABELS genoeg en hoe kan ik deze juis configureren. Heb al diverse How to's door gelezen maar kom er niet echt uit. Al vast bedankt voor de reacties Marcel

Digitux
02/07/04, 13:30
Je moet dus deze rules maken:
poort 80 all accept <-- www
poort 21 all accept <-- ftp
poort 22 all accept <-- ssh en deze wil je eigenlijk alleen accept op de IP's waar je vandaan managed.
deny all <-- gooit alles dicht behalve voor bovenstaande.

Dus pak je howto en ga kijken hoe een iptables rule is opgebouwt en probeer eerst thuis wat te experimenteren.

Bovenstaande is een hele erge versimpeling maar zou wel toepasbaar zijn ;)

wv-
02/07/04, 13:38
Bij het gebruik van TCP rules gebruik je best --syn. Simpel uitgelegd is dit de eerste connectie van de client naar de server. Zonder een SYN kan je niet connecten naar een poort.

Voor ftp wil je ook poort 20 en de passive ports toe laten.

Een klein voorbeeld van enkele rules:

iptables -A INPUT -p tcp -d destination-ip -i device --syn --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -d destination-ip -i device --syn --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -d destination-ip -i device --syn --dport 49152:65534 -j ACCEPT

Alle SYN's droppen die niet matchen met een rule hierboven:
iptables -A INPUT -p tcp -i device --syn -j DROP

destination ip is je extern ip, device is je extern netwerk device, bvb eth0.

// Edit:

Als je dit remote aan het doen bent zet je het best in een scriptje en test je het zo:

sh firewall.sh && sleep 30 && iptables -F

Indien je niet meer kan connecteren naar je server hoef je alleen maar 30 seconden te wachten vooraleer alle rules geflushed worden.

Groeten

marcelenting
02/07/04, 14:23
Bedankt, dit genoemde is in eerste instantie wel voldoende of zijn er nog meer dingen om op te letten.

Groet, Marcel

Beyonder
02/07/04, 14:30
Er zijn vele zaken om te beveiligen, zoals Kernel compile met GRsecurity, /tmp suexec etc etc etc..


Er zijn zoveel dingen waar je op moet letten. Ik heb helaas geen url voor je waar je alles stap voor stap even kunt regelen, maar surf eens rond op Internet.

Het kost ongeveer 16 uur werk voor een zeer ervaren systeembeheerder om een vanilla OS als BSD/Linux geheel te beveiligen.

serverbilly
02/07/04, 14:33
Wat is een vanilla OS ?

wv-
02/07/04, 15:04
Vanilla OS: een vers installed OS zonder patches, security maatregelen, ...

Een goede start om te beginnen is bijvoorbeeld de doc "Get Acquainted with Linux Secutiry and Optimization System". Het is wel oud met veel useless stuff dat je waarschijnlijk al weet, maar er staan wel leuke dingen tussen.

Keuningen
02/07/04, 15:19
Origineel geplaatst door Digitux
Je moet dus deze rules maken:
poort 80 all accept <-- www
poort 21 all accept <-- ftp
poort 22 all accept <-- ssh en deze wil je eigenlijk alleen accept op de IP's waar je vandaan managed.
deny all <-- gooit alles dicht behalve voor bovenstaande.

Dus pak je howto en ga kijken hoe een iptables rule is opgebouwt en probeer eerst thuis wat te experimenteren.

Bovenstaande is een hele erge versimpeling maar zou wel toepasbaar zijn ;)

Moet je niet eerst DENY en daarna ALLOW?

wv-
02/07/04, 18:22
Origineel geplaatst door Keuningen


Moet je niet eerst DENY en daarna ALLOW?

Neen, want dan zal een pakket eerst de DENY rule matchen en dus gedropt worden.

//edit: typo

pdeelman
03/07/04, 01:15
Hmmm, ik zag nog niet de fantastische toevoeging van statefull designed iptables firewall. Dit is het uitontwikkelde broertje van --syn alleen dan veel beter.

voorbeeldje onder van een firewalletje die ik een keer gemaakt heb.

in pricipe maak je 1 filter aan die al het verkeer opvangt nadat het door de input filters is geweest. Hierin laat je zowieso al het verkeer toe dat al goedgekeurd is. en je dropt de rest. De filter myfilter is handig als je meerdere interfaces heb.

verder heb ik nog wat loopjes erin gezet aan het einde. Voor de rest zou het commentaar van de echo's voldoende moeten zijn.




#!/bin/sh

IPT="/sbin/iptables"

ALWAYSOPEN="http smtp"
FTPSSH="1.2.3.4 5.6.7.8"
FTP="9.0.1.2"

echo "flushing tables"
$IPT -F
$IPT -X
$IPT -Z
$IPT -X -t mangle
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT

echo "setting proc settings"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians

echo "setting default drop on input and forward"
$IPT -P INPUT DROP
$IPT -P FORWARD DROP

echo "creating myfilter chain"
$IPT -N myfilter
$IPT -A myfilter -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A myfilter -p tcp -j REJECT --reject-with tcp-reset
$IPT -A myfilter -j REJECT --reject-with icmp-port-unreachable

echo "creating rules to allow all on local interface"
$IPT -A INPUT -i lo -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i lo -m state --state INVALID -j LOG --log-prefix "INVALID PACKET on int LO:" --log-level warning

echo "creating rules with ALWAYSOPEN loop"
for x in ${ALWAYSOPEN}; do
$IPT -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
done

echo "creating rules with FTPSSH loop"
for y in ${FTPSSH}; do
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s ${y} -j ACCEPT
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW -s ${y} -j ACCEPT
done

echo "creating rules with FTP loop"
for z in ${FTP}; do
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW -s ${z} -j ACCEPT
done

echo "redirecting all other traffic to myfilter for further handling"
$IPT -A INPUT -j myfilter

Zaven
03/07/04, 01:52
Ziet er zeer mooi uit maar werkt dit op elke distributie?

wv-
03/07/04, 02:12
Iptables komt met de linux kernel mee sinds 2.4, dus ja .

Op freebsd/openbsd/... heb je andere alternatieven zoals ipfw/ipf/...

electric
03/07/04, 12:04
@Zaven

Iptables werkt, zoals wv- zegt, op elke linux versie met kernel 2.4.x en hoger. Lagere kernels werken nog met ipchains.

ik ben zelf bezig met een 'klein' firewall script te schrijven. als ie af is ( en getest ) laat ik 't wel weten.

pdeelman
04/07/04, 01:58
Origineel geplaatst door Zaven
Ziet er zeer mooi uit maar werkt dit op elke distributie?

Mits deze distributie iptables heeft in de kernel met de juiste opties. Anders moet je de modules laden.

Ik geloof dat redhat alles van iptables in modules heeft en dat je die eerst moet laden. Gewoon het script uitvoeren je komt er vanzelf achter welke modules geladen moeten worden.

Zou het eigenlijk niet weten welke distro het nog meer zo doet (ik spreek hier wel met ervaring van redhat van een jaar gelee), ik compileer altijd me eigen kernels met juiste opties :) (ik hou niet van modules)

ps. het is voor iptables heel makkelijk om eigen modules te ontwikkelen en er zijn de meest gekke modules maar te vinden (aan te spreken met -m) zoals het random droppen van pakketten op basis van percentages. Ik zou zeggen kijk eens rond op de site van iptables.