initial commit
This commit is contained in:
138
02/02-k-git-server-deploy.10.sh
Executable file
138
02/02-k-git-server-deploy.10.sh
Executable file
@@ -0,0 +1,138 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 10: ОБНОВЛЕНИЕ FIREWALL
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 02-k-git-server-deploy.10.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/02-k-git-server-deploy.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 10: ОБНОВЛЕНИЕ FIREWALL (nftables)"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 10.1 Проверка текущих правил
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Текущие правила"
|
||||
|
||||
if command -v nft &>/dev/null; then
|
||||
echo "Текущие правила nftables:"
|
||||
nft list ruleset 2>/dev/null | head -30
|
||||
else
|
||||
print_warning "nftables не установлен. Установка..."
|
||||
apt install -y nftables
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 10.2 Создание новой конфигурации
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Создание конфигурации"
|
||||
|
||||
# Backup существующей конфигурации
|
||||
if [[ -f /etc/nftables.conf ]]; then
|
||||
cp /etc/nftables.conf /etc/nftables.conf.backup.$(date +%Y%m%d_%H%M%S)
|
||||
fi
|
||||
|
||||
cat > /etc/nftables.conf << EOF
|
||||
#!/usr/sbin/nft -f
|
||||
|
||||
# Firewall для Git Server (Gitea)
|
||||
# eth0 ($IFACE_EXT) - внешний интерфейс (ограниченный доступ)
|
||||
# eth1 ($IFACE_INT) - внутренний интерфейс (доверенная зона)
|
||||
|
||||
flush ruleset
|
||||
|
||||
table inet filter {
|
||||
chain input {
|
||||
type filter hook input priority 0; policy drop;
|
||||
|
||||
# Разрешить loopback
|
||||
iif lo accept
|
||||
|
||||
# Установленные соединения
|
||||
ct state established,related accept
|
||||
|
||||
# Блокировать invalid пакеты
|
||||
ct state invalid drop
|
||||
|
||||
# ICMP (ограниченно)
|
||||
ip protocol icmp icmp type echo-request limit rate 1/second accept
|
||||
ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 1/second accept
|
||||
ip protocol icmp icmp type { destination-unreachable, time-exceeded } accept
|
||||
ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, time-exceeded } accept
|
||||
|
||||
# === ВНЕШНИЙ ИНТЕРФЕЙС ($IFACE_EXT) ===
|
||||
# SSH для администрирования
|
||||
iifname $IFACE_EXT tcp dport 22 accept
|
||||
|
||||
# HTTP (для Let's Encrypt challenge)
|
||||
iifname $IFACE_EXT tcp dport 80 accept
|
||||
|
||||
# HTTPS (Gitea)
|
||||
iifname $IFACE_EXT tcp dport 443 accept
|
||||
|
||||
# === ВНУТРЕННИЙ ИНТЕРФЕЙС ($IFACE_INT) - доверенная зона ===
|
||||
iifname $IFACE_INT tcp dport 22 accept
|
||||
iifname $IFACE_INT tcp dport 80 accept
|
||||
iifname $IFACE_INT tcp dport 443 accept
|
||||
iifname $IFACE_INT tcp dport 3000 accept
|
||||
|
||||
# Логирование заблокированных (опционально - раскомментируйте для отладки)
|
||||
# log prefix "nft drop: " counter
|
||||
|
||||
# Счётчик отброшенных пакетов
|
||||
counter
|
||||
}
|
||||
|
||||
chain forward {
|
||||
type filter hook forward priority 0; policy drop;
|
||||
}
|
||||
|
||||
chain output {
|
||||
type filter hook output priority 0; policy accept;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
print_success "Конфигурация создана"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 10.3 Проверка синтаксиса
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка синтаксиса"
|
||||
|
||||
if nft -c -f /etc/nftables.conf 2>&1; then
|
||||
print_success "Синтаксис валиден"
|
||||
else
|
||||
print_error "Ошибка синтаксиса nftables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 10.4 Применение правил
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Применение правил"
|
||||
|
||||
read -p "Применить правила firewall? [y/N]: " APPLY
|
||||
|
||||
if [[ "$APPLY" =~ ^[Yy]$ ]]; then
|
||||
nft -f /etc/nftables.conf
|
||||
systemctl enable nftables
|
||||
print_success "Firewall применён"
|
||||
else
|
||||
print_warning "Правила не применены"
|
||||
print_info "Примените вручную: nft -f /etc/nftables.conf"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 10.5 Показать активные правила
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Активные правила"
|
||||
|
||||
echo ""
|
||||
nft list ruleset
|
||||
|
||||
print_success "Шаг 10 завершён: Firewall настроен"
|
||||
Reference in New Issue
Block a user