本文介绍我如何透过docker的ubuntu:21.04 image,极速创建Radius伺服器,
与Wifi的WPA2/EAP等相关运用。
先来看看我的试用结果吧:
GitHub放於此处下载:
https://github.com/DevinY/radius
原则上请依README.md进行即可,这里我会解做更详细的操作说明:
在开始前,首先我们需要有docker。
一、下载下来后,进入radius目录中,请透过docker-compose的build功能来创建image。
在目录不改变的情况下,会生成radius_radius的image。
docker-compose build --no-cache
如果您不想使用此image的名称,docker-compose.yml内的radius服务记得指定您自己build的image名称。二、生成自签证书,在radius目录中运行,会生成两个文件server.crt及server.key。
您是可以自行调整subj的内容的,我不想一天到晚改证书,这里设置了3650天,
另外在这里的密钥是没密码的,我想如果您需有有密码,容器启动后可到容器中去make,再拷出来用。
openssl req -x509 \
-subj '/C=TW/ST=Taiwan/L=Panchiao/CN=ccc.tc' \
-nodes -newkey rsa:2048 -keyout server.key -out server.crt -days 3650
如果到容器中make,您至少需改三个文件ca.cnf、client.cnf及server.cnf。目录为/etc/freeradius/3.0/certs
三、取得radius设置档,radius注解很多修改及观看不容易,在这里我提了一只bash可以把设置档拷出来。
并且移除掉所有的注解,在后面的radius_radius为image的名称。
./getconfig.sh radius_radius
换句语说,如果您想了解所有的内容或注解说明,您可以进入容器上观看哦。
docker run --rm -ti radius_radius bash
主要的设置档放那里,可以透过cat查看bash内容,应该不难发现。
cat getconfig.sh
另外,在这个repo中,我也方了一个diff.html,可透用浏览器开启,可以看到我对原始设置档做了那些变更。:)
四、启动容器
docker-compose up -d
五、我们可以透过ps来查看是否有正确启动。
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------
radius_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:33060->3306/tcp
radius_radius_1 /usr/sbin/freeradius -X Up 0.0.0.0:1812->1812/udp, 0.0.0.0:1813->1813/udp
六、确认db是up的情况,就能来创建DB了。-h db为数据库容器的服务名称,有些环境下需要,有些环境下不需要,必免不必要的问题,就打上吧。
docker-compose exec db mysql -h db -e "create database radius"
docker-compose exec db mysql -h db -e "grant all on radius.* to 'radius'@'%' identified by 'hlOTg2ZmNk'"
第一行命令,创建了radius数据库,第二行则是授权radius使用者,有完整的权限可访问radius数据库。数据库的密码,请自行调整。
七、进入radius容器内,创建schema
完成上方的数据库创建,我们就能来创建radius伺服器后端数据库mysql的schema啦,运行下方进入
radius的容器服务。
docker-compose exec radius bash
八、可以先来测看看,连db服务是否有问题。
mysql -uradius -phlOTg2ZmNk -h db
密码与参数可以不需空格,所以上方命令没打错喔,「hlOTg2ZmNk」为密码,正常进入后,我们能用control+d跳离。
粘贴下方命令,就能创建所有需要的table到radius数据库罗,如果您在第六步中使用了自定义的密码
,记得要调整下方命令,密码的部份。
mysql -uradius -phlOTg2ZmNk -h db radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
九、创建帐号回到host端,我这个repo,我提供一个简单的命令,来生成radius的帐号及密码。
第一个参数是帐号及第二个参数是密码。
./adduser.php devin test
radius提供了相当多的attribute类型,如下表:
Header Attribute Description
------ --------- -----------
{clear} Cleartext-Password Clear-text passwords
{cleartext} Cleartext-Password Clear-text passwords
{crypt} Crypt-Password Unix-style "crypt"ed passwords
{md5} MD5-Password MD5 hashed passwords
{base64_md5} MD5-Password MD5 hashed passwords
{smd5} SMD5-Password MD5 hashed passwords, with a salt
{sha} SHA-Password SHA1 hashed passwords
SHA1-Password SHA1 hashed passwords
{ssha} SSHA-Password SHA1 hashed passwords, with a salt
{sha2} SHA2-Password SHA2 hashed passwords
{sha224} SHA2-Password SHA2 hashed passwords
{sha256} SHA2-Password SHA2 hashed passwords
{sha384} SHA2-Password SHA2 hashed passwords
{sha512} SHA2-Password SHA2 hashed passwords
{ssha224} SSHA2-224-Password SHA2 hashed passwords, with a salt
{ssha256} SSHA2-256-Password SHA2 hashed passwords, with a salt
{ssha384} SSHA2-384-Password SHA2 hashed passwords, with a salt
{ssha512} SSHA2-512-Password SHA2 hashed passwords, with a salt
{nt} NT-Password Windows NT hashed passwords
{nthash} NT-Password Windows NT hashed passwords
{md4} NT-Password Windows NT hashed passwords
{x-nthash} NT-Password Windows NT hashed passwords
{ns-mta-md5} NS-MTA-MD5-Password Netscape MTA MD5 hashed passwords
{x- orcllmv} LM-Password Windows LANMAN hashed passwords
{X- orclntv} NT-Password Windows NT hashed passwords
我选择后端采用mysql就是因为这我觉的要更新比较方便,至少我自己觉的会比ldap来的容易..:p当然在Radius的环境下,后端数据库是有多种平台可以选择的。
十、修改clients.conf
您可以变更您想用的secret。
由於在容器中ip是随机,所以我用*。如果您想使用一个特定IP,需视您运行的环境而定。
如果您对docker有一定的了解,我想绝对不难才是,当您的host在Linux环境下,
可透过network_mode: host进行,当然您是需要自行调整docker-compose.yml,
如果您不了解相关,那别浪费时间了,让他是ipaddr = *号就没错了。
client wifi {
ipaddr = *
secret = testing123
}
十一、修改sql档dialect及driver删掉,粘贴下面五行。
原内容
dialect = "sqlite"
driver = "rlm_sql_null"
变更为(数据库密码於第六步若有变更,请自行调整)
dialect = "mysql"
driver = "rlm_sql_${dialect}"
server = "db"
port = 3306
login = "radius"
password = "hlOTg2ZmNk"
十二、重启测试罗重启容器使用参数--remove-orphans在启动时看起来较没问题。
有时会启动失败,不太清楚为何。
docker-compose down --remove-orphans
docker-compose up -d
十三、检视服务功能我们能用下方命令查看状态,看到两个Up,我想大概没啥问题了。
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------
radius_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:33060->3306/tcp
radius_radius_1 /usr/sbin/freeradius -X Up 0.0.0.0:1812->1812/udp, 0.0.0.0:1813->1813/udp
如果radius,没启动成功,可以重新运行第十二部看看,或是先看一下log,命令如下:
docker-compose logs -f radius
例如,我碰过在我家的Synology NAS上安装,文件权限太开放启动失败,这时可以透过「chmod 750 档名」调整,特别是eap、clients.conf、default等文件。
最后,我们可以透过上方的logs模式,观察Client的连线结果是否正常,在AP的设置如下,示意图:
在MacOS及iOS环境会需要有Apple Configurator2的描速档才能正常连线。
大至内容如下:
额外测试EAP-TTLS功能
一、进入radius容器内
docker-compose exec radius bash
二、安装需要的文件
apt install -y build-essential pkg-config libnl-3-dev libssl-dev libnl-genl-3-dev
三、取得测试的souce,并依次贴下命令
#下载souce
wget https://w1.fi/releases/wpa_supplicant-2.7.tar.gz
#解压缩并进入目录中
tar zxvf wpa_supplicant-2.7.tar.gz&&cd wpa_supplicant-2.7/wpa_supplicant
#创建并变更.config启动CONFIG_EAPOL_TEST=y
sed 's/#CONFIG_EAPOL_TEST=y/CONFIG_EAPOL_TEST=y/g' defconfig > .config
#编译及安装eapol_test
make eapol_test;cp eapol_test /usr/local/bin
四、创建test.conf测试档。内容请使用自己创建的帐号及密码。
network={
ssid="SSID_OF_THE_WIFI_NETWORK"
key_mgmt=WPA-EAP
eap=TTLS
identity="devin"
anonymous_identity="anonymous"
password="test"
phase2="auth=PAP"
eapol_flags=3
}
五、运行命令测试
eapol_test -c test.conf -a 127.0.0.1 -p 1812 -s testing123
运行结果,看到SUCCESS,代表测试成功:)
No Comment
Post your comment