2013年6月6日 星期四

FreeRadius Debugging Mode除錯, 自訂PHP 抓參數值

設定FreeRadius 除錯,可能依auth 或 realm 多寡不同, 連結外部OpenLDAP, MySQL等等, 而增加錯誤率, 或造成一些非遇期的動作。以下幾常見除錯方式。

1. 使用radiusd -X
開起FreeRadius Debug , 直接輸出至螢幕或至檔案。
Debug 可以看到所有流程順序, 可以各模組執行狀態, 執行在那個SECTION。

# radiusd -X
# radiusd -X > debug.txt
# radiusd -X  |  tee  debug.txt
# radiusd -X  2>&1 |  tee  debug.txt



2. 使用radsniff -X, 存看連線動作及實際回應的資訊

#radsniff -X -p 1812
-p 1812 是Radius Listen Port
可以看到連線過AVP傳輸資料,
    Access-Request
    Access-Accept
    Accounting-Request
    Accounting-Response



3. 使用tcpdump

最通用的工具, 可以查到非常細項的參數, 值, ID, Code ID,
在查RFC's, 就可以很簡單的對應Attribute list, Packet Type
匯出至檔案 由wireshark 更方便

# tcpdump udp port 1812 -vv -ttttnn

 
 


4. 使用 PHP 抓參數或值
利用FreeRadius exec 模組, 呼叫外部程式, 做一個適合自己簡單除錯程式
sites-available/default 放在設定檔的適當位置, 可以確認是否被執行到及參數是否正確
又不會一大堆不必要的訊息

增加一個模組debugtest, 捕抓使用者名稱及裝置實體位置

#vim /etc/raddb/modules/exec

exec debugtest {
wait = yes
input_pairs = request
program = "/etc/raddb/debugtest.php %{request:User-Name} %{request:Calling-Station-Id}"
shell_escape = yes
output = none

編緝一個可執行PHP SCRIPT, 捕抓帶入的Radius AVP值

# vim /etc/raddb/debugtest.php

#!/usr/bin/php
<?php
$a='' ;
for ($i=1; $i<count($argv);$i++)
{
    $a=$a.$argv[$i].' ';
}
$now=date("Y-m-d H:i:s",time());
@error_log($now." ".$a."\n", 3, "/etc/raddb/debugtest.log");
?>

編緝設定檔,

#vim sites-available/default
preacct {
             ..
             debugtest   
}

啟用Radius ,放在所需的section, 就可觀查 debugtest.log
除了不用一直盯著它, 又不會有太多不必要的資訊,

Extreme XOS run pyton scripts

XOS run python scripts v15.7 or high 將交換器上的 IP & MAC 往syslog 丟, 簡單將IP資料保留下 ## 編緝Scripts # vi ip2syslog.py #!/usr/bin/python # ...