環境介紹:
系統版本: CentOS Linux release 7.7.1908 (Core)
WordPress: 5.4–zh_CN
nginx版本: nginx/1.16.1
PHP版本: PHP 7.2.26
數據庫版本: mysql 3.28.0
一、加固原因(真實經歷)
血的教訓!!!
- LNMP環境搭建的個人網頁,本以爲個人網頁沒必要做安全,安全離遙不可及,直到每天收到阿里雲的短信,個人小網頁在也沒法使用時,可氣的刪除了我的所有學習筆記,我才知道安全中有多重要
- 你不解決一些教科書級的漏洞,總有熊孩子折騰你
二、整體加固方法介紹
1、關閉不需要的端口
只打開如下端口
服務 | 端口 |
---|---|
ssh | 443(限制IP) |
http | 80 |
https | 443 |
ftp | 21,20000-30000 |
2、配置https
儘量使用https防止被指持,這個的詳細配置,從證書的申請到配置有詳細的一期介紹:點擊這裏查看
3、設置目錄權限
將網站的根目錄權限,取消執行權限(chmod命令調整)
三、基於nginx加固
- 升級nginx的版本到最新版,隱藏nginx的版本信息
#vim nginx的配置文件
#yum安裝nginx路徑 /etc/nginx/nginx.conf
#在http括號中任意位置添加以下命令
server_tokens off;
2. nginx配置中的其他加固
配置nginx的配置文件 nginx.conf
你也可以將需要的模塊加載單個網頁配置文件中
# 設置timeout設低來防禦DOS攻擊
http
{
client_body_timeout 10;
client_header_timeout 30;
keepalive_timeout 30 30;
send_timeout 10;
}
#限制訪問的方法
server
{
if($request_method !~ ^(GET|HEAD|POST)$) {
return404;
}
}
在原來的編譯參數的首行加入--add-module=/root/install/naxsi-core-0.51-1/naxsi_src
nbs.rules文件
server{
limit_req zone=one burst=5;
limit_conn two 15;
}
自定義nginx版本號
http://purplegrape.blog.51cto.com/1330104/1291871
#封殺各種user-agent
if ($http_user_agent ~* "java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan" ) {
return 403;
}
if ($http_user_agent ~* "" ) {
return 403;
}
# 封殺特定的url
location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {
deny all;
}
# 封殺特定的http方法和行爲
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
return 405;
}
if ($http_range ~ "\d{9,}") {
return 444;
}
# 強制網站使用域名訪問,可以逃過IP掃描
if ( $host !~* 'abc.com' ) {
return 403;
}
url 參數過濾敏感字
if ($query_string ~* "union.*select.*\(") {
rewrite ^/(.*)$ $host permanent;
}
if ($query_string ~* "concat.*\(") {
rewrite ^/(.*)$ $host permanent;
}
#必須攜帶 referer
if ($http_referer = "" ) {
return 403;
}
以上 的模塊都可以單獨添加在nginx.conf的 sever{ }中
你還可以點擊這裏查看 nginx配置文件介紹
四、基於PHP加固
隱藏php版本信息
在header中隱藏php版本信息,修改php配置文件如下:
我的編譯安裝位置 /usr/local/php72/etc (路徑可以自定義可能不同)
cd /usr/local/php72/etc
vim php.ini
380行中的 expose_php = On
修改爲 expose_php = off
注:vim 命令中輸入 set number顯示行數
五、基於mysql加固
- phpMyAdmin管理數據庫限制
進入 phpMyAdmin 目錄,找到 config.inc.php,如果沒有,可以將根目錄下的config.sample.inc.php 複製爲 config.inc.php。
編輯 config.inc.php,添加下面兩行代碼,其中 111.18.89.174 是允許訪問 phpMyAdmin 的 IP,Access denied 是未經授權訪問時的提示信息:
?$ip_prefix = '111.18.89.174';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip_prefix)) != $ip_prefix ) die('Access denied');
- 修改phpmyadmin的端口號訪問mysql數據庫:
修改phpmyadmin目錄下libraries下配置文件config.default.php。
$cfg['Servers'][$i]['port'] = ''
#上面是默認語句,默認端口爲3306
$cfg['Servers'][$i]['port'] = '3310';
#我們修改端口,指定爲3301,這個可以自由指定
六、安全建議
- 建議大家搭建個人網頁時,儘量去官網,如果國外的官網太慢,使用國內的軟件安裝更新源一定要選擇權威的一些源,如國內的阿里源、中科源等
- 配置千萬條,安全第一條