天天看點

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

繼續閱讀