пятница, 9 сентября 2011 г.

Радиус-обманка для тестирования ISG


При тестировании одной биллинговой системы (какой - не скажу - не хочу рекламировать откровенно недоделанный продукт) долго не могли определить - кто виноват в запуске дублирующихся сессий ISG - биллинг или Cisco. Вот и возникла идея создать некую "дурилку" - радиус-сервер, отдающий фиксированные ответы, выглядящие с точки зрения ISG как правильные. Создавалось это чудовище за полчаса из свежеустановленного freeradius-1.1.3 (платформа - CentOS 5.6).
Для начала добавляем нашу циску и локалхост (для упрощения тестирования) в /etc/raddb/clients.conf:



client 10.1.60.4 {
secret = mysecr
shortname = tstnas
nastype = cisco
}
client 127.0.0.1 {
        secret = mysecr
        shortname = localhost
        nastype = other
}

А сами ответы помещаем в /etc/raddb/users:

# сперва - пользователи
usr1145 Password == "d038bec6", Service-Type == Framed-User
        Session-Timeout = 86400,
        Framed-Protocol = PPP,
        Framed-IP-Address = 10.1.70.101,
        Framed-IP-Netmask = 255.255.255.255,
        Acct-Interim-Interval = 300,
        Cisco-AVPair = "accounting-list=BILL",
        Filter-Id = "Consum.out",
        Cisco-Account-Info = "ALOCAL",
        Cisco-Account-Info += "NLOCAL",
        Cisco-Account-Info += "AWORLDIN",
        Cisco-Account-Info += "NWORLDIN",
        Cisco-Account-Info += "AWORLDOUT",
        Cisco-Account-Info += "NWORLDOUT"


usr1146 Password == "f577acec", Service-Type == Framed-User
        Session-Timeout = 86400,
        Framed-Protocol = PPP,
        Framed-IP-Address = 10.1.70.102,
        Framed-IP-Netmask = 255.255.255.255,
        Acct-Interim-Interval = 300,
        Cisco-AVPair = "accounting-list=BILL",
        Filter-Id = "Consum.out",
        Cisco-Account-Info = "ALOCAL",
        Cisco-Account-Info += "NLOCAL",
        Cisco-Account-Info += "AWORLDIN",
        Cisco-Account-Info += "NWORLDIN",
        Cisco-Account-Info += "AWORLDOUT",
        Cisco-Account-Info += "NWORLDOUT"  


# потом - реавторизация препейд-сервиса
usr1145 Password == "cisco", Service-Type == Framed-User, Cisco-Service-Info == "NWORLDIN"
        Cisco-Control-Info = "QV1234567895",
        Idle-Timeout = 90


usr1146 Password == "cisco", Service-Type == Framed-User, Cisco-Service-Info == "NWORLDIN"
        Cisco-Control-Info = "QV1234567896",
        Idle-Timeout = 90


# и наконец - сами сервисы
WORLDIN Password == "cisco", Service-Type == Dialout-Framed-User
        Cisco-AVPair = "ip:traffic-class=output access-group name world-out priority 40",
        Cisco-AVPair += "ip:traffic-class=in default drop",
        Cisco-AVPair += "ip:traffic-class=out default drop",
        Cisco-Service-Info = "IALL-INET-IN",
        Cisco-Service-Info += "MC",
        Cisco-Service-Info += "TP",
        Cisco-AVPair += "prepaid-config=BILL",
        Acct-Interim-Interval = 300


WORLDOUT Password == "cisco", Service-Type == Dialout-Framed-User
        Cisco-AVPair = "ip:traffic-class=input access-group name world-in priority 30",
        Cisco-AVPair += "accounting-list=BILL",
        Cisco-AVPair += "ip:traffic-class=in default drop",
        Cisco-AVPair += "ip:traffic-class=out default drop",
        Cisco-Service-Info = "IALL-INET-OUT",
        Cisco-Service-Info += "MC",
        Cisco-Service-Info += "TP",
        Acct-Interim-Interval = 1800


LOCAL   Password == "cisco", Service-Type == Dialout-Framed-User
        Cisco-AVPair = "ip:traffic-class=input access-group name local-in priority 20",
        Cisco-AVPair += "ip:traffic-class=output access-group name local-out priority 20",
        Cisco-AVPair += "accounting-list=BILL",
        Cisco-AVPair += "ip:traffic-class=in default drop",
        Cisco-AVPair += "ip:traffic-class=out default drop",
        Cisco-Service-Info = "ILOCAL-NET",
        Cisco-Service-Info += "MC",
        Cisco-Service-Info += "TP",
        Acct-Interim-Interval = 1800

И теперь можно, запустив на нашем импровизированном радиус-сервере:
cos56# tcpdump -i eth0 -n -vvvv -s 1204 port 1812 or port 1813
или на циске:
c7200# terminal monitor
c7200# debug radius auth
c7200# debug radius acc
(а еще лучше - для полноты картины - и то, и другое) наблюдать за поднимающимися сессиями. Думаю, тот, кто дочитал до этого места, не нуждается в рассказе о том, как запускать pppd (8).