Initial own-git docs, configs, scripts, and hardening pack
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# Security Hardening Checklist
|
||||
|
||||
Этот список рассчитан на инфраструктуру из этого репозитория:
|
||||
|
||||
- HAProxy как edge reverse proxy;
|
||||
- Gitea в Docker;
|
||||
- публичные порты `80`, `443`, `2222`, `25`, `3389`.
|
||||
|
||||
## Приоритет P0 (сделать в первую очередь)
|
||||
|
||||
- Обновить систему:
|
||||
- `sudo apt update && sudo apt full-upgrade -y`
|
||||
- Включить автообновления security-пакетов (`unattended-upgrades`).
|
||||
- Сменить/усилить пароли админов, включить 2FA в Gitea.
|
||||
- Проверить `ROOT_URL=https://git.papatramp.ru/` в `app.ini`.
|
||||
- Убедиться, что TLS-сертификат на HAProxy содержит SAN `git.papatramp.ru`.
|
||||
- Ограничить доступ к закрытым сервисам через `allowed_ips.lst`.
|
||||
|
||||
## Приоритет P1 (в течение дня)
|
||||
|
||||
- Настроить firewall (UFW):
|
||||
- `sudo ./scripts/setup-ufw.sh`
|
||||
- Настроить fail2ban:
|
||||
- `sudo apt install -y fail2ban`
|
||||
- `sudo cp fail2ban/jail.d/owngit.local /etc/fail2ban/jail.d/owngit.local`
|
||||
- `sudo systemctl enable --now fail2ban`
|
||||
- `sudo fail2ban-client status`
|
||||
- Отключить root login по SSH и парольный вход:
|
||||
- использовать безопасный скрипт:
|
||||
- `sudo ./scripts/safe-apply-ssh-hardening.sh`
|
||||
- шаблон конфига: `ssh/sshd_config.d/90-owngit-hardening.conf`
|
||||
|
||||
## Приоритет P2 (регулярная эксплуатация)
|
||||
|
||||
- Включить ежедневные бэкапы (`systemd` timer из `systemd/`).
|
||||
- Раз в месяц делать тестовое восстановление через `scripts/restore-gitea.sh`.
|
||||
- Проверять fail2ban:
|
||||
- `sudo fail2ban-client status sshd`
|
||||
- Проверять логи HAProxy/Gitea:
|
||||
- ошибки 4xx/5xx,
|
||||
- всплески соединений и brute-force.
|
||||
- Хранить бэкапы вне сервера (NAS/S3/другой хост).
|
||||
|
||||
## Минимальная проверка после hardening
|
||||
|
||||
```bash
|
||||
sudo ufw status verbose
|
||||
sudo fail2ban-client status
|
||||
curl -I https://git.papatramp.ru
|
||||
ssh -T -p 2222 git@git.papatramp.ru
|
||||
```
|
||||
|
||||
## Безопасное применение SSH hardening
|
||||
|
||||
```bash
|
||||
chmod +x scripts/safe-apply-ssh-hardening.sh
|
||||
sudo ./scripts/safe-apply-ssh-hardening.sh
|
||||
```
|
||||
|
||||
Скрипт:
|
||||
|
||||
- делает backup текущих SSH-конфигов;
|
||||
- устанавливает include-конфиг в `/etc/ssh/sshd_config.d/`;
|
||||
- проверяет синтаксис `sshd -t`;
|
||||
- перезагружает ssh только при валидной конфигурации.
|
||||
|
||||
## Опциональный Lockdown профиль
|
||||
|
||||
Если нужен строгий доступ только для отдельных пользователей/сетей:
|
||||
|
||||
1. Отредактируй шаблон:
|
||||
- `ssh/sshd_config.d/95-owngit-lockdown.conf.example`
|
||||
2. Укажи реальные логины в `AllowUsers`.
|
||||
3. Применяй только безопасным скриптом:
|
||||
|
||||
```bash
|
||||
chmod +x scripts/safe-apply-ssh-lockdown.sh
|
||||
sudo ./scripts/safe-apply-ssh-lockdown.sh
|
||||
```
|
||||
|
||||
Что делает скрипт:
|
||||
|
||||
- проверяет наличие `AllowUsers` в шаблоне;
|
||||
- ставит конфиг в `/etc/ssh/sshd_config.d/95-owngit-lockdown.conf`;
|
||||
- валидирует `sshd -t`;
|
||||
- делает reload только при валидной конфигурации;
|
||||
- сохраняет backup предыдущего lockdown-файла.
|
||||
@@ -0,0 +1,121 @@
|
||||
# Troubleshooting
|
||||
|
||||
## 1) `https://git.papatramp.ru` не открывается
|
||||
|
||||
Проверь DNS и маршрутизацию:
|
||||
|
||||
```bash
|
||||
dig +short git.papatramp.ru
|
||||
```
|
||||
|
||||
- из интернета должен резолвиться во внешний IP;
|
||||
- из локалки лучше Split DNS на LAN IP HAProxy.
|
||||
|
||||
Проверь HAProxy:
|
||||
|
||||
```bash
|
||||
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
|
||||
sudo systemctl status haproxy --no-pager
|
||||
```
|
||||
|
||||
## 2) 404 от HAProxy
|
||||
|
||||
Причина: не совпадает `Host`, запрос уходит в `bk_http_default`.
|
||||
|
||||
Проверка:
|
||||
|
||||
```bash
|
||||
curl -I -H "Host: git.papatramp.ru" http://127.0.0.1
|
||||
```
|
||||
|
||||
Убедись, что есть ACL:
|
||||
|
||||
- `acl host_git hdr(host) -i git.papatramp.ru`
|
||||
- `use_backend bk_gitea if host_git`
|
||||
|
||||
## 3) 503 от HAProxy на Gitea
|
||||
|
||||
Причина: backend `bk_gitea` down.
|
||||
|
||||
Проверки:
|
||||
|
||||
```bash
|
||||
curl -I http://192.168.128.100:3000
|
||||
curl -I http://192.168.128.100:3000/api/healthz
|
||||
```
|
||||
|
||||
Если не отвечает:
|
||||
|
||||
```bash
|
||||
cd /opt/gitea
|
||||
sudo docker compose ps
|
||||
sudo docker compose logs --tail=200 gitea
|
||||
```
|
||||
|
||||
## 4) SSH push не работает (`Permission denied (publickey)`)
|
||||
|
||||
Проверь порт и доступ:
|
||||
|
||||
```bash
|
||||
nc -zv git.papatramp.ru 2222
|
||||
ssh -vvv -p 2222 git@git.papatramp.ru
|
||||
```
|
||||
|
||||
Убедись:
|
||||
|
||||
- публичный ключ добавлен в Gitea аккаунт;
|
||||
- в `~/.ssh/config` правильный `HostName`, `Port`, `IdentityFile`;
|
||||
- backend `bk_git_ssh` смотрит на правильный IP/порт.
|
||||
|
||||
## 5) В локалке не работает, а из интернета работает
|
||||
|
||||
Обычно это DNS/NAT loopback:
|
||||
|
||||
- настрой Split DNS (`git.papatramp.ru -> LAN IP HAProxy`);
|
||||
- либо включи Hairpin NAT на роутере.
|
||||
|
||||
## 6) Миграция не создает репозитории в Gitea
|
||||
|
||||
Проверь токен и права:
|
||||
|
||||
- `GITEA_TOKEN` должен иметь право создавать репозитории;
|
||||
- для org нужен доступ к организации;
|
||||
- `GITEA_OWNER_TYPE` должен соответствовать `user`/`org`.
|
||||
|
||||
Проверка API:
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/user"
|
||||
```
|
||||
|
||||
## 7) Private репозитории GitHub не видны в миграции
|
||||
|
||||
Проверь `GITHUB_TOKEN`:
|
||||
|
||||
- токен должен иметь права на чтение приватных репозиториев;
|
||||
- `GITHUB_OWNER` и `GITHUB_OWNER_TYPE` должны быть корректными.
|
||||
|
||||
## 8) LFS не перенесся
|
||||
|
||||
Включи:
|
||||
|
||||
```bash
|
||||
export MIGRATE_LFS=true
|
||||
```
|
||||
|
||||
И проверь наличие `git-lfs`:
|
||||
|
||||
```bash
|
||||
git lfs version
|
||||
```
|
||||
|
||||
## 9) Кривые редиректы/URL в Gitea
|
||||
|
||||
Проверь `ROOT_URL` в `app.ini`:
|
||||
|
||||
```ini
|
||||
[server]
|
||||
ROOT_URL = https://git.papatramp.ru/
|
||||
```
|
||||
|
||||
И заголовки от HAProxy в `bk_gitea` (`X-Forwarded-Proto`, `X-Forwarded-Host`, `Host`).
|
||||
Reference in New Issue
Block a user