pimvh.nftables

Test cząsteczek

Wymagania

  1. 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 i nftables_ruleset
O projekcie

role to configure nftables using a YAML file

Zainstaluj
ansible-galaxy install pimvh.nftables
Licencja
gpl-3.0
Pobrania
110
Właściciel