Недавно, руководство поставило задачу - организовать сервер доступа. Выделили для этого дела Cisco 2651.
В результате получился nas с базой пользователей, ip (фейковых и реальных) в MySQL + rate-limits на виртуальных интерфейсах.
Итак, поэтапно:
I ) Инсталяция Freeradius 1.17
Код: Выделить всё
# cd /usr/ports/net/freeradius
# make config
[ ] KERBEROS With Kerberos support
[ ] HEIMDAL With Heimdal Kerberos support
[ ] LDAP With LDAP database support
[X] MYSQL With MySQL database support
[ ] PGSQL With PostgreSQL database support
[ ] FIREBIRD With Firebird database support (EXPERIMENTAL)
[ ] SNMP With SNMP support
[ ] EDIR With Novell eDirectory support
[ ] NOPERL Do not require perl (use only if necessary)
[ ] EXPERIMENTAL Build experimental modules
# make; make install clean
Код: Выделить всё
# cd /usr/local/etc/raddb
Снимаем комменты
Код: Выделить всё
1) # See "Authorization Queries" in sql.conf
sql
2) sql_log {
path = ${radacctdir}/sql-relay
acct_table = "radacct"
postauth_table = "radpostauth"
Start = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
AcctSessionTime, AcctTerminateCause) VALUES \
('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
'%{Framed-IP-Address}', '%S', '0', '0', '');"
Stop = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
AcctSessionTime, AcctTerminateCause) VALUES \
('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
'%{Framed-IP-Address}', '0', '%S', '%{Acct-Session-Time}', \
'%{Acct-Terminate-Cause}');"
Alive = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
AcctSessionTime, AcctTerminateCause) VALUES \
('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
'%{Framed-IP-Address}', '0', '0', '%{Acct-Session-Time}','');"
Post-Auth = "INSERT INTO ${postauth_table} (id, user, pass, reply, \
date) VALUES \
('','%{User-Name}', '%{User-Password:-Chap-Password}', \
'%{reply:Packet-Type}', '%S');"
}
3) # Log traffic to an SQL database.
#
# See "Accounting queries" in sql.conf
#
sql
#
# Instead of sending the query to the SQL server,
# write it into a log file.
#
sql_log
4) session {
radutmp
#
# See "Simultaneous Use Checking Querie" in sql.conf
sql
}
5) # See "Authentication Logging Queries" in sql.conf
sql
# Instead of sending the query to the SQL server,
# write it into a log file.
#
sql_log
Комментируем files (по желанию)
# Read the 'users' file
# files
clients.conf
Указываем наш Cisco NAS:
Код: Выделить всё
client 192.168.0.254 {
secret = abcd
shortname = NAS
nastype = cisco
require_message_authenticator = yes
}
Предполагается, что MySQL установлено, посему пропишем инфу о будущей базе и пользователе базы.
Код: Выделить всё
sql {
# Database type
# Current supported are: rlm_sql_mysql, rlm_sql_postgresql,
# rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds
driver = "rlm_sql_mysql"
# Connect info
server = "localhost"
login = "yourlogin"
password = "yourpassword"
# Database table configuration
radius_db = "radius"
}
Создадим пользователя в базе:
Код: Выделить всё
# mysql -u root -p
mysql> CREATE DATABASE IF NOT EXISTS radius;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE,
-> CREATE, DROP, INDEX, ALTER on `yourlogin`.* to
-> yourlogin@localhost IDENTIFIED BY 'yourlogin';
mysql> quit
Код: Выделить всё
# cd /usr/ports/net/freeradius
# make extract
# cd work/freeradius-1.1.7/doc/examples/
# mysql -u root -p radius < mysql.sql
II ) Также было организована "нарезка" канала пользователям, посредством передачи AV пар. (в dictionary надо прописать поддержку)
Код: Выделить всё
mysql> INSERT INTO radgroupreply (id, GroupName, Attribute, op, Value) VALUES (NULL, 'pppoe', 'Framed-Protocol', '=', 'PPP');
mysql> INSERT INTO radgroupreply (id, GroupName, Attribute, op, Value) VALUES (NULL, 'pppoe', 'Service-Type', '=', 'Framed-User')
mysql> INSERT INTO radgroupreply (id, GroupName, Attribute, op, Value) VALUES (NULL, 'pppoe', 'Cisco-Avpair', '=', 'interface-config#1=rate-limit output 64000 12200 24400 conform-action continue exceed-action drop')
mysql> INSERT INTO radgroupreply (id, GroupName, Attribute, op, Value) VALUES (NULL, 'pppoe', 'Cisco-Avpair', '+=', 'interface-config#2=rate-limit input 64000 12200 24400 conform-action continue exceed-action drop')
mysql> INSERT INTO usergroup (UserName, GroupName, priority) VALUES ('yourname', 'pppoe', 1)
mysql> INSERT INTO radreply (id, UserName, Attribute, op, Value) VALUES (NULL, 'yourname', 'Framed-IP-Address', '=', '10.10.15.6')
mysql> INSERT INTO radcheck (id, UserName, Attribute, op, Value) VALUES (NULL, 'yourname', 'Password', '==', 'yourpass')
INSERT INTO radgroupcheck (id, GroupName, Attribute, op, Value) VALUES (NULL, 'pppoe', 'Simultaneous-Use', ':=', '1')
Стоит также обратить внимание на то, что Cisco-Avpair состоит из показателей normal burst и maximum burst, которые (по дефолту) просчитывают по таким формулам:
normal burst - 1024000/8*1.5
maximum burst - (1024000/8*1.5)*2
III ) Конфиг cisco 2651
Код: Выделить всё
!
! Last configuration change at 10:21:41 UTC Fri Feb 22 2008
! NVRAM config last updated at 10:11:17 UTC Fri Feb 22 2008
!
version 12.2
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname pppoe-tor
!
aaa new-model
aaa authentication login default local
aaa authentication ppp default group radius local
aaa authorization exec default local
aaa authorization network default group radius group radius
aaa accounting delay-start
aaa accounting update periodic 5
aaa accounting network default start-stop group radius
enable secret ***************
!
username tfwr password 0 *******
clock timezone Kiev 2
ip subnet-zero
no ip source-route
no ip rcmd domain-lookup
ip rcmd rcp-enable
ip rcmd rsh-enable
!
!
ip domain-name pppoe.domain.com.ua
ip name-server ***.**.*.***
ip name-server 172.18.15.2
!
ip audit notify log
ip audit po max-events 100
virtual-profile virtual-template 1
vpdn enable
!
vpdn-group 1
accept-dialin
protocol pppoe
virtual-template 1
!
!
!
call rsvp-sync
!
!
!
interface Loopback1
ip address 1.1.1.1 255.255.255.255
!
interface FastEthernet0/0
no ip address
duplex auto
speed auto
!
interface FastEthernet0/0.445
encapsulation dot1Q 445
ip address 192.168.0.254 255.255.255.0
ip nat inside
pppoe enable
!
interface FastEthernet0/0.455
encapsulation dot1Q 455
ip address 172.18.53.242 255.255.255.0
ip nat inside
pppoe enable
!
interface FastEthernet0/0.15
encapsulation dot1Q 15
ip address 195.9*.**.*** 255.255.255.224
ip nat outside
!
interface Virtual-Template1
ip unnumbered Loopback1
ip nat inside
ppp authentication chap callin
!
ip nat inside source list nat interface FastEthernet0/0.15 overload
ip classless
ip route 0.0.0.0 0.0.0.0 195.9*.**.***
ip http server
!
!
ip access-list extended nat
permit ip 10.10.15.0 0.0.31.255 any
ip radius source-interface FastEthernet0/0.445
!
radius-server configure-nas
radius-server host 192.168.0.250 auth-port 1812 acct-port 1813 key abcd
radius-server attribute 6 on-for-login-auth
radius-server attribute 8 include-in-access-req
radius-server attribute 32 include-in-access-req
radius-server attribute 44 include-in-access-req
radius-server attribute 44 extend-with-addr
radius-server attribute nas-port format d
radius-server vsa send authentication
!
line con 0
line aux 0
!
line vty 5 15
transport preferred ssh
transport input ssh
!
end
Код: Выделить всё
interface Virtual-Template1
ppp encrypt mppe 128 required
ppp authentication chap
vpdn-group 1
accept-dialin
Тут protocol pppoe меняем на pptp. На интерфейсе убираем pppoe enable.
Отладка
Просмотр сессий
Код: Выделить всё
sh vpdn session
Код: Выделить всё
clear vpdn tunnel [pppoe, pptp]
Код: Выделить всё
debug aaa authentication
debug aaa authorization
debug vpdn error
debug vpdn packet
Запуск радиуса с параметрами:
Код: Выделить всё
radiusd -X
radiusd -XXX
Вроде всё. Если кому пригодилось - отписывайте.