实验准备
软件:VMware Workstation Pro
虚拟机:Red Hat Enterprise Linux 7 服务器,windows客户端
网络模式:仅主机模式
实验背景
学院内部有一台FTP 和Web 服务器,其功能主要是维护学院的网站,内容包括上传文件、创建目录、更新网页等。学院的这些维护工作是委派给计算机系学习部的学生进行的,现需要对该服务器进行一定的安全设置,实现对站点的安全管理。
配置环境
1、网络配置
确保虚网打开
确定物理机上的vmnet1和vmnet8处于启用状态。并设置实验机器网络模式为仅主机模式。
查看你这台虚拟机的地址
2、配置yum仓库
选择你虚拟机存放 ISO镜像 的地址
确保 “圆盘” 是连接的
[root@localhost 桌面]# mkdir /mnt/cdrom
[root@localhost 桌面]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost 桌面]# vim /etc/yum.repos.d/a.repo
3、安装web服务HTTPD及ftp服务vsftpd
4、启动web服务,创建网页
[root@localhost 桌面]# cd /var/www/html/
[root@localhost html]# echo “this is hnsw’s website” > /var/www/html/index.html
[root@localhost html]# systemctl restart httpd.service
配置完成后,可以看到本地是可以通过浏览器访问网页内容,但其他主机无法访问。
这是由于web服务器的防火墙未放行httpd的流量,故其他主机无法访问。设置防火墙,放行httpd的流量
[root@localhost html]# firewall-config
成功访问
5、启动VSFTPD服务,并进行安全配置
[root@localhost html]# firewall-config
使用浏览器访问 ftp 站点
也可使用物理机上预装的ftp服务连接ftp站点,使用普通用户student账号密码登录,可见登录成功。但没有写入权限。这是由于安全策略SELinux域策略的原因,设置SELinux域策略。
[root@localhost html]# setsebool -P ftpd_full_access=on
[root@localhost html]# setsebool -P ftpd_connect_all_unreserved 1
创建目录成功。到这里一个简单的 web 及 ftp 站点就搭建好了,但是我们还需要对他进行一系列的配置及安全设置才能符合我们的使用场景。
在物理机CMD工作目录 c:\Users\Administrator 里创建一个网页文件,模拟学生使用 ftp 服务远程更新 web 主页。
打开主配置文件,出于安全考虑,首先我们需要关闭匿名访问模式。另一方面由于系统用户默认访问到的是自己的主目录,但是却可以用cd命令切换到服务器端任何具备访问权限的目录,比如切换到/目录。这会带来很大的安全风险,所以一般都需要将系统用户禁锢于其主目录中,禁止随意切换。在vsftpd.conf文件中增加一行“chroot_local_user=YES”;但由于我们ftp服务主要是用于更新网页,若将系统用户禁锢于其主目录中,用户将无法访问网页存放目录。故我们可搭配local_root=/var/www/html 参数,该参数将设置所有本地用户的根目录为/var/www/html。当本地用户登录后,会自动进入该目录。
注:在vsftpd2.3.5版本更新之后增强了安全检查,将用户限定在了主目录下,该用户的主目录就不能再具有写权限了!若有写权限会报该错误。
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
要修复这个错误,可以通过取消主目录的写权限,或者增加该语句。
allow_writeable_chroot=YES
[root@localhost html]# vim /etc/vsftpd/vsftpd.conf
设置完成后,重启vsftpd服务,重新使用student用户远程上传网页,提示上传成功,但无法创建文件。这是由于未对/var/www/html目录进行权限设置
[root@localhost html]# systemctl restart vsftpd.service
设置/var/www/html目录所有者为管理员root,所属组为student组,数字权限为775,这样设置的好处是,仅有student组中的用户远程连接具有查看修改权限,其他用户远程连接仅有查看权限而没有修改权限。
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建一个用户user1,设置密码,作为对照实验。
成功使用student用户远程登录上传新网页并删除原网页
user1用户可以远程连接查看目录,但没有修改权限
使用物理机浏览器成功访问到新网页(随意一个浏览器)
6、FTP文件加密传输配置SSL
实验准备
虚拟机:redhat 7 liunx
物理机:window 11
软件:FileZilla
首先,我们需要下载安装openssl。
[root@localhost html]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 7
Generating a 2048 bit RSA private key
...........+++
...................................................................................................+++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HN
Locality Name (eg, city) [Default City]:CS
Organization Name (eg, company) [Default Company Ltd]:SW
Organizational Unit Name (eg, section) []:XX
Common Name (eg, your name or your server's hostname) []:XX
Email Address []:123@163.com
在该命令中, req 表示生成一个证书,-new 是第一次执行该命令需要携带的参数,-out 指定了证书的文件名称,-keyout 指定证书密钥的文件,-days 表示证书的有效期。
在执行上述命令后,进入交互式页面,需要输入证书的地点、组织等信息
上述命令执行完毕后,会在当前目录下生成一个vsftpd.pem文件
[root@localhost html]# ls
index.html vsftpd.pem
[root@localhost html]# mkdir -p /etc/vsftpd/.ssl
[root@localhost html]# mv vsftpd.pem /etc/vsftpd/.ssl/
[root@localhost html]# chmod 400 /etc/vsftpd/.ssl/
生成证书后,为证书文件在/etc/vsftpd下单独创建一个隐藏目录.ssl,将证书目录下,为了保证安全性,把证书文件权限设置成400
[root@localhost html]# vim /etc/vsftpd/vsftpd.conf
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=TRUE
ssl_sslv2=FALSE
ssl_sslv3=FALSE
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/vsftpd/.ssl/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.ssl/vsftpd.pem
修改vsftpd的配置文件,使其支持证书,并配置加密功能
ssl_enable表示开启ssl证书功能,
force_local_data_ssl和force_local_login_ssl表示在登录和数据传输时采用证书加密。
第四行至第六行表示ssl证书的版本,一是ssl的版本一名字是tsl,版本二和版本三名字是ssl;二是这里写的不是YES和NO,而是TRUE和FALSE。
第七行require_ssl_reuse表示不重用SSL会话
第八行ssl_cipthers表示用于加密ssl连接
第九行和第十行表示ssl的证书和密钥文件存放位置。
[root@localhost html]# systemctl restart vsftpd.service
[root@localhost html]# setenforce 0
重启服务,设置seliunx。
安装FileZilla连接服务器
前面的是上课时间配的,下课用自己电脑重新配了一遍,所以这里的用户名的地址有些不一样,但不影响,操作都是相同的。
前面用户名和地址是什么这里也是什么
在kali上抓包测试,有显示说明连接成功,但嗅探不到账号密码了
7、web服务器的访问控制
在网络中,为了保护网络资源的安全,一般是通过路由设备或者防火墙建立基于IP和端口的访问控制。在操作系统中,对文件的访问也要访问控制。
在Web应用中,根据访问客体的不同,常见的访问控制可以分为“基于URL的访问控制”、“基于方法(method)的访问控制”和“基于数据的访问控制”。
Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。下面我们只允许IP地址为 192.168.12.130(随意给个地址)的主机访问网站资源,在httpd服务配置文件的第156行后面添加下述规则。这样在重启httpd服务程序后再用本机(即服务器,其IP地址为192.168.12.129)来访问网站的首页面时就会提示访问被拒绝了
[root@localhost html]# vim /etc/httpd/conf/httpd.conf
重启服务后,使用物理机无法访问网页内容,只有IP地址为192.168.12.129的KALI linux主机可以访问到网页内容