Discussion:
iptables vraagje
(te oud om op te antwoorden)
Paul van der Vlis
2009-01-14 12:27:25 UTC
Permalink
Hallo,

Ik wil in een firewall-script de naam van een host gebruiken, en dus
niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
zegt "onbekende host/netwerk" of zoiets, vreemd.

Hoe zou ik toch een hostname kunnen gebruiken?

Andere benadering is evt. de hostname te resolven, zoiets:
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `host cc12345.groni1.gr.home.nl` -j ACCEPT
Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
dan dat?

Met vriendelijke groet,
Paul van der Vlis.
--
http://www.vandervlis.nl/
Richard Rasker
2009-01-14 12:40:15 UTC
Permalink
Post by Paul van der Vlis
Hallo,
Ik wil in een firewall-script de naam van een host gebruiken, en dus
niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
zegt "onbekende host/netwerk" of zoiets, vreemd.
Hoe zou ik toch een hostname kunnen gebruiken?
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `host cc12345.groni1.gr.home.nl` -j ACCEPT
Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
dan dat?
Eh, zoiets als dit, wellicht?

`host $hostname | cut -d ' ' -f 4`

(ervan uitgaande dat legitieme hosts altijd resulteren in de uitvoer
[hostname] has address [IP])

Richard Rasker
--
http://www.linetec.nl
Paul van der Vlis
2009-01-14 13:00:19 UTC
Permalink
Post by Richard Rasker
Post by Paul van der Vlis
Hallo,
Ik wil in een firewall-script de naam van een host gebruiken, en dus
niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
zegt "onbekende host/netwerk" of zoiets, vreemd.
Hoe zou ik toch een hostname kunnen gebruiken?
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `host cc12345.groni1.gr.home.nl` -j ACCEPT
Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
dan dat?
Eh, zoiets als dit, wellicht?
`host $hostname | cut -d ' ' -f 4`
(ervan uitgaande dat legitieme hosts altijd resulteren in de uitvoer
[hostname] has address [IP])
Bedankt, dit werkt!

Maar kan dit niet mooier?

Met vriendelijke groet,
Paul van der Vlis.
--
http://www.vandervlis.nl/
Dick Streefland
2009-01-14 12:58:29 UTC
Permalink
Paul van der Vlis <***@vandervlis.nl> wrote:
| Ik wil in een firewall-script de naam van een host gebruiken, en dus
| niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
| zegt "onbekende host/netwerk" of zoiets, vreemd.
|
| Hoe zou ik toch een hostname kunnen gebruiken?
|
| Andere benadering is evt. de hostname te resolven, zoiets:
| iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
| -s `host cc12345.groni1.gr.home.nl` -j ACCEPT
| Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
| dan dat?

Gebruik "dig +short".

Maar kun je wel DNS requests doen op het moment dat je de firewall
installeerd? Normaal gesproken wil je de firewall installeren voordat
je het netwerk opstart.
--
Dick Streefland //// Altium BV
***@altium.nl (@ @) http://www.altium.com
--------------------------------oOO--(_)--OOo---------------------------
Paul van der Vlis
2009-01-14 13:40:07 UTC
Permalink
Post by Dick Streefland
| Ik wil in een firewall-script de naam van een host gebruiken, en dus
| niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
| zegt "onbekende host/netwerk" of zoiets, vreemd.
|
| Hoe zou ik toch een hostname kunnen gebruiken?
|
| iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
| -s `host cc12345.groni1.gr.home.nl` -j ACCEPT
| Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
| dan dat?
Gebruik "dig +short".
Bedankt, dat is mooier.
Post by Dick Streefland
Maar kun je wel DNS requests doen op het moment dat je de firewall
installeerd? Normaal gesproken wil je de firewall installeren voordat
je het netwerk opstart.
Mmmm. Goed punt, zal ik een oplossing voor bedenken:

JAAP=`dig +short cc12345.groni1.gr.home.nl`
if test $? = 0
then echo $JAAP > /root/ipjaap
else JAAP=`cat /root/ipjaap`
fi


Met vriendelijke groet,
Paul van der Vlis.
--
http://www.vandervlis.nl/
Koos van den Hout
2009-01-14 13:14:36 UTC
Permalink
Post by Paul van der Vlis
Ik wil in een firewall-script de naam van een host gebruiken, en dus
niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
zegt "onbekende host/netwerk" of zoiets, vreemd.
Beveiliging tegen een dependency op dns. Waar ik 2 goeie redenen voor kan
bedenken:

- je wilt je firewall script draaien voor je netwerk up is, zodat je
netwerk beveiligd op komt. dan heb je nog geen dns.

- dns is niet vrij van potentiele aanvallen.
Post by Paul van der Vlis
Hoe zou ik toch een hostname kunnen gebruiken?
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `host cc12345.groni1.gr.home.nl` -j ACCEPT
Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
dan dat?
Ik zou iets doen als

iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `getent hosts cc12345.groni1.gr.home.nl | awk ' { print $1 } '` \
-j ACCEPT

getent hosts $naam is redelijk eenvoudig om te zetten naar alleen IP.

Maar ik zie nog wel een leuk issue: getent hosts heeft een voorkeur voor
ipv6:

$ getent hosts koos.idefix.net
2001:888:1011::694 koos.idefix.net

Koos
--
Koos van den Hout Homepage: http://idefix.net/~koos/
PGP keyid DSS/1024 0xF0D7C263 or RSA/1024 0xCA845CB5
Webprojects: Camp Wireless http://www.camp-wireless.org/
The Virtual Bookcase http://www.virtualbookcase.com/
Paul van der Vlis
2009-01-14 13:45:10 UTC
Permalink
Post by Koos van den Hout
Post by Paul van der Vlis
Ik wil in een firewall-script de naam van een host gebruiken, en dus
niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
zegt "onbekende host/netwerk" of zoiets, vreemd.
Beveiliging tegen een dependency op dns. Waar ik 2 goeie redenen voor kan
- je wilt je firewall script draaien voor je netwerk up is, zodat je
netwerk beveiligd op komt. dan heb je nog geen dns.
Daar had Dick het ook al over, zie mijn reaktie op zijn bericht.
Post by Koos van den Hout
- dns is niet vrij van potentiele aanvallen.
Klopt, maar dat lijkt me in dit geval vrij lastig.
Verder lijkt me dit toch de beste keuze uit 2 kwaden.
Post by Koos van den Hout
Post by Paul van der Vlis
Hoe zou ik toch een hostname kunnen gebruiken?
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `host cc12345.groni1.gr.home.nl` -j ACCEPT
Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
dan dat?
Ik zou iets doen als
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `getent hosts cc12345.groni1.gr.home.nl | awk ' { print $1 } '` \
-j ACCEPT
getent hosts $naam is redelijk eenvoudig om te zetten naar alleen IP.
Maar ik zie nog wel een leuk issue: getent hosts heeft een voorkeur voor
$ getent hosts koos.idefix.net
2001:888:1011::694 koos.idefix.net
"dig +short" lijkt me nog net wat gemakkelijker.

Bedankt!

Met vriendelijke groet,
Paul van der Vlis.
--
http://www.vandervlis.nl/
Stef
2009-01-14 13:52:30 UTC
Permalink
In nl.comp.os.linux.netwerken,
Post by Paul van der Vlis
"dig +short" lijkt me nog net wat gemakkelijker.
Let je nog wel even op met dig en host:

[***@c7-d ~]$ dig +short www.google.com
www.l.google.com.
64.233.183.147
64.233.183.104
64.233.183.103
64.233.183.99
[***@c7-d ~]$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 64.233.183.104
www.l.google.com has address 64.233.183.103
www.l.google.com has address 64.233.183.99
www.l.google.com has address 64.233.183.147

Maar dat zal voor de door jou gevraagde adsl aansluiting(?) wel niet
het geval zijn. :-)
--
Stef (remove caps, dashes and .invalid from e-mail address to reply by mail)

"The trouble with doing something right the first time is that nobody
appreciates how difficult it was."
-- Walt West
Ximinez
2009-01-14 13:58:37 UTC
Permalink
Post by Stef
In nl.comp.os.linux.netwerken,
Post by Paul van der Vlis
"dig +short" lijkt me nog net wat gemakkelijker.
www.l.google.com.
64.233.183.147
64.233.183.104
64.233.183.103
64.233.183.99
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 64.233.183.104
www.l.google.com has address 64.233.183.103
www.l.google.com has address 64.233.183.99
www.l.google.com has address 64.233.183.147
Maar dat zal voor de door jou gevraagde adsl aansluiting(?) wel niet
het geval zijn. :-)
Mmm...

# dnsip www.google.com
74.125.79.147 74.125.79.104 74.125.79.99 74.125.79.103

X.
Ximinez
2009-01-14 13:54:26 UTC
Permalink
Post by Paul van der Vlis
Post by Koos van den Hout
Post by Paul van der Vlis
Ik wil in een firewall-script de naam van een host gebruiken, en dus
niet de IP. Als ik een naam gebruik gaat dit echter niet goed, iptables
zegt "onbekende host/netwerk" of zoiets, vreemd.
Beveiliging tegen een dependency op dns. Waar ik 2 goeie redenen voor kan
- je wilt je firewall script draaien voor je netwerk up is, zodat je
netwerk beveiligd op komt. dan heb je nog geen dns.
Daar had Dick het ook al over, zie mijn reaktie op zijn bericht.
Post by Koos van den Hout
- dns is niet vrij van potentiele aanvallen.
En bind al zeker niet.
Post by Paul van der Vlis
Klopt, maar dat lijkt me in dit geval vrij lastig.
Verder lijkt me dit toch de beste keuze uit 2 kwaden.
Je kunt natuurlijk starten met een deny ALL firewall, dan je netwerk
laden en vervolgens je dynamische firewall starten.
Post by Paul van der Vlis
Post by Koos van den Hout
Post by Paul van der Vlis
Hoe zou ik toch een hostname kunnen gebruiken?
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `host cc12345.groni1.gr.home.nl` -j ACCEPT
Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet meer
dan dat?
Ik zou iets doen als
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `getent hosts cc12345.groni1.gr.home.nl | awk ' { print $1 } '` \
-j ACCEPT
getent hosts $naam is redelijk eenvoudig om te zetten naar alleen IP.
Maar ik zie nog wel een leuk issue: getent hosts heeft een voorkeur voor
$ getent hosts koos.idefix.net
2001:888:1011::694 koos.idefix.net
"dig +short" lijkt me nog net wat gemakkelijker.
DJB's "dnsip" is nog korter. ;)

Het is overigens uberhaupt verstandig om DJB's dnscache te installeren.
Het maakt je onafhankelijk van caches van derden, is sneller en je
krijgt er het paranoide beveiligingsniveau dat alle DJB software
kenmerkt gratis bij.

http://cr.yp.to/djbdns.html

De DNS exploit die een paar maanden geleden zo'n ophef maakte had Dan
Bernstein jaren geleden al preventief opgelost.

Ik installeer het standaard op al m'n servers.

X.
richard lucassen
2009-01-14 14:42:40 UTC
Permalink
On Wed, 14 Jan 2009 13:27:25 +0100
Post by Paul van der Vlis
Ik wil in een firewall-script de naam van een host gebruiken, en dus
niet de IP. Als ik een naam gebruik gaat dit echter niet goed,
iptables zegt "onbekende host/netwerk" of zoiets, vreemd.
Hoe zou ik toch een hostname kunnen gebruiken?
iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s `host cc12345.groni1.gr.home.nl` -j ACCEPT
Maar hoe zorg ik ervoor dat "host" alleen maar het IP geeft en niet
meer dan dat?
Zet het in een bestand als /etc/firewall/ip.vars en verander het daarin:

IP_GRON=1.2.3.4

In het fw-script:

source /etc/firewall/ip.vars

iptables -A INPUT -i $INTDEV -p TCP --dport 22 \
-s ${IP_GRON} -j ACCEPT

Dan weet je zeker dat je een juist ip hebt als het ding start zonder
dns. Kun je dat bestand vullen op het moment dat de zaak draait en je
alles onder controle hebt.
--
___________________________________________________________________
It is better to remain silent and be thought a fool, than to speak
aloud and remove all doubt.

+------------------------------------------------------------------+
| Richard Lucassen, Utrecht |
| Public key and email address: |
| http://www.lucassen.org/mail-pubkey.html |
+------------------------------------------------------------------+
richard lucassen
2009-01-14 14:45:17 UTC
Permalink
On Wed, 14 Jan 2009 13:27:25 +0100
Paul van der Vlis <***@vandervlis.nl> wrote:

O ja, nog dit:

#!/usr/bin/perl

if ($ARGV[0] =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
&& $1 < 256
&& $2 < 256
&& $3 < 256
&& $4 < 256) { exit(0) }

exit(1);

Dit controleert of een ip-adres een juist ipv4 adres is. Voeg alleen een
check toe op 0.0.0.0 want een:

iptables -A INPUT -s ${IP_GRON} -p tcp --dport 22 -j ACCEPT

is zo lullig ;-)
--
___________________________________________________________________
It is better to remain silent and be thought a fool, than to speak
aloud and remove all doubt.

+------------------------------------------------------------------+
| Richard Lucassen, Utrecht |
| Public key and email address: |
| http://www.lucassen.org/mail-pubkey.html |
+------------------------------------------------------------------+
Loading...