天天看点

httpd的安全策略

一、基于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文件

[[email protected] 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
           

转载于:https://blog.51cto.com/11637832/2157369

继续阅读