pimvh.nftables
Wymagania
- Zainstalowany Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
Wymagane zmienne
Zapoznaj się ze zmiennymi pokazanymi w domyślnych ustawieniach.
Możesz dodać definicję zapory do zmiennych dla swojego hosta (../host_vars/[nazwa_hosta].yaml), grupy hostów (../group_vars/[nazwa_grupy].yaml) używając poniższej struktury (zobacz molecule.default.vars/test.yaml dla przykładu):
# ta zmienna odnosi się do reguł, które zostaną przesłane do zdalnego hosta
# jest to słownik tabel, z łańcuchami i regułami, zobacz molecule/default/vars/test.yaml
nftables_ruleset:
# klucze tego stają się tabelami
# muszą być:
# rodzina zapory i nazwa, np.
"inet firewall":
# opis tabeli
comment: "zapora urządzenia"
chains:
# nazwa odpowiedniego łańcucha
input:
# nazwa zmiennej z nftables_rules
# którą chciałbyś umieścić w tym łańcuchu
- input_hook
- valid_connections
- ...
# inna tabela o tej samej strukturze
# dozwolone rodziny to rzeczy takie jak inet, inet6, netdev, i inet,
# zobacz dokumentację nftables dla pełnego odniesienia
"inet foo":
# potencjalne reguły są definiowane pod `nftables_rules`
# każda reguła ma dwa atrybuty:
# -> def: definicja reguł lub zbioru reguł w poprawnej składni nftables
# -> depends_on: opcjonalna lista zależności od zmiennych z nftables_variables
# zobacz molecule/default/vars/test.yaml dla przykładu
nftables_rules:
input_hook: >
type filter hook input priority 0; policy drop;
valid_connections:
def: |
ct state established, related accept
ct state invalid drop
new_connections:
def: |
ct state new accept
# to są definicje zmiennych, które są włączane z depends_on
# upewnij się, że klucze pasują
# zobacz molecule/default/vars/test.yaml dla przykładu
nftables_variables:
tcp_ports:
comment: konfiguracja portów tcp
def: |
{% if nftables_open_tcp_ports_global %}define OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_global | join(",") }} }{% endif +%}
{% if nftables_open_tcp_ports_local %}define LOCAL_OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_local | join(",") }} }{% endif +%}
{% if nftables_open_tcp_ports_vpn %}define VPN_TCP_PORTS = { {{ nftables_open_tcp_ports_vpn | join(",") }} }{% endif %}
...
Playbook ansible zweryfikuje, czy poprawne zmienne zostały przekazane do roli przy użyciu argument_spec.
Przykładowy playbook
Minimalny (zakładając, że przekazałeś zmienne w innym miejscu):
hosts:
- foo
roles:
- pimvh.nftables
TLDR - Co się stanie, jeśli uruchomię to
- zweryfikuje, czy reguły/jeszcze inne zmienne są zdefiniowane
- zainstaluje nftables i interfejs python
- utworzy wymagane tabele nftable
- stworzy dynamiczne tabele jako puste tabele
- utworzy pustą listę blokowania
- skopiuje szablon nftables do katalogu nftables
- edytuje usługę nftables, aby wskazywała na nasz nowy główny plik
- tworzy skrypt do przeładowania zapory, który zrzuca tabele spoza naszej kontroli do plików i przeładowuje zaporę po tym
- gdy nftables_abuseip_api_key jest zdefiniowany, dodaje skrypt do pobierania listy blokowania za pomocą ich API i tworzy z tego usługę systemd
- włącza usługę nftable na żądanie
- odinstalowuje iptables na żądanie
Przyszłe usprawnienia
- Uprościć strukturę reguł, które muszą być przekazane
- Poprawić argument_specs dla
nftables_variables
inftables_ruleset
Zainstaluj
ansible-galaxy install pimvh.nftables
Licencja
gpl-3.0
Pobrania
110
Właściciel