ansible/MY/templates/nft/nftables.conf.j2

72 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

2026-05-22 06:43:27 +04:00
#!/usr/sbin/nft -f
# ========== ПЕРЕМЕННЫЕ ==========
define VIP_ADDRESSES = {
{% for vip in vip_addresses %}
{{ vip }}{% if not loop.last %},{% endif %}
{% endfor %}
}
define WHITE_LIST_PORTS = {
{% for port in white_list_tcp_ports %}
{{ port }}{% if not loop.last %},{% endif %}
{% endfor %}
}
define WHITE_LIST_PORTS_UDP = {
{% for port in white_list_udp_ports %}
{{ port }}{% if not loop.last %},{% endif %}
{% endfor %}
}
flush ruleset
table inet my-firewall {
# ========== ЦЕПОЧКА ДЛЯ ВХОДЯЩИХ ПАКЕТОВ (INPUT) ==========
chain input {
type filter hook input priority -10; policy drop;
# Разрешаем уже установленные соединения
ct state established,related accept
# Разрешаем loopback
iifname "lo" accept
# Разрешаем ping
icmp type echo-request accept
# --- VIP-адреса (полный доступ на INPUT) ---
ip saddr $VIP_ADDRESSES accept
# --- Белый список портов для всех остальных на INPUT ---
tcp dport $WHITE_LIST_PORTS accept
udp dport $WHITE_LIST_PORTS_UDP accept
# Логируем и дропаем всё остальное
log prefix "{{ nftables_log_prefix_input }}" counter drop
}
# ========== ЦЕПОЧКА ДЛЯ МАРШРУТИЗАЦИИ (FORWARD) ==========
chain forward {
type filter hook forward priority -10; policy drop;
# Разрешаем уже установленные соединения
ct state established,related accept
# --- VIP-адреса (полный доступ ко всем контейнерам) ---
ip saddr $VIP_ADDRESSES accept
# --- Белый список портов для всех остальных ---
tcp dport $WHITE_LIST_PORTS accept
udp dport $WHITE_LIST_PORTS_UDP accept
# ВСЁ остальное блокируем
log prefix "{{ nftables_log_prefix_forward }}" counter drop
}
# ========== ЦЕПОЧКА ДЛЯ ИСХОДЯЩИХ ПАКЕТОВ (OUTPUT) ==========
chain output {
type filter hook output priority -10; policy accept;
}
}