1. 程式人生 > >httpd的安全策略

httpd的安全策略

pass mod x509 dig rsa con override 命令 一次

一、基於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

httpd的安全策略