የአውታረ መረብ ቅንብሮች ከ FreeRadius በ DHCP በኩል

የአውታረ መረብ ቅንብሮች ከ FreeRadius በ DHCP በኩል
የአይፒ አድራሻዎችን ለተመዝጋቢዎች መስጠትን ለማቀናጀት ሥራው ደርሷል። የችግሩ ሁኔታዎች:

  • ለፍቃድ የተለየ አገልጋይ አንሰጥህም - ታደርጋለህ 😉
  • ተመዝጋቢዎች የአውታረ መረብ ቅንብሮችን በDHCP በኩል መቀበል አለባቸው
  • አውታረ መረቡ የተለያዩ ነው። ይህ የPON መሳሪያዎችን እና መደበኛ መቀየሪያዎችን ከተዋቀረ አማራጭ 82 እና ዋይፋይ ቤዝ ጋር ነጥብ ቦታዎችን ያካትታል።
  • ውሂቡ አይፒን ለማውጣት በማናቸውም ሁኔታዎች ውስጥ የማይወድቅ ከሆነ ከ"እንግዳ" አውታረ መረብ አይፒን መስጠት አለብዎት

በመልካም ጎኑ፡ አሁንም በፍሪቢኤስዲ ላይ “መስራት” የሚችል አገልጋይ አለ፣ ግን “በሩቅ” ነው፣) “በዚህ አውታረ መረብ ላይ ትክክል” አይደለም።

ሚክሮቲክ የሚባል ድንቅ መሳሪያም አለ። የአጠቃላይ የአውታረ መረብ ዲያግራም ይህን ይመስላል።

የአውታረ መረብ ቅንብሮች ከ FreeRadius በ DHCP በኩል

ከተወሰነ ሀሳብ በኋላ፣ ለደንበኝነት ተመዝጋቢዎች የአውታረ መረብ ቅንብሮችን ለመስጠት FreeRadius ን ለመጠቀም ተወስኗል። በመርህ ደረጃ፣ መርሃግብሩ የተለመደ ነው፡ የDHCP አገልጋይን በማይክሮቲክ ላይ እና በሱ ላይ ራዲየስ ደንበኛን እናነቃለን። የዲኤችሲፒ አገልጋይ -> ራዲየስ ደንበኛ -> ራዲየስ አገልጋይ ግንኙነትን እናዋቅረዋለን።

አስቸጋሪ አይመስልም። ግን! ዲያቢሎስ በዝርዝሮች ውስጥ አለ። ይኸውም፡-

  • ይህንን እቅድ በመጠቀም PON OLT ሲፈቀድ፣ ጥያቄ ወደ ፍሪራዲየስ ከዋናው ማክ አድራሻ ጋር እኩል የሆነ የተጠቃሚ ስም፣ ከ MAC PON Onu ጋር እኩል የሆነ ወኪል-ሰርኩይት-አይድ እና ባዶ የይለፍ ቃል ይላካል።
  • ፍሪራዲየስ ከአማራጭ 82 ማብሪያ / ማጥፊያዎች ሲፈቀድ ከተመዝጋቢው መሣሪያ MAC ጋር እኩል የሆነ ባዶ የተጠቃሚ ስም ጥያቄ ይቀበላል እና ተጨማሪ ባህሪዎችን ወኪል-ሰርኩይት-መታወቂያ እና ወኪል - የርቀት መታወቂያ ፣ በቅደም ተከተል ፣ እንደገና MAC የማስተላለፊያ ማብሪያ / ማጥፊያ እና ተመዝጋቢው የተገናኘበት ወደብ.
  • አንዳንድ የWiFI ነጥብ ያላቸው ተመዝጋቢዎች በPAP-CHAP ፕሮቶኮሎች ተፈቅደዋል
  • አንዳንድ የWIFI ነጥቦች ተመዝጋቢዎች ከWIFI ነጥብ MAC አድራሻ ጋር እኩል በሆነ የተጠቃሚ ስም ተፈቅዶላቸዋል፣ ያለይለፍ ቃል።

ታሪካዊ ዳራ፡ በDHCP ውስጥ "አማራጭ 82" ምንድን ነው?

እነዚህ ተጨማሪ መረጃዎችን ለማስተላለፍ የሚያስችልዎ ለ DHCP ፕሮቶኮል ተጨማሪ አማራጮች ናቸው፣ ለምሳሌ በኤጀንት-ሰርኩይት-መታወቂያ እና ወኪል-ርቀት መታወቂያ መስኮች። በተለምዶ የማስተላለፊያ ማብሪያ / ማጥፊያውን የማክ አድራሻ እና ተመዝጋቢው የተገናኘበትን ወደብ ለማስተላለፍ ያገለግላል። በ PON መሳሪያዎች ወይም በ WIFI የመሠረት ጣቢያዎች፣ የኤጀንት-ሰርኩይት-መታወቂያ መስክ ጠቃሚ መረጃ አልያዘም (የተመዝጋቢ ወደብ የለም)። በዚህ ጉዳይ ላይ የ DHCP አጠቃላይ እቅድ እንደሚከተለው ነው-

የአውታረ መረብ ቅንብሮች ከ FreeRadius በ DHCP በኩል

ደረጃ በደረጃ ይህ እቅድ እንደሚከተለው ይሰራል.

  1. የተጠቃሚው መሳሪያ የኔትወርክ መቼቶችን ለማግኘት የDHCP ስርጭት ጥያቄ ያቀርባል
  2. የደንበኝነት ተመዝጋቢው መሳሪያ በቀጥታ የተገናኘበት መሳሪያ (ለምሳሌ ማብሪያ /ዋይፋይ ወይም ፖኤን ቤዝ ጣብያ) ይህንን ፓኬት "ያቋርጣል" እና ይለውጠዋል፣ ተጨማሪ አማራጮችን አማራጭ 82 እና የሬሌይ ወኪል አይፒ አድራሻን በማስተዋወቅ እና የበለጠ ያስተላልፋል። አውታረ መረቡ.
  3. የDHCP አገልጋይ ጥያቄውን ተቀብሎ ምላሽ ያመነጫል እና ወደ ማስተላለፊያ መሳሪያው ይልካል
  4. የማስተላለፊያ መሳሪያው የምላሽ ፓኬጁን ወደ ተመዝጋቢው መሳሪያ ያስተላልፋል

በእርግጥ, ሁሉም ነገር በቀላሉ አይሰራም, የአውታረ መረብ መሳሪያዎችን በዚህ መሰረት ማዋቀር ያስፈልግዎታል.

FreeRadius በመጫን ላይ

በእርግጥ ይህ በ FreeRadius ውቅር ቅንጅቶች ሊሳካ ይችላል, ግን አስቸጋሪ እና ግልጽ ያልሆነ ነው ... በተለይ ከ N ወራት በኋላ ወደዚያ ሲሄዱ እና "ሁሉም ነገር ይሰራል." ስለዚህ የራሳችንን የፈቃድ ሞጁል ለ FreeRadius በ Python ለመጻፍ ወስነናል። የፈቃድ ውሂብን ከ MySQL ዳታቤዝ እንወስዳለን። አወቃቀሩን መግለጽ ምንም ፋይዳ የለውም፤ ለማንኛውም ሁሉም ሰው “ለራሱ” ያደርገዋል። በተለይም ለ FreeRadius ከ sql ሞጁል ጋር የቀረበውን መዋቅር ወሰድኩ እና ከመግቢያ-ይለፍ ቃል በተጨማሪ ለእያንዳንዱ ተመዝጋቢ የማክ እና የወደብ መስክ በመጨመር ትንሽ ቀየርኩት።

ስለዚህ, መጀመሪያ, FreeRadius ን ይጫኑ:

cd /usr/ports/net/freeradius3
make config
make
install clean

በቅንብሮች ውስጥ ለመጫን ይምረጡ፡-

የአውታረ መረብ ቅንብሮች ከ FreeRadius በ DHCP በኩል

ወደ python ሞጁል ሲምሊንክ እንሰራለን (ማለትም “አብራው”)፦

ln -s /usr/local/etc/raddb/mods-available/python /usr/local/etc/raddb/mods-enabled

ለ python ተጨማሪ ሞጁል እንጫን፡-

pip install mysql-connector

በ python ሞዱል ቅንጅቶች ውስጥ ለ FreeRadius ፣ በ python_path ተለዋዋጭ ውስጥ የሞዱል መፈለጊያ መንገዶችን መግለጽ ያስፈልግዎታል። ለምሳሌ ይህ አለኝ፡-

python_path="/usr/local/etc/raddb/mods-config/python:/usr/local/lib/python2.7:/usr/local/lib/python27.zip:/usr/local/lib/python2.7:/usr/local/lib/python2.7/plat-freebsd12:/usr/local/lib/python2.7/lib-tk:/usr/local/lib/python2.7/lib-old:/usr/local/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/site-packages"

የፓይቶን አስተርጓሚውን በማስጀመር እና ትእዛዞቹን በማስገባት መንገዶቹን ማወቅ ይችላሉ-

root@phaeton:/usr/local/etc/raddb/mods-enabled# python
Python 2.7.15 (default, Dec  8 2018, 01:22:25) 
[GCC 4.2.1 Compatible FreeBSD Clang 6.0.1 (tags/RELEASE_601/final 335540)] on freebsd12
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-freebsd12', '/usr/local/lib/python2.7/lib-tk', '/usr/local/lib/python2.7/lib-old', '/usr/local/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages']
>

ይህን እርምጃ ካልወሰድክ፣ በpython የተፃፉ እና በ FreeRadius የተጀመሩ ስክሪፕቶች በማስመጣት ውስጥ የተዘረዘሩትን ሞጁሎች አያገኙም። በተጨማሪም, በሞጁል ቅንጅቶች ውስጥ ለመደወል ፍቃድ እና የሂሳብ አያያዝ ተግባራትን አለመስማማት ያስፈልግዎታል. ለምሳሌ, ይህ ሞጁል ይህን ይመስላል:

python {
    python_path="/usr/local/etc/raddb/mods-config/python:/usr/local/lib/python2.7:/usr/local/lib/python2.7/site-packages:/usr/local/lib/python27.zip:/usr/local/lib/python2.7:/usr/local/lib/python2.7/plat-freebsd12:/usr/local/lib/python2.7/lib-tk:/usr/local/lib/python2.7/lib-old:/usr/local/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/site-packages"
    module = work
    mod_instantiate = ${.module}
    mod_detach = ${.module}

    mod_authorize = ${.module}
    func_authorize = authorize

    mod_authenticate = ${.module}
    func_authenticate = authenticate

    mod_preacct = ${.module}
    func_preacct = preacct

    mod_accounting = ${.module}
    func_accounting = accounting

    mod_checksimul = ${.module}
    mod_pre_proxy = ${.module}
    mod_post_proxy = ${.module}
    mod_post_auth = ${.module}
    mod_recv_coa = ${.module}
    mod_send_coa = ${.module}

}

የ work.py ስክሪፕት (እና ሁሉም) በ /usr/local/etc/raddb/mods-config/python ውስጥ መቀመጥ አለባቸው በአጠቃላይ ሶስት ስክሪፕቶች አሉኝ።

ስራ.py:

#!/usr/local/bin/python
# coding=utf-8
import radiusd
import func
import sys
from pprint import pprint
mysql_host="localhost"
mysql_username="укацук"
mysql_password="ыукаыукаыук"
mysql_base="ыукаыкуаыу"
def instantiate(p):
print ("*** instantiate ***")
print (p)
# return 0 for success or -1 for failure
def authenticate(p):
print ("*** Аутенфикация!!***")
print (p)
def authorize(p):
radiusd.radlog(radiusd.L_INFO, '*** radlog call in authorize ***')    
conn=func.GetConnectionMysql(mysql_host, mysql_username, mysql_password, mysql_base);
param=func.ConvertArrayToNames(p);
pprint(param)
print ("*** Авторизация ***")
reply = ()
conf = ()
cnt=0
username="";mac="";
# сначала проверяем "как положено", по связке логин/пароль
if ("User-Name" in param) and ("User-Password" in param) :
print ("Вариант авторизации (1): есть логин-пароль")
pprint(param["User-Name"])
pprint(param["User-Password"])
pprint(conn)
print(sys.version_info)
print (radiusd.config)
sql="select radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where radcheck.username=%s and radcheck.value=%s"
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql,[param["User-Name"], param["User-Password"]]);
row = cursor.fetchone()	
while row is not None:    
cnt=cnt+1
username=row["username"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
# вариант, что User-Name - это МАС адрес БС,пароля и порта нет                
if ("User-Name" in param)  and ("User-Password" in param) and (cnt==0):
if param["User-Password"] =='':
if ":" in param["User-Name"]:
pprint(param["User-Name"])            
print ("Вариант авторизации (2): User-Name - это MAC адрес базовой станции, порта и пароля нет")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where REPLACE(radcheck.mac,':','') = REPLACE(REPLACE('"+str(param["User-Name"])+"','0x',''),':','') and radcheck.sw_port=''"
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:                  
cnt=cnt+1
username=row["username"]
mac=param["User-Name"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
if ("Agent-Remote-Id" in param)  and ("User-Password" in param) and (cnt==0):
if param["User-Password"] =='':
pprint(param["Agent-Remote-Id"])            
print ("Вариант авторизации (2.5): Agent-Remote-Id - это MAC адрес PON оборудования")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where REPLACE(radcheck.mac,':','') = REPLACE(REPLACE('"+str(param["Agent-Remote-Id"])+"','0x',''),':','') and radcheck.sw_port=''"
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:                  
cnt=cnt+1
username=row["username"]
mac=param["User-Name"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
#Вариант, что Agent-Remote-Id - это МАС адрес БС,пароля и порта нет и предыдущие варианты поиска IP результата не дали                
if ("Agent-Remote-Id" in param)  and ("User-Password" not in param) and (cnt==0):
pprint(param["Agent-Remote-Id"])            
print ("Вариант авторизации (3): Agent-Remote-Id - МАС базовой станции/пон. Порта в биллинге нет")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where REPLACE(radcheck.mac,':','') = REPLACE(REPLACE('"+str(param["Agent-Remote-Id"])+"','0x',''),':','') and radcheck.sw_port=''"
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:    
cnt=cnt+1
mac=param["Agent-Remote-Id"]
username=row["username"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
#Вариант, что предыдущие попытки результата не дали, но есть Agent-Remote-Id и Agent-Circuit-Id
if ("Agent-Remote-Id" in param)  and ("Agent-Circuit-Id" in param) and (cnt==0):
pprint(param["Agent-Remote-Id"])            
pprint(param["Agent-Circuit-Id"])            
print ("Вариант авторизации (4): авторизация по Agent-Remote-Id и Agent-Circuit-Id, в биллинге есть порт/мак")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where upper(radcheck.sw_mac)=upper(REPLACE('"+str(param["Agent-Remote-Id"])+"','0x','')) and upper(radcheck.sw_port)=upper(RIGHT('"+str(param["Agent-Circuit-Id"])+"',2)) and radcheck.sw_port<>''"
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:    
cnt=cnt+1
mac=param["Agent-Remote-Id"]
username=row["username"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
# если так до сих пор IP не получен, то выдаю иего из гостевой сети..
if cnt==0:      
print ("Ни один из вариантов авторизации не сработал, получаю IP из гостевой сети..")
ip=func.GetGuestNet(conn)      
if ip!="": 
cnt=cnt+1;
reply = reply+(("Framed-IP-Address",str(ip)), )
# если совсем всё плохо, то Reject
if cnt==0:
conf = ( ("Auth-Type", "Reject"), ) 
else:
#если авторизация успешная (есть такой абонент), то запишем историю авторизации
if username!="":
func.InsertToHistory(conn,username,mac, reply);
conf = ( ("Auth-Type", "Accept"), )             
pprint (reply)
conn=None;
return radiusd.RLM_MODULE_OK, reply, conf
def preacct(p):
print ("*** preacct ***")
print (p)
return radiusd.RLM_MODULE_OK
def accounting(p):
print ("*** Аккаунтинг ***")
radiusd.radlog(radiusd.L_INFO, '*** radlog call in accounting (0) ***')  
print (p)
conn=func.GetConnectionMysql(mysql_host, mysql_username, mysql_password, mysql_base);
param=func.ConvertArrayToNames(p);
pprint(param)  
print("Удалим старые сессии (более 20 минут нет аккаунтинга)");
sql="delete from radacct where TIMESTAMPDIFF(minute,acctupdatetime,now())>20"
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
conn.commit()
print("Обновим/добавим информацию о сессии")
if (("Acct-Unique-Session-Id" in param) and ("User-Name" in param) and ("Framed-IP-Address" in param)):
sql='insert into radacct (radacctid,acctuniqueid,username,framedipaddress,acctstarttime) values (null,"'+str(param['Acct-Unique-Session-Id'])+'","'+str(param['User-Name'])+'","'+str(param['Framed-IP-Address'])+'",now()) ON DUPLICATE KEY update acctupdatetime=now()'
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql)
conn.commit()
conn=None;
return radiusd.RLM_MODULE_OK
def pre_proxy(p):
print ("*** pre_proxy ***")
print (p)
return radiusd.RLM_MODULE_OK
def post_proxy(p):
print ("*** post_proxy ***")
print (p)
return radiusd.RLM_MODULE_OK
def post_auth(p):
print ("*** post_auth ***")
print (p)
return radiusd.RLM_MODULE_OK
def recv_coa(p):
print ("*** recv_coa ***")
print (p)
return radiusd.RLM_MODULE_OK
def send_coa(p):
print ("*** send_coa ***")
print (p)
return radiusd.RLM_MODULE_OK
def detach():
print ("*** На этом всё детишечки ***")
return radiusd.RLM_MODULE_OK

func.py:

#!/usr/bin/python2.7
# coding=utf-8
import mysql.connector
from mysql.connector import Error
# Функция возвращает соединение с MySQL
def GetConnectionMysql(mysql_host, mysql_username, mysql_password, mysql_base):    
try:
conn = mysql.connector.connect(host=mysql_host,database=mysql_base,user=mysql_username,password=mysql_password)
if conn.is_connected(): print('---cоединение с БД '+mysql_base+' установлено')
except Error as e:
print("Ошибка: ",e);
exit(1);       
return conn
def ConvertArrayToNames(p):
mass={};
for z in p:
mass[z[0]]=z[1]
return mass
# Функция записывает историю соединения по известным данным
def InsertToHistory(conn,username,mac, reply):
print("--записываю для истории")
repl=ConvertArrayToNames(reply)
if "Framed-IP-Address" in repl:
sql='insert into radpostauth (username,reply,authdate,ip,mac,session_id,comment) values ("'+username+'","Access-Accept",now(),"'+str(repl["Framed-IP-Address"])+'","'+str(mac)+'","","")'
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)          
cursor.execute(sql);
conn.commit()
# Функция выдает последний по дате выдачи IP адрес из гостевой сети        
def GetGuestNet(conn):
ip="";id=0
sql="select * from guestnet order by dt limit 1"
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)          
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:    
ip=row["ip"]
id=row["id"]
row = cursor.fetchone()	          
if id>0:
sql="update guestnet set dt=now() where id="+str(id)
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)          
cursor.execute(sql);
conn.commit()
return ip         

radiusd.py:

#!/usr/bin/python2.7
# coding=utf-8
# from modules.h
RLM_MODULE_REJECT = 0
RLM_MODULE_FAIL = 1
RLM_MODULE_OK = 2
RLM_MODULE_HANDLED = 3
RLM_MODULE_INVALID = 4
RLM_MODULE_USERLOCK = 5
RLM_MODULE_NOTFOUND = 6
RLM_MODULE_NOOP = 7
RLM_MODULE_UPDATED = 8
RLM_MODULE_NUMCODES = 9
# from log.h
L_AUTH = 2
L_INFO = 3
L_ERR = 4
L_WARN = 5
L_PROXY = 6
L_ACCT = 7
L_DBG = 16
L_DBG_WARN = 17
L_DBG_ERR = 18
L_DBG_WARN_REQ = 19
L_DBG_ERR_REQ = 20
# log function
def radlog(level, msg):
import sys
sys.stdout.write(msg + 'n')
level = level

ከኮዱ እንደምታዩት የደንበኝነት ተመዝጋቢውን በሚታወቀው የደንበኝነት ተመዝጋቢው ማክ አድራሻዎች ወይም አማራጭ 82 ጥምር ሁሉንም ዘዴዎች በመጠቀም ለመለየት እየሞከርን ነው ፣ ይህ ካልሰራ ታዲያ ከ"እንግዳ" ጥቅም ላይ የዋለውን በጣም ጥንታዊውን የአይፒ አድራሻ እንሰጣለን ። ” ኔትወርክ። የቀረው ሁሉ በጣቢያዎች የነቃው አቃፊ ውስጥ ነባሪውን ስክሪፕት ማዋቀር ብቻ ነው፣ ስለዚህ ከ python ስክሪፕት አስፈላጊዎቹ ተግባራት በተሰየሙ ጊዜዎች እንዲወዛወዙ። በእውነቱ ፣ ፋይሉን ወደ ቅጹ ማምጣት በቂ ነው-

ነባሪ

server default {
listen {
type = auth
ipaddr = *
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipaddr = *
port = 0
type = acct
limit {
}
}
listen {
type = auth
port = 0
limit {
max_connections = 1600
lifetime = 0
idle_timeout = 30
}
}
listen {
ipv6addr = ::
port = 0
type = acct
limit {
}
}
authorize {
python
filter_username
preprocess
expiration
logintime
}
authenticate {
Auth-Type PAP {
pap
python
}
Auth-Type CHAP {
chap
python
}
Auth-Type MS-CHAP {
mschap
python
}
eap
}
preacct {
preprocess
acct_unique
suffix
files
}
accounting {
python
exec
attr_filter.accounting_response
}
session {
}
post-auth {
update {
&reply: += &session-state:
}
exec
remove_reply_message_if_eap
Post-Auth-Type REJECT {
attr_filter.access_reject
eap
remove_reply_message_if_eap
}
Post-Auth-Type Challenge {
}
}
pre-proxy {
}
post-proxy {
eap
}
}

እሱን ለማስኬድ እንሞክር እና ወደ የስህተት ምዝግብ ማስታወሻው ውስጥ ምን እንደሚመጣ እንመልከት፡-

/usr/local/etc/rc.d/radiusd debug

ሌላስ. FreeRadius ን ሲያቀናብሩ የራድክሊንት መገልገያውን በመጠቀም ሥራውን ለመፈተሽ ምቹ ነው። ለምሳሌ ፈቃድ፡-

echo "User-Name=4C:5E:0C:2E:7F:15,Agent-Remote-Id=0x9845623a8c98,Agent-Circuit-Id=0x00010006" | radclient -x  127.0.0.1:1812 auth testing123

ወይም መለያ፡-

echo "User-Name=4C:5E:0C:2E:7F:15,Agent-Remote-Id=0x00030f26054a,Agent-Circuit-Id=0x00010002" | radclient -x  127.0.0.1:1813 acct testing123

እንደዚህ አይነት እቅድ እና ስክሪፕቶች "ያለ ለውጦች" በ "ኢንዱስትሪ" ሚዛን መጠቀም ፈጽሞ የማይቻል መሆኑን ላስጠነቅቅዎ እፈልጋለሁ. ቢያንስ የሚታይ፡-

  • የ MAC አድራሻን "መጭበርበር" ይቻላል. ተመዝጋቢው የሌላ ሰውን MAC መመዝገብ በቂ ነው እና ችግሮችም ይኖራሉ
  • የእንግዳ ኔትወርኮችን የማውጣት አመክንዮ ከትችት በላይ ነው። ቼክ እንኳን የለም “ምናልባት ተመሳሳይ አይፒ አድራሻ ያላቸው ደንበኞች ሊኖሩ ይችላሉ?”

ይህ በእኔ ሁኔታ ውስጥ በተለይ ለመስራት የተነደፈ "የኩኪ-መቁረጥ መፍትሄ" ብቻ ነው, ምንም ተጨማሪ ነገር የለም. በጥብቅ አትፍረዱ 😉

ምንጭ: hab.com

አስተያየት ያክሉ