网络对抗原理实验二
实验要求
- 用openldap搭建LDAP服务器,尝试对学生信息进行增删改查,信息包括但不限于学生id、密码、 邮箱、手机号、部门等。
- 配置 apache 服务器,配置 Basic 认证模块和需要认证的页面,使用用户名密码认证。
- 配置 apache 服务器,配置 LDAP 认证模块和需要认证的页面,使用 LDAP 存放的学生的用户名密码
认证。 - 用freeradius搭建RADIUS服务器,尝试配置基于unix账号的认证,并用radtest验证服务有效。
- 配置apache服务器,配置RADIUS认证模块和需要认证的页面,使用unix/Linux本地用户名密码 认证。
- 在freeradius中配置ldap认证模块,和LDAP服务器互通,利用ldap账号密码认证用户身份,并用 radtest 测试通过。
实验环境:Ubuntu 16.04
安装并配置ldap
安装
1 | sudo apt-get install slapd ldap-utils |
Omit OpenLDAP server configuration? => No
DNS domain name? => example.com
Organization name? => example
Administrator password? => {**}
Database backend? => MDB
Remove the database when slapd is purged? => No
Move old database? => Yes
Allow LDAPv2 protocol? => No
Done!
防火墙允许通过ldap程序端口
1 | sudo ufw allow ldap |
测试是否安装成功
1 | ldapwhoami -H ldap:// -x |
结果如下所示:
输出为anonymous,所以ldap安装成功。
配置ldap
新建一个student.ldif写下如下内容
1 | dn: ou=student,dc=example,dc=com |
添加学生信息
- 添加学生信息
1 | ldapadd -xWD 'cn=admin,dc=example,dc=com' -f student.ldif |
- 查询学生信息
1 | ldapsearch -xWD 'cn=admin,dc=example,dc=com' -b 'uid=stu1,ou=student,dc=example,dc=com' |
安装与配置apache服务器
- 安装
1 | sudo apt install apache2 apache2-dev |
- 配置Basic认证
1 | sudo vim /etc/apache2/sites-enabled/000-default.conf |
配置如下所示
1 | <Directory /var/www/html> |
这里的注释是一会儿配置ldap时需要用到的
建立basic认证的密钥文件
1 | sudo htpasswd -bc /var/www/html/.valid_user santu {[PASSWD]} |
然后访问web
配置apache使用ldap认证
修改apache2.conf
1 | sudo vim /etc/apache2/apache2.conf |
在apache2.conf文件开头中添加这一行导入模块
1 | Include mods-available/ldap.* |
重启apache服务器,加载模块
1 | sudo service apache2 restart |
我这里已经加载了
接着,修改000-default.conf(就是上文中提到的那个注释),我这里选择这里选择注释掉AuthUserFile密钥文件,如果以后需要恢复basic认证时只需取消注释,并且将AuthBasicProvider后改为file即可
1 | <Directory /var/www/html> |
重启服务器
1 | sudo service apache2 restart |
现在,就可以用student.ldif中的学生信息进行登录验证了
apache使用freeradius认证
- 安装freeradius之前先要确保已经安装了mysql、因为后来要用到、没有安装使用apt-get来安装
1 | sudo apt-get install mysql-server |
- 安装freeradius的部件
1 | sudo apt install libssl-dev libapache2-mod-auth-radius freeradius freeradius-ldap mysql-server freeradius-mysql |
- 安装完成后freeradius就会自动启动了、由于我们要使用调试模式来启动freeradius、所以先关闭freeradius服务
1 | sudo service freeradius stop |
- 修改/etc/freeradius/下的users文件
把这几行反注释、也就是使用一个名为steve、密码为testing的用户来测试一下是否通则登录freeradius服务器、保存后退出然后启动radius的调试模式。
注意点一:这里需要补充一点使用ubtuntu的apt-get方式来安装freeradius的位置会和源码不同、源码安装的默认位置是/usr/local/etc/raddb/而使用ubuntu的apt-get方式的配置文件则安置在/etc/freeradius/,我这里是使用apt-get来安装的,所以默认安装位置为/etc/freeradius/
- 开启调试模式
1 | freeradius –X |
- 然后打开另一个终端、使用radtest来测试用户是否能够通过
1 | radtest steve testing localhost 1812 testing123 |
注意点:这里的测试就是上述的users文件里面默认的用户名和密码,只在还没启动mysql之前测试有效,而因为我已经启用了mysql中我自己的用户,所以这个就无效了。
这句前steve和testing代表用户和密码、localhost和1812则是freeradius的IP地址和端口号、testing123则是freeradius服务端与客户端之间通讯的key、由/etc/freeradius目录下的clients.conf定义、在client localhost字段的secret参数。
radtest成功通过后则会显示Access-Accept状态。另外,如果你一个不好运、确实在linux系统中存在steve的用户、这样子的话freeradius服务器则会跳过你现在的用户配置直接去查询系统的配置、这时的密码就会以系统密码为准、这里在users文件中定义的密码就会失效、而且如果改用户是禁止在linux上登录的话、则会直接把用户打回成 Access-Reject
- 以下是我在mysql中创建了santu用户(下面会说)之后成功的验证
- 服务器端代码为
- mysql与freeradius连接
建立radius数据库
然后建立radius数据库
1 | create database radius; |
之后使用exit退出mysql、然后建立一系统的表格、freeradius已经自带有sql脚本、我们执行这些脚本就可以自行建立了,首先定位到这些脚本所在目录
1 | cd /etc/freeradius/sql/mysql |
导入admin.sql
1 | mysql -uroot -p[PASSWORD] radius < admin.sql |
schema.sql同样也是照此格式来执行导入到数据库,如果结果正常的话,可以使用radius账户进入mysql数据库
这里默认密码为radpass
这样我们就可以看到一些tables了
配置freeradius
- 修改/etc/freeradius/radiusd.conf 定位到该行
将其反注释,启动sql.conf
- 然后编辑/etc/freeradius/sql.conf
默认情况下、使用apt-get命令来安装freeradius会自动检测到已经安装了mysql而自动把database设置为mysql、如果迩的不是这样显示请设置成mysql、然后再再看password这个参数、如果你之前已经更改了radius用户的密码、这里要做相应的修改、其余的参数就默认好了
- 修改了sql.conf、再设置相应的设备通知其使用mysql作为数据存储设备
把authorize{}字段下的file注释掉、反注释sql、这里的file指的就是usrs文件、将不再把用户信息写在users而使用mysql来存储用户信息 把accounting{} 字段下的sql反注释、启用sql来记录统计信息 把session{}字段下的sql反注释、启用用户同时登录限制功能、这里还需要修改其它地方、一会再说 把post-auth{} 字段的sql反注释、启用用户登录后进行数据记录功能
- 接下来开启启用用户同时登录限制功能
将这几行反注释
这样整个对mysql的radius配置就已经完成了
- 测试是否连接成功,在radius数据库建立几条用户信息以测试mysql+freeradius的用户认证是否成功,添上这几句
结果为
这就解释了一开始用radtest santu [**] localhost 1812 testing123命令会出现如下的应答
注意:这些数据类型的属性值attribute都是特定的字符、不是随随便便自己写上去的、要查看定义这些属性的文件请查看迩当前配置文件的dictionary目录、其实里面也啥内容没定义到、只是写上了路径、一般会写上包含在
1 | $INCLUDE /usr/share/freeradius/dictionary |
这里的意思就是整个dictionary文件被放置在这个文件中、其实这个文件也是个路径信息、所以真正定义的dictionary文件是放在/usr/share/freeradius/这个目录、比如Framed-IP-Address属性被定义在dictionary.rfc2865文件中、Cleartext-Password被定义在dictionary.freeradius.internal文件中
注意点:注意之前的freeradius服务必须先停掉、不然会出现冲突、然后再使用以上用户来测试
返回Access-Accept状态的同时会返回相应reply表格的内容、先返回radreply的用户返回信息、再返回radgroupreply的所属组返回信息、返回成功就表示配置已经正确了。
配置freeradius-ldap
- 配置/etc/freeradius/modules/ldap
这里,apache2使用freeradius进行认证,并且radius和ldap连接,我们使用student.ldif中学生信息就可完成radtest认证。
至此实验二大功告成!