目標gitlab是使用源碼安裝的10.5中文版
大綱:
gitlab rack-attack 機制的作用
如何啟用和禁用gitlab的rack-attack機制,以及如何配置白名單
如果一個ip被錯誤地攔截,導致了不能訪問,如何快速地恢復
如果gitlab工作在一個反向代理(或者是負載均衡器)的后邊,會導致的問題和解決的方法
如何寫出一個可以觸發攔截機制的測試用例
正文:
1.gitlab rack-attack 機制的作用
gitlab的rack-attack機制是為了限制某個ip對gitlab進行基本認證失敗請求的次數,杜絕惡意的攻擊和密碼破解等行為,通過限制每個ip每分鍾內嘗試的基本認證的次數來實現,如果某個ip進行的基本認證失敗請求的次數超過這個限制,則這個ip的其他的所有的請求都會返回403
2.如何啟用和禁用gitlab的rack-attack機制,以及如何配置白名單
我們使用的是從源碼安裝的gitlab,rack-attack機制默認是啟用的,如果想要禁用掉這個機制,只需要修改 /home/git/gitlab/config/gitlab.yml
將下圖中的enabled改為false,然后取消注釋即可:
如果想要配置不攔截某個IP地址,則將上邊的ip_whitelist配置取消注釋,將不攔截的ip地址配置進去即可,如果有多個地址的話,中間用逗號進行分隔.
3.如果一個ip被錯誤地攔截,導致了不能訪問,如何快速地恢復
如果一個地址被攔截,則gitlab會將這個攔截的地址寫入redis里邊,如果想要迅速地恢復這個地址的請求,則將這條攔截的記錄從redis里邊刪除即可
具體的操作的方法如下:
查看日志,找到被攔截的IP地址是什么:
grep "Rack_Attack" /日志目錄/production.log
進入redis :
redis-cli -s /var/run/redis/redis.sock
查看相關的cache key:
keys *rack::attack*
刪除掉該key對應的值:
del cache:gitlab:rack::attack:allow2ban:ban:<前邊找到的IP地址>
4.如果gitlab工作在一個反向代理或者是負載均衡后邊,導致gitlab拿到的請求地址都是反向代理(或者負載均衡器)的IP地址,而不是用戶真實的IP地址,會導致rack-attack起不到我們想要的作用,這時候該如何配置讓gitlab讀取到用戶真實的ip地址來選擇禁用,而不是禁用掉反向代理的地址呢?
參考gitlab的官方文檔,配置trusted_proxy,並傳遞用戶真實的IP地址
5.如何寫出一個可以觸發攔截機制的測試用例
rack_attack的規則是計算某個ip在某段時間里邊的失敗的基本認證的次數,默認是一分鍾內大於10次則攔截這個ip,所以想要人為出發這個攔截機制,只需要用基本認證的方式和錯誤的用戶名密碼來不斷請求gitlab相關地址就可以了,默認情況下,快速請求10次就可以觸發403了
11.x版本開始,rack-attack功能默認都是禁用的了,如果需要這個功能,需要手動修改配置文件來開啟
官方文檔的位置:
https://docs.gitlab.com/ee/security/rack_attack.html