❗️Toto je původní verze internetového fóra ISPforum.cz do února 2020 bez možnosti registrace nových uživatelů. Aktivní verzi fóra naleznete na adrese https://telekomunikace.cz

RADIUS na WiFi, prideleni pevne IP, PPPoE

Příspěvky, které nespadají do žádného z vytvořených fór.
xyz007
Příspěvky: 7
Registrován: 13 years ago

RADIUS na WiFi, prideleni pevne IP, PPPoE

Příspěvekod xyz007 » 13 years ago

Zdravim!
Na WiFi AP (Ubuntu Linux) mam WPA2 Enterprise, kazdy ma tedy sve jmeno a heslo a certifikat CA.
O WPA se stara hostapd:

Kód: Vybrat vše

interface=wlan0
driver=nl80211
wpa=2
wpa_key_mgmt=WPA-EAP
wpa_pairwise=CCMP
hw_mode=g
channel=13
ssid=TEST
ieee8021x=1
eap_server=0
own_ip_addr=127.0.0.1
auth_server_addr=127.0.0.1
auth_server_port=1812
auth_server_shared_secret=testing123
eapol_key_index_workaround=1
wme_enabled=1
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-40][DSSS_CCK-40]

Overuje se proti FreeRADIUS serveru. Pro zaznam typu:

Kód: Vybrat vše

jmeno Cleartext-Password := "heslo"

uzivatel dostane IP od DHCP serveru z daneho rozsahu.
To vse funguje.

Ja ale potrebuji uzivateli priradit pevnou IP adresu.
Kdyz chci ve FreeRADIUSu pouzit Framed-IP-Address, musim mit pppoe server?
Protoze uzivateli:

Kód: Vybrat vše

jmeno   Cleartext-Password := "heslo"
         Service-Type = Framed-User,
         Framed-Protocol = PPP,
         Framed-MTU = 1400,
         Framed-IP-Address = 192.168.10.123,
         Framed-IP-Netmask = 255.255.255.0,
         Framed-Routing = Broadcast-Listen,
         Framed-Compression = Van-Jacobsen-TCP-IP

se prideli IP normalne z DHCP.

Pritom RADIUS atributy posila:

Kód: Vybrat vše

# echo 'User-Name="abc",User-Password="abc",NAS-IP-Address=127.0.0.1' | radclient 127.0.0.1 auth testing123 -x
Sending Access-Request of id 245 to 127.0.0.1 port 1812
   User-Name = "abc"
   User-Password = "abc"
   NAS-IP-Address = 127.0.0.1
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=245, length=62
   Service-Type = Framed-User
   Framed-Protocol = PPP
   Framed-MTU = 1400
   Framed-IP-Address = 192.168.10.123
   Framed-IP-Netmask = 255.255.255.0
   Framed-Routing = Broadcast-Listen
   Framed-Compression = Van-Jacobson-TCP-IP
#


Zkusil jsem podle navodu nainstalovat pppoe server, ale na uzivatele to nema zadny vliv a dal dostava adresu z DHCP.

Nevite nekdo, jak to nejlepe vyresit? Je nutne pouziv pppoe?
0 x

Uživatelský avatar
zdenek.svarc
Administrator
Příspěvky: 1635
Registrován: 20 years ago
antispam: Ano

Příspěvekod zdenek.svarc » 13 years ago

Zdravíčko,

framed-ip-address funguje i pro DHCP server, není nutné rozjíždět k vůli tomu PPPoE. V případě DHCP serveru je však potřeba identifikovat uživatele jeho MAC adresou. DHCP server vezme MAC adresu DHCP klienta a dotáže se radiusu, jestli tohoto uživatele (=tuto MAC adresu) má v databázi a pokud ano (hesla jsou v tomto případě prázdná), mrkne na reply attributy a framed-ip-address pošle. Je samozřejmě třeba, aby DHCP server (předpokládám že ISC) byl nakonfigurovaný na ověřování vůči radiusu.

Zkrátka je třeba si uvědomit, že v tomto případě budou probíhat dva ověřovací procesy vůči radiusu:
1. 802.1x (WPA2) na uživatelské jméno zajištěné heslem.
a následně
2. DHCP na uživatelskou MAC adresu zajištěnou prázdným heslem.
Takže každý takový uživatel bude v radius databázi dvakrát. Jednou identifikovaný jménem a podruhé identifikovaný MAC adresou.

Přínos PPPoE by v tomto případě spočíval v tom, že by komplexně zajitil jak autentizaci (jméno/heslo), tak autorizaci (nastavení třetí vrstvy a další případné parametry) v rámci jednoho ověřovacího procesu. Na druhou stranu, na PPPoE tunel lze zapnout MPPE 128, ale jeho síla oproti WPA2/AES je asi neporovnatelná.

Z.
0 x

xyz007
Příspěvky: 7
Registrován: 13 years ago

Příspěvekod xyz007 » 13 years ago

Dekuji za tip, vypada to zajimave.
Co kdyz si ale uzivatel po WPA prihlaseni zmeni MAC adresu? Tak budu mit smulu :-(

Jak jsem koukal, tak FreeRADIUS by mel jit jednoduse nastavit, jen se mi nezda to varovani:

Kód: Vybrat vše

This is a virtual server that handles DHCP.#
#      !!!! WARNING !!!!#
#   This code is experimental, and SHOULD NOT be used in a
#   production system.  It is intended for validation and
#   experimentation ONLY.


Neumi FreeRADIUS nejak jinak nastavit pevnou IP klientovi?

Jeste me napadlo zkusit "Rlm_ippool" (Rlm_sqlippool) a kazdeho uzivatele dat do samotne podsite (napr. /30). Pak tedy bude muset wlan0 sitova karta mit X IP adres a dhcp bude obsluhovat vsechny ty podsite. Co si o tom myslite?
0 x

xyz007
Příspěvky: 7
Registrován: 13 years ago

Příspěvekod xyz007 » 13 years ago

Tak jsem to zkousel a nejde mi to :-(

Sitove karte jsem pridal IP adresy:

Kód: Vybrat vše

ip addr add 192.168.10.1/24 dev wlan0
ip addr add 192.168.20.1/24 dev wlan0
ip addr add 192.168.30.1/24 dev wlan0


Nastaveni DHCPD:

Kód: Vybrat vše

default-lease-time 3600;
max-lease-time 7200;
shared-network sit {
   subnet 192.168.10.0 netmask 255.255.255.0 {
       option subnet-mask 255.255.255.0;
       option domain-name-servers 192.168.10.1, 8.8.8.8;
       option ntp-servers 192.168.10.1;
       option domain-name "lan";
       option broadcast-address 192.168.10.255;
       option routers 192.168.20.1;
       range 192.168.10.10 192.168.10.200;
       authoritative;
   }
   subnet 192.168.20.0 netmask 255.255.255.0 {
       option subnet-mask 255.255.255.0;
       option domain-name-servers 192.168.10.1, 8.8.8.8;
       option ntp-servers 192.168.10.1;
       option domain-name "lan";
       option broadcast-address 192.168.20.255;
       option routers 192.168.20.1;
       range 192.168.20.2 192.168.20.100;
       authoritative;
   }
   subnet 192.168.30.0 netmask 255.255.255.0 {
       option subnet-mask 255.255.255.0;
       option domain-name-servers 192.168.10.1, 8.8.8.8;
       option ntp-servers 192.168.10.1;
       option domain-name "lan";
       option broadcast-address 192.168.30.255;
       option routers 192.168.30.1;
       range 192.168.30.2 192.168.30.100;
       authoritative;
   }
}

Nastaveni IP pool v radiusu:

Kód: Vybrat vše

# cat /etc/freeradius/modules/ippool
ippool main_pool {
   range-start = 192.168.1.1
   range-stop = 192.168.3.254
   netmask = 255.255.255.0
   cache-size = 800
   session-db = ${db_dir}/db.ippool
   ip-index = ${db_dir}/db.ipindex
   override = no
   maximum-timeout = 0
}
ippool jedna {
   range-start = 192.168.20.2
   range-stop = 192.168.20.100
   netmask = 255.255.255.0
   cache-size = 200
   session-db = ${db_dir}/db.ip-pool_jedna
   ip-index = ${db_dir}/db.ip-index_jedna
   override = no
   maximum-timeout = 0
}
ippool dva {
   range-start = 192.168.30.2
   range-stop = 192.168.30.100
   netmask = 255.255.255.0
   cache-size = 200
   session-db = ${db_dir}/db.ip-pool_dva
   ip-index = ${db_dir}/db.ip-index_dva
   override = no
   maximum-timeout = 0
}

Uzivatele:

Kód: Vybrat vše

# cat /etc/freeradius/users
DEFAULT   Framed-Protocol == PPP
   Framed-Protocol = PPP,
   Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT   Hint == "CSLIP"
   Framed-Protocol = SLIP,
   Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT   Hint == "SLIP"
   Framed-Protocol = SLIP

DEFAULT   Pool-Name := main_pool
            Fall-Through = Yes

ahoj   Cleartext-Password := "svete"

jedna   Cleartext-Password := "jedna"
   Pool-Name := "jedna"

dva   Cleartext-Password := "dva"
   Pool-Name := "dva"

Povoleni v sites enabled:

Kód: Vybrat vše

# cat /etc/freeradius/sites-enabled/default
post-auth {
   main_pool
   jedna
   dva
   # ...
}
accounting {
   main_pool
   jedna
   dva
   # ...
}

Jenze to porad nefunguje:

Kód: Vybrat vše

# echo 'User-Name="ahoj",User-Password="svete",NAS-IP-Address=127.0.0.1' | radclient 127.0.0.1 auth testing123 -x
Sending Access-Request of id 81 to 127.0.0.1 port 1812
   User-Name = "ahoj"
   User-Password = "svete"
   NAS-IP-Address = 127.0.0.1
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=81, length=32
   Framed-IP-Address = 192.168.2.82
   Framed-IP-Netmask = 255.255.255.0

# echo 'User-Name="jedna",User-Password="jedna",NAS-IP-Address=127.0.0.1' | radclient 127.0.0.1 auth testing123 -x
Sending Access-Request of id 196 to 127.0.0.1 port 1812
   User-Name = "jedna"
   User-Password = "jedna"
   NAS-IP-Address = 127.0.0.1
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=196, length=32
   Framed-IP-Address = 192.168.1.69
   Framed-IP-Netmask = 255.255.255.0

# echo 'User-Name="dva",User-Password="dva",NAS-IP-Address=127.0.0.1' | radclient 127.0.0.1 auth testing123 -x
Sending Access-Request of id 37 to 127.0.0.1 port 1812
   User-Name = "dva"
   User-Password = "dva"
   NAS-IP-Address = 127.0.0.1
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=37, length=32
   Framed-IP-Address = 192.168.2.82
   Framed-IP-Netmask = 255.255.255.0

Kde delam chybu?
0 x

xyz007
Příspěvky: 7
Registrován: 13 years ago

Příspěvekod xyz007 » 13 years ago

Jeste jsem zapomel, notebook dostane z DHCP pro uzivatele "ahoj", "jedna" i "dva" vzdy IP 192.168.10.10.
0 x

Uživatelský avatar
zdenek.svarc
Administrator
Příspěvky: 1635
Registrován: 20 years ago
antispam: Ano

Příspěvekod zdenek.svarc » 13 years ago

>Kde delam chybu?
V Radius databázi uživatelů chybí správné USERNAME. Jak bylo řečeno, přidělování IP adresy na základě DHCP autorizace nebude fungovat, dokud MAC adresa uživatele nebude v radius databázi jako USERNAME s prázdným heslem a tuším, že AUTH-TYPE by měl být LOCAL. Konfigurák ISC DHCP serveru nedokážu posoudit, protože používám DHCP server implementovaný v RouterOS.

>Co kdyz si ale uzivatel po WPA prihlaseni zmeni MAC adresu? Tak budu mit smulu.
Pokud uživatel změní MAC adresu wireless karty, tak se v první řadě rozpadne celé WPA2 spojení.

>Jak jsem koukal, tak FreeRADIUS by mel jit jednoduse nastavit, jen se mi nezda to varovani:
Netuším o jakou část Freeradiusu se jedná, ale jak bylo řečeno, nic speciálního není třeba.

>Neumi FreeRADIUS nejak jinak nastavit pevnou IP klientovi?
Radius server neumí přidělit IP adresu klientovi vůbec nijak. Mezi klientem a Radius serverem musí být mezivrstva typu DHCP server nebo PPPoE server.
0 x

xyz007
Příspěvky: 7
Registrován: 13 years ago

Příspěvekod xyz007 » 13 years ago

Jenze kdyz budu chtit vyuzit MAC adres, tak pro kazdeho klienta musim mit zaznamenanou jeho MAC. Co kdyz bude chtit pouzit jine zarizeni?

Me jde hlavne o nastaveni trafic shappingu a firewallu pro kazdeho klienta. A jedine co me napadlo, je nastavit kazdemu klientovi pevnou IP adresu.
Mate lepsi napad, jak toto resit?
0 x

Uživatelský avatar
zdenek.svarc
Administrator
Příspěvky: 1635
Registrován: 20 years ago
antispam: Ano

Příspěvekod zdenek.svarc » 13 years ago

>Jenze kdyz budu chtit vyuzit MAC adres, tak pro kazdeho klienta musim mit zaznamenanou jeho MAC. Co kdyz bude chtit pouzit jine zarizeni?

To lze řešit na switchované síti přes DHCP option 82, takže switch přidá do DHCP requestu identifikátor portu a switche a v radiusu pak není MAC adresa, ale složené z ID switche a portu. Na bezdrátové síti to bohužel nejde.

>Me jde hlavne o nastaveni trafic shappingu a firewallu pro kazdeho klienta. A jedine co me napadlo, je nastavit kazdemu klientovi pevnou IP adresu.
Mate lepsi napad, jak toto resit?

Pak je ideální použít PPPoE, ale out-of-the-box, jako je RouterOS, s využitím attributů Mikrotik-Rate-Limit (shapping), Mikrotik-Address-List (firewall access list) a Framed-IP-Address (přiřazení IP podle RFC). Klidně v kombinaci s WPA2-Enterprise, ale pak by opět šlo o dva ověřovací procesy vůči Radiusu.
0 x

xyz007
Příspěvky: 7
Registrován: 13 years ago

Příspěvekod xyz007 » 13 years ago

S tim Mikrotikem mate na mysli neco takoveho http://www.youtube.com/watch?v=rBDJ24VQfQw ?

Tak jsem zacal zkouset modul exec.

Kód: Vybrat vše

# cat /etc/freeradius/modules/exec
exec mujProgram {
         wait = yes
            #Wait for the program to finish
         program = "/etc/freeradius/run.sh %{User-Name}"
         input_pairs = reply
            #attributes from the reply
         shell_escape = yes
         output_pairs = reply
}

Do /etc/freeradius/sites-enabled/default jsem pridal:

Kód: Vybrat vše

# cat /etc/freeradius/sites-enabled/default
post-auth {
   #...
   mujProgram
   #...
}


Do skriptu /etc/freeradius/run.sh jsem zkusil dat:

Kód: Vybrat vše

#!/bin/sh

echo `date --rfc-3339=seconds` "-" $1 >> /etc/freeradius/run.log

return 0
  #  = 0 : ok        the module succeeded
  #  = 1 : reject    the module rejected the user

Kdyz vracim return 0, tak klient dostane Access-Accept a pri return 1 dostane Access-Reject.
Po pripojeni klienta v souboru run.log vidim:

Kód: Vybrat vše

# cat /etc/freeradius/run.log
2012-05-04 21:55:07+02:00 - jedna

To vse funguje.
Ted ale potrebuji nejak zjistit, jakou IP adresu klient dostal. Je nejaka moznost, jak by freeradius zjistil uzivatelovu MAC adresu? Musi to prece nejak jit, kdyz se podle ni da overovat. Tu klientovu MAC adresu potrebuju predat jako dalsi parametr svemu skriptu a pak si z dhcp zjistim vypujcenou IP:

Kód: Vybrat vše

# cat /var/lib/dhcp/dhcpd.leases
lease 192.168.10.10 {
  starts 5 2012/05/04 19:38:36;
  ends 5 2012/05/04 20:38:36;
  cltt 5 2012/05/04 19:38:36;
  binding state active;
  next binding state free;
  hardware ethernet 12:34:56:78:9a:bc;
  client-hostname "martin";
}
#...

a pak uz si sputim vlastni iptables pravidla a ves ostatni co potrebuji.

Jak se da zjistit MAC adresa?
0 x

Uživatelský avatar
zdenek.svarc
Administrator
Příspěvky: 1635
Registrován: 20 years ago
antispam: Ano

Příspěvekod zdenek.svarc » 13 years ago

>S tim Mikrotikem mate na mysli neco takoveho http://www.youtube.com/watch?v=rBDJ24VQfQw ?
To ani ne. Na tom videu je prezentovaný Hotspot, což je sice taky přístupová služba, ale na bázi kombinace DHCP + Captive portal. Neprojížděl jsem to video celé, ale tuším, že na tom samém rozhraní směrem ke klientům mají zapnutý zároveň i PPPoE interface. To není nic proti ničemu. Obě přístupové služby můžou fungovat na jedné L2 vrstvě.

> Jak se da zjistit MAC adresa?
Zpravidla je to Calling-Station-Id v Access-Requestu, který přichází z NASu na Radius. Kompletní Acces-Request zobrazí Freeradius v debug modu (-X).
0 x

xyz007
Příspěvky: 7
Registrován: 13 years ago

Příspěvekod xyz007 » 13 years ago

Mate pravdu Calling-Station-Id vraci MAC adresu. Ale pouze v sekci accounting, v sekci post-auth uz nic nevraci.

Takze kdyz dam:

Kód: Vybrat vše

accounting {
mujProgram
...

najdu v souboru run.log nasledujici obsah:

Kód: Vybrat vše

2012-05-05 00:01:36+02:00 - dva - MA-C0-KL-IE-NT-A0


Vystup z freeradius -X :

Kód: Vybrat vše

rad_recv: Access-Request packet from host 127.0.0.1 port 52948, id=9, length=234
   User-Name = "dva"
   NAS-IP-Address = 127.0.0.1
   NAS-Port = 1
   Called-Station-Id = "AB-CD-EF-12-34-56:TEST"
   Calling-Station-Id = "MA-C0-KL-IE-NT-A0"
   Framed-MTU = 1400
   NAS-Port-Type = Wireless-802.11
   Connect-Info = "CONNECT 54Mbps 802.11g"
   EAP-Message = 0x0270005019001703010020b074486d67823afad15424b659c6c5f6d5a7801faeefe9611f00dd462a62735f1703010020fdb23d336d9246229acc830672c5d35a2df24c907d8848290fda90e8b0485322
   State = 0x80cfe18688bff86eeab8a9d059155564
   Message-Authenticator = 0x6afec576228207235521dcc96e6ff2d4

...

++[sql] returns ok
++[exec] returns noop
[mujProgram]    expand: %{User-Name} -> dva
[mujProgram]    expand: %{Calling-Station-Id} -> MA-C0-KL-IE-NT-A0
Exec-Program output:
Exec-Program: returned: 0
++[mujProgram] returns ok
Sending Access-Accept of id 9 to 127.0.0.1 port 52948
   MS-MPPE-Recv-Key = 0xe20a0904b5abc0354a4d466c1f2ff878603ed09953a6cfbe25d0c4619436eaea
   MS-MPPE-Send-Key = 0x2378b9d47f268aa02a8ad25d3716dbc855a608e26964e09cbc04bdefd6c9683a
   EAP-Message = 0x03700004
   Message-Authenticator = 0x00000000000000000000000000000000
   User-Name = "dva"
Finished request 9.
Going to the next request
Waking up in 4.4 seconds.
Cleaning up request 0 ID 0 with timestamp +4


Ted uz jen poresit vyhledavani v dhcpd.leases a par dalsich detailu a bude to :-)

Dekuji za pomoc.
0 x