一、基于IP和主机的访问控制 通常我们可以使用防火墙来控制网络用户对HTTP服务的访问,包括允许访问以及拒绝访问。相对于复杂的firewall命令,我们还可以直接利用HTTP服务的配置文件来控制网络用户的访问。
无明确授权的目录,默认拒绝
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all denied
控制特定的IP访问:
Require ip IPADDR:授权指定来源的IP访问
Require not ip IPADDR:拒绝特定的IP访问控制特定的主机访问:
Require host HOSTNAME:授权特定主机访问
Require not host HOSTNAME:拒绝
HOSTNAME:
FQDN:特定主机
domin.tld:指定域名下的所有主机
1、除特定ip外授权所有ip访问
<RequireAll>
Require all granted
Require not ip 172.16.1.1 拒绝特定IP
</RequireAll>
2、除所有ip外拒绝所有ip访问
<RequireAny>
Require all denied
require ip 172.16.1.1 允许特定IP
</RequireAny>
3、表示拒绝所有主机访问,单独允许IP网段为192.168.25.0/24的主机访问,而拒绝网段里面IP为192.168.25.51的主机访问
<directory /app/website/html/>
<RequireAll>
require all denied
require ip 192.168.25.
require not ip 192.168.25.51
</RequireAll>
</directory>
针对特定Hostname的访问控制有一个前提,服务器能够将hostname解析成对应的IP,也就是说需要有相应的解析服务,DNS或者hosts文件都可以。类似于Require ip语句,针对特定host也有类似的用法,
授权特定主机访问:Require host HOSTNAME
拒绝特定主机访问:Require not host HOSTNAME12
4、表示拒绝所有主机访问,唯独允许hostname为Centos7的主机访问。配置如下:
<directory /app/website/a/>
require all denied
require host Centos7
</directory>1234
5、表示允许所有主机访问,唯独拒绝hostname为Centos7的主机访问。同Require not ip,Require not host也指令需要在一对<RequireAll>指令里面使用,示例如下:
<directory /app/website/html/>
<RequireAll>
require all granted
require not host Centos7
</RequireAll>
</directory>
二、基于用户的访问控制
1、认证方式两种
basic:明文
digest:消息摘要认证,兼容性差
basic认证配置示例:
(1) 定义安全域
<Directory “/path">
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
Require user username1 username2 ...
</Directory>
允许账号文件中的所有用户登录访问:Require valid-user
(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
创建密码文件的方式有两种,一种的手动创建,当然创建的是明文密码,安全性不够;另一种是使用 htpasswd 命令生成,这个工具有一些选项:
选项 注释
-c 自动创建文件,仅应该在文件不存在时使用(初建时使用-c,再次创建不取消该选项则会覆盖之前内容)
-m md5格式加密
-s sha格式加密
-D 删除指定用户
2、创建授权用户信息(注意:第一次创建需要加上-c选项)
htpasswd -c /etc/httpd/conf.d/.htpasswd alice
htpasswd /etc/httpd/conf.d/.htpasswd bob
htpasswd /etc/httpd/conf.d/.htpasswd jack
方法一
vim /etc/httpd/conf.d/test.conf
<Directory /data/website/admin>
AuthType Basic //认证模式
AuthName "Secure login" //登陆安全提示符
AuthUserFile "/etc/httpd/conf.d/.htpasswd" //授权的用户认证信息存放路径
Require valid-user //指定用户授权:Require user username
</Directory>
方法二
先创建.htpasswd文件
[root@centos7 admin]#vim /data/website/admin/.htpasswd
AuthType Basic
AuthName "Secure login"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user bob
再对httpd配置文件进行如下配置
vim /etc/httpd/conf.d/test.conf
<Directory /data/website/admin>
AllowOverride authconfig </Directory>
<Location "/status"> SetHandler server-status
Require all granted
</Location>
三、实现https
1、安装ssl模块
yum install mod_ssl
2、 httpd服务器申请证书
(umask 077;openssl genrsa -out httpd.key 2048)
openssl req -new -key httpd.key -out httpd.crt
scp httpd.csr caserver:/etc/pki/CA/
3、 建立CA并颁发httpd服务器证书
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
touch index.txt
echo 01 > serial
openssl ca -in httpd.csr -out certs/httpd.crt
scp certs/httpd.crt cacert.pem httpdserver:/etc/httpd/conf.d/ssl/
4 、配置httpd实现加密
ls /etc/httpd/conf.d/ssl
cacert.pem httpd.crt httpd.csr httpd.key
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem