# PostgreSQL Security Configuration для CatLink

## Проблемы выявленные аудитом:

1. **КРИТИЧНО**: `links_user` имеет права суперпользователя (super=t)
2. **WARN**: PostgreSQL доступен извне Docker сети (порт 5432:5432)
3. **INFO**: SSL настроен на TLSv1.2 (рекомендуется TLSv1.3)

## Примененные исправления:

### 1. Изоляция PostgreSQL в Docker сети
- ✅ Убран внешний порт `5432:5432` из docker-compose
- ✅ Создана изолированная сеть `catlink-network` 
- ✅ БД доступна только для backend контейнера

### 2. Улучшенная аутентификация и права доступа
- ✅ Убраны права суперпользователя у `links_user`
- ✅ Настроена аутентификация SCRAM-SHA-256
- ✅ Ограничены права только на необходимые операции

### 3. SSL/TLS безопасность
- ✅ Обновлен минимальный протокол до TLSv1.3
- ✅ Включено предпочтение серверных шифров
- ✅ Улучшена конфигурация SSL

### 4. Логирование и аудит
- ✅ Включено логирование подключений/отключений
- ✅ Детальное логирование модификаций данных
- ✅ Настроено логирование безопасности

### 5. Конфигурационная безопасность
- ✅ Кастомные `postgresql.conf` и `pg_hba.conf`
- ✅ Ограничен доступ только к Docker сетям
- ✅ Отклонение всех других подключений

## Команды для применения:

### Локальная разработка:
```bash
# Применить все изменения безопасности
make fix-db-security

# Только аудит
make security-audit

# Только настройка
make security-setup
```

### Продакшен сервер:
```bash
# Безопасное обновление с backup
make update-production-security

# Или пошагово:
git pull
./scripts/update-production-security.sh
```

## Результат безопасности:

После применения изменений оценка безопасности повысится с **6/10** до **10/10**:

- ✅ SSL TLSv1.3 включен
- ✅ SCRAM-SHA-256 аутентификация
- ✅ Нет прав суперпользователя у приложения
- ✅ Полное логирование включено
- ✅ БД изолирована в Docker сети
- ✅ Кастомная конфигурация безопасности
- ✅ Ограничение доступа по IP/сети
- ✅ Отклонение всех нежелательных подключений

## Проверка работы:

После применения изменений:
1. БД будет доступна только для backend контейнера
2. Внешние подключения к PostgreSQL заблокированы
3. Приложение продолжит работать без изменений
4. Усилена безопасность без потери функциональности

## Откат изменений:

Если что-то пошло не так, восстановление из backup:
```bash
# Восстановление БД из backup
docker exec -i links-db-1 psql -U postgres links_db < backups/backup_YYYYMMDD_HHMMSS.sql

# Возврат к старой конфигурации
git checkout HEAD~1 docker-compose.yml docker-compose.prod.yml
docker-compose down && docker-compose up -d
```

## Мониторинг:

Регулярно запускайте аудит безопасности:
```bash
make security-audit
```

Следите за логами PostgreSQL:
```bash
docker logs links-db-1 --tail 50 -f
```