Vor ein paar Wochen habe ich für eine kleine Firma mit 30 Mitarbeitern ein günstiges Wireless-LAN implementiert. Angefordert war die Abdeckung von drei Etagen und die Einrichtung von einem internen und einem Gäste-WLAN bei einem Budget von 1.000,- EUR.
Nach kurzer Recherche haben wir uns für eine Lösung bestehend aus drei WAP4410N Access Points und dem 881 Security Router von Cisco entschieden. Mit 650,- EUR liegt das sogar noch deutlich unter dem Budget. Der Internetzugang für das Gäste-WLAN wird über ein bestehendes Gateway realisiert, der Router wird lediglich für das Routing zwischen den VLANs benötigt.
Zuerst wird mithilfe der seriellen Schnittstelle die Initialkonfiguration des Routers vorgenommen, wobei als erstes die nicht benötige Standardkonfiguration des Routers gelöscht wird:
Nach dem Reboot des Routers wird der Initial Configuration Dialog durchlaufen und damit Hostname, Zugangsdaten und IP-Adresse des Standard VLANs definiert:
Als nächstes wird SSH konfiguriert, ein Benutzer angelegt, der Session-Timeout für Terminalverbindungen festgelegt und die Interfaces aktiviert:
Anschließend werden NTP-Server und Logging eingerichtet:
Im nächsten Schritt wird das Routing aktiviert und die Default-Route hinterlegt, über die später auch der Internetzugriff für das Gäste-WLAN erfolgt:
Jetzt wird das VLAN bzw. SVI für das Gäste-WLAN erstellt, dessen IP-Adresse später als Standardgateway für dort befindlichen Clients verwendet wird.
Nach Hinzufügen des VLANs ist das SVI (Switched Virtual Interface) zunächst noch down, sprich für das Netz 192.168.5.0/24 existiert noch kein Eintrag in der Routing-Tabelle. Um das virtuelle Interface zu aktivieren, muss sich zunächst ein Port im entsprechenden VLAN befinden und ein Gerät angeschlossen sein. Da sich die Access Points neben dem Gäste VLAN5 auch im Management VLAN1 befinden, müssen die entsprechenden Ports am Router als Trunk konfiguriert werden – hier beispielhaft für das Interface fastEthernet 1:
Ist ein Gerät angeschlossen und das Interface damit “up”, aktiviert sich auch das SVI und das Netz erscheint in der Routing-Tabelle:
cisco-881#show ip route
Gateway of last resort is 172.16.10.1 to network 0.0.0.0
S* 0.0.0.0/0 [1/0] via 172.16.10.1
172.16.10.0/24 is variably subnetted, 2 subnets, 2 masks
C 172.16.10.0/24 is directly connected, Vlan1
L 172.16.10.103/32 is directly connected, Vlan1
192.168.5.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.5.0/24 is directly connected, Vlan5
L 192.168.5.1/32 is directly connected, Vlan5
Da auf dem Router standardmäßig jeglicher Verkehr erlaubt ist, muss mittels einer Access List die Kommunikation zwischem dem Gäste-WLAN (192.168.5.0/24) und dem internen Netzwerk (172.16.10.0/24) verhindert werden.
Grundsätzlich wird bei Traffic auf dem Router zwischen In/Out und bei den Access Lists zwischen Inbound und Outbound unterschieden [1]:
- Out — Traffic that has already been through the router and leaves the interface. The source is where it has been, on the other side of the router, and the destination is where it goes.
- In — Traffic that arrives on the interface and then goes through the router. The source is where it has been and the destination is where it goes, on the other side of the router.
- Inbound — If the access list is inbound, when the router receives a packet, the Cisco IOS software checks the criteria statements of the access list for a match. If the packet is permitted, the software continues to process the packet. If the packet is denied, the software discards the packet.
- Outbound — If the access list is outbound, after the software receives and routes a packet to the outbound interface, the software checks the criteria statements of the access list for a match. If the packet is permitted, the software transmits the packet. If the packet is denied, the software discards the packet.
Um Traffic vom Gäste WLAN zum internen Netzwerk zu unterbinden, muss also eine Inbound-Access-List eingerichtet werden, die am Interface VLAN5 eingehenden Traffic von 192.168.5.0/24 zum Netz 172.16.10.0/24 blockiert. Gleichzeitig muss sichergestellt sein, dass DHCP-Requests zum internen DHCP Server und jeglicher anderer Traffic zwecks Internetzugriff zugelassen werden.
Dazu wird eine entsprechende Access List erstellt und anschließend Inbound an das Interface gebunden:
cisco-881(config)#ip access-list extended 100
cisco-881(config-ext-nacl)#permit icmp any any
cisco-881(config-ext-nacl)#permit udp any any eq 67
cisco-881(config-ext-nacl)#deny ip any 172.16.10.0 0.0.0.255
cisco-881(config-ext-nacl)#permit ip any any
cisco-881(config-ext-nacl)#exit
cisco-881(config)#interface vlan 5
cisco-881(config-if)#ip access-group 100 in
Anschließend kann die Konfiguration der Access List wie folgt überprüft werden:
cisco-881#show running-config interface vlan 5
Building configuration...
Current configuration : 85 bytes
!
interface Vlan5
ip address 192.168.5.1 255.255.255.0
ip access-group 100 in
end
cisco-881#show ip access-lists
Extended IP access list 100
10 permit icmp any any
20 permit udp any any eq bootps
30 deny ip any 172.16.10.0 0.0.0.255
40 permit ip any any
Die Access List definiert dabei folgende Regeln:
- Regel 10 erlaubt sämtlichen ICMP Verkehr von jeder Quelle (any) zu jedem Ziel (any)
- Regel 20 erlaubt UDP Verkehr mit Zielport 67 (DHCP Server) von jeder zu jeder Quelle
- Regel 30 verbietet sämtlichen IP Verkehr von jeder Quelle zum Ziel 172.16.10.0/24
- Regel 40 erlaubt sämtlichen IP Verkehr von jeder Quelle zu jeder Quelle
Die Regel für den DHCP-Verkehr wird nicht weiter eingeschränkt, weil DHCP Requests als Quelladresse immer 0.0.0.0 und als Zieladresse 255.255.255.255 verwenden. Regel 40 wird deshalb benötigt, weil Clients im Gäste-WLAN unbeschränkten Zugriff auf das Internet erhalten sollen. Existieren noch weitere interne Netzwerke, muss die Kommunikation dorthin natürlich ebenfalls mit einer entsprechenden Regel eingeschränkt werden.
Die Antwortpakete sind in dieser Konfiguration immer erlaubt – schließlich gilt die Inbound Access List nur für Traffic, der von Interface VLAN5 direkt empfangen wird. Möchte man auch die Kommunikation vom internen Netzwerk zum Gäste-WLAN einschränken, muss eine entsprechende Outbound Access List erstellt werden.
Um DHCP-Traffic aus VLAN5 zum internen DHCP-Server weiterzuleiten, muss für VLAN5 noch die IP-Adresse des entsprechenden Servers angegeben werden:
cisco-881(config)#interface vlan 5
cisco-881(config-if)#ip helper-address 172.16.10.45
Auf dem DHCP-Server, z.B. Windows Server 2008 R2, muss dann lediglich ein dem IP-Netz von VLAN5 (192.168.5.0/24) entsprechender Scope existieren.
Wer den Internetzugang für das Gäste-WLAN ebenfalls über den Security Router realisieren möchte, kann natürlich auch das tun. Im folgenden Beispiel existiert ein offizielles Netz mit mehreren IPv4 Adressen, von denen eine für das WAN-Interface des Routers verwendet wird:
cisco-881(config)#interface fastEthernet 4
cisco-881(config-if)#no shutdown
cisco-881(config-if)#ip address 218.14.81.151 255.255.255.248
Entsprechend dem offiziellen IP Netz wird die Default Route auf dem Router angepasst:
cisco-881(config)#ip route 0.0.0.0 0.0.0.0 218.14.81.150
Da auf dem Router standardmäßig jede Kommunikation zugelassen ist, muss anschließend eine Regel erstellt werden, die eingehende Pakete aus dem Internet blockiert. Nur ICMP wird erlaubt:
cisco-881(config)#ip access-list extended 103
cisco-881(config-ext-nacl)#permit icmp any any
cisco-881(config-ext-nacl)#deny ip any any
cisco-881(config-ext-nacl)#exit
cisco-881(config)#interface fastEthernet 4
cisco-881(config-if)#ip access-group 103 in
cisco-881(config-if)#exit
In dieser Konstellation werden nun mit Ausnahme von ICMP alle auf dem WAN Interface eingehenden Pakete blockiert – also auch Antworten auf Verbindungen, die gewünscht sind. Der Internetzugriff für das Gäste WLAN würde so natürlich nicht funktionieren.
Da man nicht für jede Verbindung eine Regel für entsprechende Antwortpakete erstellen kann, muss in diesem Fall mit Stateful Inspection bzw. Context-Based Access Control (CBAC) gearbeitet werden. Bei Verwendung von CBAC prüft der Router die ausgehenden Verbindungen und öffnet dynamisch die für die Antwortpakete benötigen Ports in der Inbound Access List.
Als Beispiel wird eine Stateful Inspection für die wichtigsten Protkolle eingerichtet und die Regel Outbound an das WAN Interface gebunden:
cisco-881(config)#ip inspect name guests-internet tcp
cisco-881(config)#ip inspect name guests-internet udp
cisco-881(config)#ip inspect name guests-internet http
cisco-881(config)#ip inspect name guests-internet https
cisco-881(config)#ip inspect name guests-internet ftp
cisco-881(config)#ip inspect name guests-internet dns
cisco-881(config)#interface fastEthernet 4
cisco-881(config-if)#ip inspect guests-internet out
Anschließend wird NAT so eingerichtet, dass die IP-Adressen des Gäste-WLANs in die offizielle IP-Adresse übersetzt werden [2]:
Die Konfiguration des Routers ist damit abgeschlossen und es folgt die Einrichtung der Access Points.
Hat der Access Point eine IP-Adresse via DHCP erhalten, wird nach der Anmeldung am Web Interface zunächst eine fest IP-Adresse und ein Hostname konfiguriert:

Anschließend wird wie auch beim Router zwecks korrekter Uhrzeit ein NTP-Server hinterlegt:

Danach werden die WLANs erstellt, in diesem Fall ein WLAN für das interne Netzwerk und eins für Gäste:

Für die soeben erstellten WLANs werden danach die Sicherheitseinstellungen definiert, in diesem Fall WPA2-Personal:

Im letzten Schritt werden die WLANs den entsprechenden VLANS zugeordnet. Das interne WLAN kommt wie das kabelgebundene Netz in VLAN1, das Gäste WLAN wird VLAN5 und damit dem vom Rest abgeschotteten IP-Netz 192.168.5.0/24 zugeordnet:

Damit ist die Einrichtung abgeschlossen und die Konfiguration verhält sich wie folgt:
- Das interne WLAN “WLAN-Intern” ist VLAN1 zugeordnet. Wireless Clients verhalten sich genauso wie kabelgebundene Clients und befinden sich auch im selben IP-Netz.
- Das Gäste WLAN “WLAN-Guests” ist VLAN5 zugeordnet. Wireless Clients erhalten mithilfe der konfigurierten IP-Helper-Address eine IP-Adresse aus 192.168.5.0/24 vom DHCP-Server. Das Netzwerk ist sowohl auf Layer 2 (VLAN) als auch auf Layer 3 (Access List) vom internen Netzwerk getrennt. Pakete ins Internet werden über die auf dem Router konfigurierte Default Route entsprechend weitergeleitet.
Alternativ kann man das interne WLAN natürlich ebenfalls in ein separates VLAN und damit eigenes IP-Netz legen. Aufgrund des dadurch entstehenden Overheads (neuer DHCP Scope, neue VPN Tunnel) haben wir uns in diesem Fall aber dagegen entschieden.
Die Verwendung von WPA2-Enterprise mit einem RADIUS-Server wie in meinem Artikel Cisco WLC 5508: Web Authentifizierung mittels RADIUS und Active Directory beschrieben wäre ebenfalls eine Option zur Erhöhung der Sicherheit.
Nachtrag: Wer möchte, kann den Cisco Router auch als Peer für ein Site-to-Site VPN mittels IPsec verwenden. Zunächst müssen hierfür die Protkolle ESP und ISAKMP auf dem WAN Interface erlaubt werden:
cisco-881(config)#ip access-list extended 103
cisco-881(config-ext-nacl)#8 permit udp any any eq isakmp
cisco-881(config-ext-nacl)#9 permit esp any any
cisco-881(config-ext-nacl)#exit
Danach werden die Parameter für IKE Phase 1 festgelegt, bei Bedarf können auch mehrere Policies erstellt werden:
cisco-881(config)#crypto isakmp policy 1
cisco-881(config-isakmp)#encryption aes
cisco-881(config-isakmp)#group 5
cisco-881(config-isakmp)#lifetime 14400
cisco-881(config-isakmp)#authentication pre-share
Im nächsten Schritt wird der Pre-Shared Key in Verbindung mit der IP-Adresse der Gegenseite angegeben:
cisco-881(config)#crypto isakmp key test address 219.82.154.107
Weiterhin wird mittels einer Access List definiert, welcher Datenverkehr per IPsec übermittelt werden soll:
Anschließend werden die Parameter für IKE Phase 2 definiert:
cisco-881(config)#crypto ipsec transform-set layer9 esp-aes esp-sha-hmac
cisco-881(config)#crypto map layer9 10 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
and a valid access list have been configured.
cisco-881(config-crypto-map)#set security-association life seconds 3600
cisco-881(config-crypto-map)#set transform-set layer9
cisco-881(config-crypto-map)#set pfs group2
cisco-881(config-crypto-map)#set peer 219.82.154.107
cisco-881(config-crypto-map)#match address 104
cisco-881(config-crypto-map)#exit
Im letzten Schritt werden die definierten IPsec Parameter bzw. die Crypto Map auf das WAN Interface angewandt:
cisco-881(config)#interface fastEthernet 4
cisco-881(config-if)#crypto map layer9
Ist NAT eingerichtet, muss für das Zielnetzwerk auf der Gegenseite noch eine Ausnahmeregel erstellt werden, da Pakete andernfalls genattet werden und niemals bei der Gegenseite ankommen. Dazu wird einfach ein entsprechender Eintrag in der Access List hinzugefügt, die das zu nattende Netzwerk festlegt. Existiert beispielsweise eine Regel, die alle Pakete aus 172.16.10.0/24 nattet, wird für das Zielnetz 192.168.80.0/24 ein Deny-Eintrag vorangeschoben:
Mit einem Ping auf eine IP-Adresse der Gegenseite sollte sich der Tunnel initiieren lassen. Zur Überprüfung stehen folgende Befehle bereit:
Getrennt werden kann eine Verbindung z.B. mit folgendem Befehl:
cisco-881#clear crypto sa peer 219.82.154.107
Interessante Links zum Thema VPN mit IOS sind z.B. Cisco IOS VPN Configuration vom Virtual Private Network Consortium, das Dokument How to configure IPSEC encryption with the Cisco IOS in der Petri IT Knowledgebase sowie das Dokument Cisco IPsec Grundkonfiguration von Ralf Pohlmann.
[1] Cisco Document ID: 23602, Configuring IP Access Lists
[2] Cisco Document ID: 13772, Configuring Network Address Translation: Getting Started