你的服务器够安全吗
一份不一定很全的服務(wù)器安全防范措施, 但值得看看. (╯-_-)╯~╩╩.
文章地址:?
https://blog.piaoruiqing.com/2019/11/24/is-your-server-safe-enough/
前言
近期服務(wù)器經(jīng)常被暴力掃描、攻擊, 故周末花時(shí)間打理下服務(wù)器, 將一些可能存在的風(fēng)險(xiǎn)處理掉. 筆者根據(jù)實(shí)踐總結(jié)出一份簡(jiǎn)單的防范措施列表, 希望能對(duì)你有幫助.
閱讀本文你能收獲到:
一些服務(wù)器安全防范措施.
快樂(lè) (如果學(xué)習(xí)能使你快樂(lè)的話 ( ̄. ̄) )
一. 防火墻
防火墻采用白名單策略, 只開(kāi)放必要端口. 如: 80/443以及ssh登錄端口.
而數(shù)據(jù)庫(kù)、緩存等端口, 最好只允許本地訪問(wèn), 若需要調(diào)試, 建議使用白名單IP、代理等方法進(jìn)行連接.
二. 利用內(nèi)網(wǎng)穿透工具
參考文檔:?https://github.com/fatedier/frp/
對(duì)于有調(diào)試需求的服務(wù)器而言, 數(shù)據(jù)庫(kù)、緩存、消息隊(duì)列等端口需要開(kāi)放. 而直接開(kāi)放端口會(huì)給服務(wù)器帶來(lái)不必要的安全隱患. 此時(shí)我們必須對(duì)訪問(wèn)者進(jìn)行限制, 如: IP白名單、VPN等. 除此之外, 筆者推薦一個(gè)內(nèi)網(wǎng)穿透工具用來(lái)輔助建立調(diào)試環(huán)境 ——?FRP
FRP是一個(gè)可用于內(nèi)網(wǎng)穿透的高性能的反向代理應(yīng)用, 有多種穿透方式, 可以指定端口進(jìn)行代理. 我們可以在服務(wù)器啟動(dòng)服務(wù)端(frps)和客戶端(frpc)兩個(gè)服務(wù), 本地客戶端的frpc通過(guò)frps監(jiān)聽(tīng)的唯一端口與服務(wù)端的frpc建立連接, 這樣就能將服務(wù)器上只能內(nèi)部訪問(wèn)的端口映射到開(kāi)發(fā)者電腦本地端口.
使用FRP的優(yōu)勢(shì): 指定端口、可壓縮流量、可加密、服務(wù)端只需要暴露frps的端口.
三. 隱藏?zé)o用信息
參考文檔:
1). http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header
2). http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens
3. http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_hide_header
通過(guò)服務(wù)器返回的信息, 攻擊者能從中發(fā)現(xiàn)一些漏洞, 比如nginx版本、所使用的web服務(wù)器等. 而這些信息對(duì)于用戶來(lái)說(shuō)都是非必要的. 筆者隨便找了個(gè)網(wǎng)站查看, 如圖:
這些細(xì)節(jié)都可能為攻擊者提供途徑. 所以有必要屏蔽掉這些信息.
proxy_hide_header {Your-Header}: nginx中, 通過(guò)proxy_hide_header可以隱藏掉上游服務(wù)返回的某些header.
server_tokens off:?server_tokens是nginx版本信息開(kāi)關(guān), 可以開(kāi)啟或隱藏錯(cuò)誤頁(yè)或header的Server字段后面帶的版本號(hào).
fastcgi_hide_header X-Powered-By: 如果您使用的是php-fpm, 這個(gè)配置可以隱藏掉header中php及版本信息.
配置完成后執(zhí)行nginx -s reload后配置即生效.
四. 限流
參考文檔:?http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
用戶正常的訪問(wèn)行為, 不會(huì)產(chǎn)生過(guò)于頻繁的請(qǐng)求, 限流可以防止某些不安分的IP因某些目的而頻繁訪問(wèn)服務(wù)器而導(dǎo)致資源耗盡, 影響正常用戶的訪問(wèn)體驗(yàn).
一般地, 我們可以通過(guò)nginx配置ngx_http_limit_req_module進(jìn)行限流:
http {? limit_req_zone?$binary_remote_addr?zone=one:10m?rate=1r/s;? ...? server {? ? ? ...? ? ? location /search/ {? ? ? ? ? limit_req?zone=one?burst=5;? ? ? }limit_req_zone...: 設(shè)置一個(gè)大小為10M的共享區(qū)域, 命名為one, 其KEY為$binary_remote_addr即IP, 訪問(wèn)速率限制為1次/秒.
limit_req...: 路徑為search的location使用共享區(qū)域one進(jìn)行限流, 突發(fā)請(qǐng)求限制為5. (如果只限制了1r/s, 將會(huì)嚴(yán)格按照每秒一次的請(qǐng)求進(jìn)行限制, 但對(duì)于用戶來(lái)說(shuō), 點(diǎn)開(kāi)網(wǎng)頁(yè)可能會(huì)并發(fā)請(qǐng)求數(shù)個(gè)資源, 如此死板的限制對(duì)于體驗(yàn)并不友好, 所以我們還需要設(shè)置突發(fā)的請(qǐng)求限制)
五. 禍水東引
總之一句話, 引流到扛得住高并發(fā)的靜態(tài)頁(yè). 比如GitPage.
參考文章:?我是如何通過(guò)Nginx日志實(shí)時(shí)封禁風(fēng)險(xiǎn)IP的
相信不少站長(zhǎng)都了解被cc或ddos攻擊支配的恐懼.
尤其對(duì)于個(gè)人主頁(yè)等小站來(lái)說(shuō), 購(gòu)買(mǎi)高防服務(wù)器或購(gòu)買(mǎi)各種防護(hù)服務(wù)可能性價(jià)比并不高. 但普通服務(wù)器遇到稍大規(guī)模的攻擊(也許這規(guī)模并不是真的很大), 可能服務(wù)器直接就掛了, 就算配置了頁(yè)面的靜態(tài)緩存, 也不一定能扛得住多大規(guī)模的攻擊, 況且流量挺貴的.
對(duì)此筆者的方案是:
實(shí)時(shí)分析訪問(wèn)日志, 對(duì)每個(gè)IP進(jìn)行危險(xiǎn)等級(jí)評(píng)分.
鎖定異常IP, 將這些IP的全部請(qǐng)求通過(guò)302臨時(shí)重定向到GitPage備份站.
對(duì)于危險(xiǎn)等級(jí)更高的IP, 直接使用ipset+iptables封禁
之所以對(duì)于一般危險(xiǎn)等級(jí)的IP進(jìn)行重定向, 主要目的是:
節(jié)約流量, 節(jié)約服務(wù)器資源(這點(diǎn)對(duì)動(dòng)態(tài)網(wǎng)站尤為重要)
勸退攻擊者: 大家無(wú)冤無(wú)仇, 您去找更好搞的站點(diǎn)攻擊, 請(qǐng)不要在這里耗費(fèi)太多時(shí)間.
防止誤殺, 異常IP評(píng)估可能存在誤差, 直接封禁對(duì)于訪問(wèn)者而言極其不友好, 會(huì)白白損失用戶. 服務(wù)降級(jí)總比不提供服務(wù)要好. 故選擇先臨時(shí)重定向, 若該IP行為仍舊不規(guī)范, 此時(shí)再封禁也不晚.
下圖引自我的前一篇文章《我是如何通過(guò)Nginx日志實(shí)時(shí)封禁風(fēng)險(xiǎn)IP的》
六. 禁用root遠(yuǎn)程登錄
禁止使用root用戶遠(yuǎn)程登錄, 僅允許某個(gè)權(quán)限少的普通用戶遠(yuǎn)程登錄, 登錄后再執(zhí)行su提權(quán).
對(duì)于允許遠(yuǎn)程登錄的賬戶, 建議不要使用密碼登錄,?更不能使用簡(jiǎn)單密碼. 建議使用秘鑰登錄.
ssh-keygen生成秘鑰對(duì), 將公鑰放入authorized_keys文件中即可.
七. 其他
定期備份, 建議使用crontab配置備份定時(shí)任務(wù). 并且定期將重要數(shù)據(jù)冷備份.
及時(shí)更新系統(tǒng), 修復(fù)安全漏洞.
只安裝需要的、用不著就關(guān)閉
結(jié)語(yǔ)
服務(wù)器安全事大, 對(duì)于開(kāi)發(fā)、運(yùn)維、測(cè)試等工作來(lái)說(shuō), 安全都是重點(diǎn)關(guān)注的問(wèn)題, 養(yǎng)成良好的習(xí)慣, 防患于未然.
[版權(quán)聲明]
本文發(fā)布于樸瑞卿的博客, 允許非商業(yè)用途轉(zhuǎn)載, 但轉(zhuǎn)載必須保留原作者樸瑞卿?及鏈接:http://blog.piaoruiqing.com. 如有授權(quán)方面的協(xié)商或合作, 請(qǐng)聯(lián)系郵箱:?piaoruiqing@gmail.com.
有道無(wú)術(shù),術(shù)可成;有術(shù)無(wú)道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
總結(jié)
- 上一篇: 不懂别瞎搞!Redis 性能优化的 13
- 下一篇: Websocket实现Java后台主动推