httpd的安全策略
通常我們可以使用防火墻來控制網絡用戶對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的安全策略