[IPTables] Port Accept werkt niet

Pagina: 1
Acties:

  • AK47
  • Registratie: Juli 2001
  • Laatst online: 04-05-2024
Hoi. Ik probeer een hele simpele Linux router op te zetten waarbij alle poorten geblokeerd moeten zijn behalve een paar.

Op de machine is eth0 de verbinding naar het internet, en is ingesteld in de 10.0.0.x range (subnet 255.255.0.0), en moet zijn internet verbinding bij 10.0.0.138 (SpeedTouch modem) weghalen. eth1 is de NIC voor het LAN, en zit in de 172.16.x.x range (subnet 255.255.252.0).

Nu heb ik het volgende zeer simpele iptables script opgesteld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#! /bin/sh

echo -n Setting IPTables Rules ...

# Flush everything
iptables -F; iptables -t nat -F; iptables -t mangle -F

# Forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Accept internal connections
iptables -A INPUT -i eth1 -j ACCEPT

# Open up ports
iptables -A INPUT -i eth0 -p icmp -j ACCEPT

iptables -A INPUT -i eth0 -p udp --destination-port 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 80 -j ACCEPT

# Drop everything
iptables -P INPUT DROP

# Start forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward


Dat *zou* genoeg moeten zijn om DNS requests mee te doen, te surfen & te pingen. Alleen lijkt het niet te werken. Pingen naar de gateway, internet ip, lan ip wil gewoon aangezien ICMP helemaal open staat, maar DNS resolven (voor bijv. pingen naar www.tweakers.net) wil niet. Voor de rest lijkt HTTP ook niet te werken.

Als ik echter het volgende in mijn script zet:

code:
1
2
iptables -A INPUT -i eth0 -p tcp -j ACCEPT
iptables -A INPUT -i eth0 -p udp -j ACCEPT


Werkt alles wel (dus het complete tcp & udp protocol vrijgeven).

Dus wat doe ik verkeerd bij het open zetten van poorten?

  • Zwerver
  • Registratie: Februari 2001
  • Niet online
AK47 schreef op zondag 16 oktober 2005 @ 13:32:
Hoi. Ik probeer een hele simpele Linux router op te zetten waarbij alle poorten geblokeerd moeten zijn behalve een paar.

Op de machine is eth0 de verbinding naar het internet, en is ingesteld in de 10.0.0.x range (subnet 255.255.0.0), en moet zijn internet verbinding bij 10.0.0.138 (SpeedTouch modem) weghalen. eth1 is de NIC voor het LAN, en zit in de 172.16.x.x range (subnet 255.255.252.0).

Nu heb ik het volgende zeer simpele iptables script opgesteld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
# Accept internal connections
iptables -A INPUT -i eth1 -j ACCEPT

# Open up ports
iptables -A INPUT -i eth0 -p icmp -j ACCEPT

iptables -A INPUT -i eth0 -p udp --destination-port 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 80 -j ACCEPT

# Drop everything
iptables -P INPUT DROP
Zet die drop policy voor INPUT eens bovenaan? Dus
# Open up ports
iptables -A INPUT -i eth0 -j DROP


Daarbij zet je nu expliciet alle porten en interfaces op drop op de laatste regel van mijn post :) iptables lees top-down, dus wat denk je wat er gebeurd nu?

[ Voor 10% gewijzigd door Zwerver op 16-10-2005 13:37 ]

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


  • _JGC_
  • Registratie: Juli 2000
  • Nu online
Op zich is je hele script OK, maar je mist deze regel:

code:
1
iptables -A INPUT -i eth0 -m state --state ESTABLISHED, RELATED -j ACCEPT

  • Zwerver
  • Registratie: Februari 2001
  • Niet online
Kuch, goed lezen is i.d.d. een vak :P _JGC_ heeft in deze gelijk, skip mijn opmerking maar :)

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


  • AK47
  • Registratie: Juli 2001
  • Laatst online: 04-05-2024
Hmm. Als ik die regel toevoeg lijkt het script gewoon alles door te laten. De 'iptables -P INPUT DROP' zou ervoor moeten zorgen dat alleen de aangegeven poorten zouden moeten werken (dus HTTP, DNS), maar zo te zien doet bijv. FTP het ook...

  • _JGC_
  • Registratie: Juli 2000
  • Nu online
JIj wilt uitgaande connecties filteren? Dan heb je niets te zoeken in de INPUT table voor je externe interface, maar moet je gaan filteren op de OUTPUT table van je externe interface of de INPUT van je interne.

  • AK47
  • Registratie: Juli 2001
  • Laatst online: 04-05-2024
Aan de hand daarvan heb ik mijn script aangepast, maar lijkt nog steeds niet te werken :/

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
! /bin/sh

echo -n Setting IPTables Rules ...

# Stop Forwarding
echo 0 > /proc/sys/net/ipv4/ip_forward

# Flush everything
iptables -F; iptables -t nat -F; iptables -t mangle -F

# Set default policy
iptables -A OUTPUT -o eth0 -j DROP

# Make it stateful
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Make it internally accessible
iptables -A INPUT -i eth1 -j ACCEPT

# Open ports
iptables -A OUTPUT -o eth0 -p icmp -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --destination-port 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --destination-port 53 -j ACCEPT

# Start forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

echo done.


Als ik nu vanaf de router het volgende doe, gebeurd het volgende:

code:
1
2
3
hestia:~# ping 10.0.0.138
PING 10.0.0.138 (10.0.0.138) 56(84) bytes of data.
ping: sendmsg: Operation not permitted


Iemand een idee hoe ik dit kan oplossen? :/

  • AK47
  • Registratie: Juli 2001
  • Laatst online: 04-05-2024
Ah, opgelost met NAT :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#! /bin/sh

echo -n Setting IPTables Rules ...

# Stop Forwarding
echo 0 > /proc/sys/net/ipv4/ip_forward

# Flush everything
iptables -F

# enable ip forwarding
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# drop ports
iptables -t nat -A PREROUTING -j DROP

# open ports
iptables -t nat -I PREROUTING -p tcp --destination-port 22 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --destination-port 80 -j ACCEPT
iptables -t nat -I PREROUTING -p udp --destination-port 53 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --destination-port 53 -j ACCEPT
iptables -t nat -I PREROUTING -p icmp -j ACCEPT

# Start forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

echo done.

[ Voor 1% gewijzigd door AK47 op 16-10-2005 17:42 . Reden: DNS poort is 53 niet 59 ;) ]


  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Door de prerouting gaat het verkeer buiten de input en output rules om.
Lijkt mij niet de oplossing voor je probleem.

Als je eth0 je externe interface is moet je daar niet destination 53 en 80 openzetten maar die betreffende source poorten.
Jouw server doet een uitgaand verzoek over eth0 naar poort 53/80 van de dns/http-server. Het antwoord kan met source-poort 53/80 terug naar je eth0.

Op de eth0 heb je nu trouwens een DROP bovenaan staan. Naar de andere regels zal dus niet eens gekeken worden.

met iptables -vnL (-t nat) kan je zien welke regels er in staan, en door wat -j LOG regels onderaan te zetten kan je zelf in /var/log/messages zien wat je dropt en wat er dus misgaat.

[ Voor 28% gewijzigd door Coen Rosdorff op 17-10-2005 02:30 ]


  • Lancer
  • Registratie: Januari 2002
  • Laatst online: 09:30

Lancer

What the......

... als je je doos als router gebruikt, dan zou ik ook maar eens de FORWARD chain gebruiken. Afhankelijk van de kernel versie worden de INPUT/OUTPUT filters niet gebruikt voor het forwarden van verkeer.

Je kunt niet in een systeem meten zonder het systeem te beinvloeden.... (gevolg van de Heisenberg onzekerheidsrelatie)

Pagina: 1