[Linux] Uitgebreide iptables gateway/router

Pagina: 1
Acties:
  • 136 views sinds 30-01-2008
  • Reageer

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Ik heb een situatie waarbij er 3 netwerken zijn:

- Internet
- LAN1
- LAN2

Het is de bedoeling dat LAN1 (statisch ip) op het internet kan maar ook aan bronnen van LAN2 (ip via dhcp).
LAN1 is een klein netwerk (192.168.36.0/24) met eigen DHCP en DNS domain die tevens verzorgd wordt door deze gateway/router/firewall.
LAN2 is een groot netwerk (172.23.0.0/16) ook met eigen DHCP, DNS maar dan beheerd door andere machine(s). Het internet is een statisch ip adres, maar dit lijkt me niet zo relevant. LAN2 heeft een eigen internet verbinding, dus enkel LAN1 kan/mag gebruik maken van de internetverbinding geconfigureerd op de interface "internet" van de gateway.

Nu gebruik ik op de Internet interface masquareding zodanig dat het verkeer van LAN1 naar het internet ge-NAT wordt.

Echter wil ik tussen LAN1 en LAN2 gewone routing. Dus geen NAT. LAN1 heeft in principe onbeperkte toegang tot bronnen op LAN2. Voor LAN2 geld dit niet, op een paar uitzonderingen na (bvb SSH).

Wanneer ik geen masquareding gebruik op de LAN2 interface, dan kan er daadwerkelijk ook niks gerouteerd worden van LAN1 naar LAN2.

In de filter table wordt forwarding toegestaan als:
  • inkomende interface internet en uitgaande interface LAN1 is
  • inkomende interafce LAN1 en uitgaande interface internet is
  • inkomende interface LAN2 en uitgaande interface LAN1 is
  • inkomende interface LAN1 en uitgaande interface LAN2 is
Hieronder het script:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Interfaces definiëren
    Internet='eth0'
    LAN1='eth1'
    LAN2='eth2'

    ################################################
    ################### BASIS REGELS ###################
    ################################################

    # Verwijderen van alle bestaande regels, en alle aangemaakte chains verwijderen
    iptables -t filter -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables --delete-chain
    iptables --table nat --delete-chain

    # Standaard policy instellen op drop voor ingaand, doorgaand en uitgaand verkeer
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP

    # Alle verkeer van/naar ongeldige connecties blokkeren
    iptables -A INPUT -m state --state INVALID -j DROP
    iptables -A FORWARD -m state --state INVALID -j DROP
    iptables -A OUTPUT -m state --state INVALID -j DROP

    # Onbeperkt alle in- en uitgaand verkeer via loopback interfaces en LAN1 toelaten
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    iptables -A INPUT -i $LAN1 -j ACCEPT
    iptables -A OUTPUT -o $LAN1 -j ACCEPT

    # Accepteer verkeer van het Internet als je de connectie zelf geinitaliseerd hebt:
    iptables -A INPUT -i $Internet -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Onbeperkt uitgaande connecties naar het Internet accepteren
    iptables -A OUTPUT -o $Internet -j ACCEPT

    # Accepteer verkeer van de LAN2 als je de connectie zelf geinitaliseerd hebt:
    iptables -A INPUT -i $LAN2 -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Onbeperkt uitgaande connecties naar LAN2 accepteren
    iptables -A OUTPUT -o $LAN2 -j ACCEPT

    # IP masquerading NAT: één publiek IP adres maar met meerdere interne ip adressen
    iptables -t nat -A POSTROUTING -o $Internet -j MASQUERADE
    
    # IP masquerading NAT: één publiek IP adres maar met meerdere interne ip adressen
    iptables -t nat -A POSTROUTING -o $LAN2 -j MASQUERADE

    # Forwarding: alle verkeer tussen het Internet en LAN1 toelaten in beide richtingen
    iptables -A FORWARD -i $Internet -o $LAN1 -j ACCEPT
    iptables -A FORWARD -i $LAN1 -o $Internet -j ACCEPT
    
    # Forwarding: alle verkeer tussen LAN1 en LAN2 toelaten in beide richtingen
    iptables -A FORWARD -i $LAN2 -o $LAN1 -j ACCEPT
    iptables -A FORWARD -i $LAN1 -o $LAN2 -j ACCEPT

    ################################################
    ################# UITGEBREIDE REGELS #################
    ################################################
    # SSH toegang van overal toelaten
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    # HTTP toegang van overal toelaten
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT


Dit is dus de bewuste regel die ik eruit zou willen hebben:

code:
1
2
    # IP masquerading NAT: één publiek IP adres maar met meerdere interne ip adressen
    iptables -t nat -A POSTROUTING -o $LAN2 -j MASQUERADE


Ik veronderstel toch dat gewone routing zou moeten mogelijk zijn tussen LAN1 en LAN2. Zoals ik het nu zie lijkt het dus voor een resource (bvb een server) op het LAN2 netwerk dat het source adres van de client dan altijd van de LAN2 interface van de gateway is. Het is dus de bedoeling dat zonder NAT dat het source ip dat van de bewuste pc in LAN1 is.

Een bijkomend vraagje: zijn er enige adviezen omtrent veiligheid van dit script? Ik bedoel naar waterdichtheid en robuustheid van de firewall.
LAN1 is de vertrouwde lan, dus alle verkeer naar de gateway is toegelaten. Het internet en LAN2 kan enigszins als een "publieke internet zone" worden beschouwd dus moet meer dichtgeschroeft zijn.

Alvast bedankt.

[ Voor 3% gewijzigd door Tom_G op 11-02-2007 13:09 ]


  • Zwerver
  • Registratie: Februari 2001
  • Niet online
Post je routing table eens?

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


  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Uhmm ja het verkeer routen dat LAN1 bij LAN2 kan gebeurt in je routing tabel...
Daarna moet je dat afschermen in je firewall

Dus bijvoorbeeld iets in de richting:

source LAN1 dest LAN2 allow
source Lan2 dest Lan1 allow service X
source Lan2 dest Lan1 allow service Y
source Lan2 dest Lan1 allow service Z
source Lan2 dest Lan1 disallow

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
De echte routing tabel zal ik morgen eens posten omdat ik nu niet aan die gateway kan.

Echter heb ik wel iets gesimuleerd hier met vmware machines. De routing tabel van de echte gateway ziet er dus ook zo ongeveer uit.
In de routing tabel komen standaard entries voor voor hetzelfde netwerk als waar de nic's voor geconfigureerd zijn (logisch). En dit uiteraard zonder gateway (*) want het gaat om hetzelfde subnet.

Ik zou dan toch veronderstellen dat op basis van de routing tabel er gerouteerd wordt naar dit netwerk?

Routing tabel uit gesimuleerde omgeving:
code:
1
2
3
4
5
6
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
193.191.xxx.xxx *               255.255.255.192 U     0      0        0 eth0
192.168.23.0    *               255.255.255.0   U     0      0        0 eth2
192.168.36.0    *               255.255.255.0   U     0      0        0 eth1
default         193.191.xxx.xxx 0.0.0.0         UG    0      0        0 eth0


De eerste 3 entries is dus wat ik bedoel met die entries voor het netwerk waarvan die netwerkkaart deel uitmaakt.
Verder is er dus ook een entry voor de default gateway via eth0 naar het internet.

Nu zou ik toch verwachten wanneer er via een client in het 192.168.36.x netwerk wil verbinden naar een andere machine in het 192.168.23.x netwerk (dit is maar een vb, het subnet van LAN2 in de echte situatie is anders) dit gewoon hiermee gerouteerd kan worden?

Bij wijze van test staat in de gesimuleerde omgeving de iptables firewall volledig open (geen regels aanwezig en de default policy op accept).

edit: zelfs al wis ik de default route, dan nog kan er pakweg niet gepingt worden naar een host in het 192.168.23.x netwerk vanaf een host in het 192.168.36.x netwerk. Die laatste gebruikt uiteraard als default gateway eth1 van de gateway.

[ Voor 11% gewijzigd door Tom_G op 11-02-2007 16:50 ]


  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 26-01 17:11
Beetje laat, maar hier is hij dan:

code:
1
2
3
4
5
6
7
8
9
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
193.191.xxx.xxx*               255.255.255.192 U     0      0        0 eth0
192.168.36.0    *               255.255.255.0   U     0      0        0 eth1
192.168.2.0     172.23.0.1      255.255.255.0   UG    0      0        0 eth2
172.24.0.0      172.23.0.1      255.255.0.0     UG    0      0        0 eth2
172.23.0.0      *               255.255.0.0     U     0      0        0 eth2
172.21.0.0      172.23.0.1      255.255.0.0     UG    0      0        0 eth2
default         193.191.xxx.xxx 0.0.0.0         UG    0      0        0 eth0


Zonder masquerading op de lan2 interface kan ik zelfs niet pingen naar een server op het 172.21.0.0 netwerk. Mèt masquerading lukt dit dan weer wel.