Ik heb een raar probleem met linux en ip tables.
Wat is de bedoeling?
Er is een machine die dienst doet als gateway/router. Hier draait iptables op. Deze machine zit met een nic (WAN) op het internet en met een nic (LAN) op het interne lan. Zover niks spannends dus.
Achter deze machine op LAN leeft nog een computer. Dit is ook een linux machine. Deze wil ik benaderbaar maken van buiten af, Maar deze machine mag zelf niet een route naar internet (WAN) vinden.
Internet --------- Linux iptables------- Target Linux.
Voor deze test gebruik ik telnet om even makkelijk te testen of dit werkt. Ik ben me er van bewust dat het niet veilig maar als het met telnet werkt is het makkelijk om te zetten naar de uiteindelijke situatie. De target machine wil ik bereiken door het internet IP adres op poort 23 aan te roepen.
De linux router moet dan aan aanvraag die op poort 23 binnen komt natten naar de target computer.
In de iptables staat daarom het volgende:
Dus eigenlijk super simpel, en dit werkt ook goed. Voor nu is dat INPUT en OUTPUT op accept staan niet erg.
MAAR:
De target machine kan nu vrij het internet op omdat de FORWARD policy op ACCEPT staat. Dit is niet wenselijk.
Dus verander de FORWARD chain policy naar:
Nu kan de target machine niet meer worden bereikt, en dat is logisch want FORWARD mag niet.
Dus er moet een extra regel komen waarin staat dat target machine wel door de FORWARD chain heen
mag. Dus je krijgt dan iets als:
Maar helaas krijg ik dit dus niet voor elkaar. Ik heb al heel veel variaties geprobeerd op deze regel, maar zodra je op de FORWARD chain iets gaat doen met poorten of ip nummer gaat het stuk.
Alleen als je iets erin zet als:
Dan werkt het weer wel, maar dit is eigenlijk het zelfde als de policy van forward op ACCEPT zetten. Het rare is wel dat het niet uitmaakt of je nu de WAN of LAN ACCEPT bij beide werkt het weer!!??
Ik begrijp nu niet waarom de FORWARD chain niet mee werken wil. Als ik met wireshark mee ga kijken zie ik dat de telnet pakketten niet aankomen. Je ziet dan op een gegeven moment alleen maar retransmits van telnet pakketten. Wanneer de policy op ACCEPT staat zie een normaal beeld in wireshark.
De duidelijkste uitleg van dit en ook min of meer waar ik de regels van iptables op baseer komt van:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Security_Guide/s1-firewall-ipt-fwd.html
Iemand een idee want ik weet het even niet meer.
Wat is de bedoeling?
Er is een machine die dienst doet als gateway/router. Hier draait iptables op. Deze machine zit met een nic (WAN) op het internet en met een nic (LAN) op het interne lan. Zover niks spannends dus.
Achter deze machine op LAN leeft nog een computer. Dit is ook een linux machine. Deze wil ik benaderbaar maken van buiten af, Maar deze machine mag zelf niet een route naar internet (WAN) vinden.
Internet --------- Linux iptables------- Target Linux.
Voor deze test gebruik ik telnet om even makkelijk te testen of dit werkt. Ik ben me er van bewust dat het niet veilig maar als het met telnet werkt is het makkelijk om te zetten naar de uiteindelijke situatie. De target machine wil ik bereiken door het internet IP adres op poort 23 aan te roepen.
De linux router moet dan aan aanvraag die op poort 23 binnen komt natten naar de target computer.
In de iptables staat daarom het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| #!/bin/bash set -x echo 1 > /proc/sys/net/ipv4/ip_forward WAN="eth1" LAN="eth0" iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A PREROUTING -t nat -p tcp -i $WAN --dport 23 -j DNAT --to-destination x.x.x.x:23 iptables -A POSTROUTING -t nat -j MASQUERADE |
Dus eigenlijk super simpel, en dit werkt ook goed. Voor nu is dat INPUT en OUTPUT op accept staan niet erg.
MAAR:
De target machine kan nu vrij het internet op omdat de FORWARD policy op ACCEPT staat. Dit is niet wenselijk.
Dus verander de FORWARD chain policy naar:
code:
1
| iptables -P FORWARD DROP |
Nu kan de target machine niet meer worden bereikt, en dat is logisch want FORWARD mag niet.
Dus er moet een extra regel komen waarin staat dat target machine wel door de FORWARD chain heen
mag. Dus je krijgt dan iets als:
code:
1
| iptables -A FORWARD -i $WAN -p tcp --dport 23 -d x.x.x.x -j ACCEPT |
Maar helaas krijg ik dit dus niet voor elkaar. Ik heb al heel veel variaties geprobeerd op deze regel, maar zodra je op de FORWARD chain iets gaat doen met poorten of ip nummer gaat het stuk.
Alleen als je iets erin zet als:
code:
1
2
| Iptables -A FORWARD -i $WAN -j ACCEPT Iptables -A FORWARD -o $WAN -j ACCEPT |
Dan werkt het weer wel, maar dit is eigenlijk het zelfde als de policy van forward op ACCEPT zetten. Het rare is wel dat het niet uitmaakt of je nu de WAN of LAN ACCEPT bij beide werkt het weer!!??
Ik begrijp nu niet waarom de FORWARD chain niet mee werken wil. Als ik met wireshark mee ga kijken zie ik dat de telnet pakketten niet aankomen. Je ziet dan op een gegeven moment alleen maar retransmits van telnet pakketten. Wanneer de policy op ACCEPT staat zie een normaal beeld in wireshark.
De duidelijkste uitleg van dit en ook min of meer waar ik de regels van iptables op baseer komt van:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Security_Guide/s1-firewall-ipt-fwd.html
Iemand een idee want ik weet het even niet meer.
brabrabrabra...