Files
docs/i18n/zh-tw/docusaurus-plugin-content-docs/version-1.23/administration/fail2ban-setup.md
T

110 lines
3.7 KiB
Markdown
Raw Normal View History

2025-04-04 23:28:16 +00:00
---
date: "2018-05-11T11:00:00+02:00"
slug: "fail2ban-setup"
sidebar_position: 16
aliases:
- /zh-tw/fail2ban-setup
---
2025-04-05 00:57:20 +00:00
# Fail2ban 設定
2025-04-04 23:28:16 +00:00
2025-04-05 00:57:20 +00:00
**記住,fail2ban 很強大,如果你設定錯誤,可能會造成很多問題,所以在依賴它之前,務必先測試,避免把自己鎖在外面。**
2025-04-04 23:28:16 +00:00
2025-04-05 00:57:20 +00:00
Gitea 在網頁日誌中對於錯誤登入會返回 HTTP 200,但如果你在 `app.ini` 中開啟了日誌選項,那麼你應該可以從 `log/gitea.log` 中看到類似這樣的錯誤認證記錄,無論是從網頁還是使用 SSH 或 HTTP 的 CLI:
2025-04-04 23:28:16 +00:00
```log
2025-04-05 00:57:20 +00:00
2018/04/26 18:15:54 [I] 使用者從 xxx.xxx.xxx.xxx 嘗試認證失敗
2025-04-04 23:28:16 +00:00
```
```log
2025-04-05 00:57:20 +00:00
2020/10/15 16:05:09 modules/ssh/ssh.go:143:publicKeyHandler() [W] 使用者從 xxx.xxx.xxx.xxx 嘗試認證失敗
2025-04-04 23:28:16 +00:00
```
2025-04-05 00:57:20 +00:00
(已棄用:這可能是誤報,因為使用者可能會繼續正確認證。)
2025-04-04 23:28:16 +00:00
```log
2025-04-05 00:57:20 +00:00
2020/10/15 16:05:09 modules/ssh/ssh.go:155:publicKeyHandler() [W] 使用者從 xxx.xxx.xxx.xxx 嘗試認證失敗
2025-04-04 23:28:16 +00:00
```
2025-04-05 00:57:20 +00:00
(已棄用:這可能是誤報,因為使用者可能會繼續正確認證。)
2025-04-04 23:28:16 +00:00
```log
2025-04-05 00:57:20 +00:00
2020/10/15 16:05:09 modules/ssh/ssh.go:198:publicKeyHandler() [W] 使用者從 xxx.xxx.xxx.xxx 嘗試認證失敗
2025-04-04 23:28:16 +00:00
```
2025-04-05 00:57:20 +00:00
(已棄用:這可能是誤報,因為使用者可能會繼續正確認證。)
2025-04-04 23:28:16 +00:00
```log
2025-04-05 00:57:20 +00:00
2020/10/15 16:05:09 modules/ssh/ssh.go:213:publicKeyHandler() [W] 使用者從 xxx.xxx.xxx.xxx 嘗試認證失敗
2025-04-04 23:28:16 +00:00
```
2025-04-05 00:57:20 +00:00
(已棄用:這可能是誤報,因為使用者可能會繼續正確認證。)
2025-04-04 23:28:16 +00:00
```log
2025-04-05 00:57:20 +00:00
2020/10/15 16:05:09 modules/ssh/ssh.go:227:publicKeyHandler() [W] 使用者從 xxx.xxx.xxx.xxx 嘗試認證失敗
2025-04-04 23:28:16 +00:00
```
2025-04-05 00:57:20 +00:00
(已棄用:這可能是誤報,因為使用者可能會繼續正確認證。)
2025-04-04 23:28:16 +00:00
```log
2025-04-05 00:57:20 +00:00
2020/10/15 16:05:09 modules/ssh/ssh.go:249:sshConnectionFailed() [W] 使用者從 xxx.xxx.xxx.xxx 嘗試認證失敗
2025-04-04 23:28:16 +00:00
```
2025-04-05 00:57:20 +00:00
(從 1.15 版本開始,這個新訊息將可用,且不會有上述 publicKeyHandler 訊息中的誤報。只有當使用者完全認證失敗時,才會記錄這個訊息。)
2025-04-04 23:28:16 +00:00
```log
2025-04-05 00:57:20 +00:00
2020/10/15 16:08:44 ...s/context/context.go:204:HandleText() [E] 無效的憑證來自 xxx.xxx.xxx.xxx
2025-04-04 23:28:16 +00:00
```
2025-04-05 00:57:20 +00:00
在 `/etc/fail2ban/filter.d/gitea.local` 中新增我們的過濾器:
2025-04-04 23:28:16 +00:00
```ini
# gitea.local
[Definition]
failregex = .*(Failed authentication attempt|invalid credentials|Attempted access of unknown user).* from <HOST>
ignoreregex =
```
2025-04-05 00:57:20 +00:00
在 `/etc/fail2ban/jail.d/gitea.local` 中新增我們的 jail:
2025-04-04 23:28:16 +00:00
```ini
[gitea]
enabled = true
filter = gitea
logpath = /var/lib/gitea/log/gitea.log
maxretry = 10
findtime = 3600
bantime = 900
action = iptables-allports
```
2025-04-05 00:57:20 +00:00
如果你使用 Docker,你還需要新增一個 jail 來處理 **iptables** 中的 **FORWARD** 鏈。將其配置在 `/etc/fail2ban/jail.d/gitea-docker.local`:
2025-04-04 23:28:16 +00:00
```ini
[gitea-docker]
enabled = true
filter = gitea
logpath = /var/lib/gitea/log/gitea.log
maxretry = 10
findtime = 3600
bantime = 900
action = iptables-allports[chain="FORWARD"]
```
2025-04-05 00:57:20 +00:00
然後只需運行 `service fail2ban restart` 來應用你的更改。你可以使用 `service fail2ban status` 檢查 fail2ban 是否接受了你的配置。
2025-04-04 23:28:16 +00:00
2025-04-05 00:57:20 +00:00
務必閱讀 fail2ban 並根據你的需求進行配置,這會在一小時內認證失敗 10 次時,將某人從所有端口禁止 **15 分鐘**。
2025-04-04 23:28:16 +00:00
2025-04-05 00:57:20 +00:00
如果你在 Nginx 反向代理後運行 Gitea(例如使用 Docker),你需要在 Nginx 配置中添加這一行,這樣 IP 不會顯示為 127.0.0.1:
2025-04-04 23:28:16 +00:00
```
proxy_set_header X-Real-IP $remote_addr;
```
2025-04-05 00:57:20 +00:00
`app.ini` 中的安全選項需要調整,以允許解釋標頭以及描述受信任代理伺服器的 IP 地址和網絡列表(更多信息請參見 [配置速查表](../administration/config-cheat-sheet.md#security-security))。
2025-04-04 23:28:16 +00:00
```
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.1/8 ; 172.17.0.0/16 for the docker default network
```