Nftables

Z Wiki UnArt Slavičín
Verze z 19. 1. 2022, 07:45, kterou vytvořil Quimi (diskuse | příspěvky) (→‎Server)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaciSkočit na vyhledávání

Firewall

Jednoduchý firewall brány do internetu:

#!/usr/sbin/nft -f

# rozhraní přistupující do internetu
define wan = ens5f0

# rozhrani přístupující do lokální sítě
define lan = ens5f1

# vymažeme původní pravidla
flush ruleset

# tabulka pro filtrování provozu
table inet filter {

	# omezení příchozího provozu NA bránu
	chain input {
		type filter hook input priority 0

		ct state established,related counter accept "Povolení navázaných spojení z conntracku"

		icmp type echo-request counter accept comment "Povolení pingu na bránu"

		tcp dport ssh counter accept comment "Povolení SSH na bránu"

		iifname $wan counter drop comment "Zakázání přístupu na bránu z internetu"

		counter comment "Povolení přístupu na bránu z lokální sítě"
		policy accept
	}

	# omezení provozu PŘES bránu
	chain forward {
		type filter hook forward priority 0

		ct state established,related counter accept comment "Povolení navázaných spojení z conntracku"

		iifname lo counter accept comemnt "Povolení všeho na loopback rozhraní"

		oifname $wan counter accept comment "Povolení vše do internetu"

		counter comment "Ostatní provoz blokovat"
		policy drop
	}
}

# tabulka pro NAT
table ip nat {

	# mapování NATu ve formátu vnitřní IP : veřejná IP
	map snat_map {
		type ipv4_addr : ipv4_addr
		flags interval

		elements = {
			10.143.122.200 : 5.104.17.160
		}
	}

	# SNAT
	chain postrouting {
		type nat hook postrouting priority 0

		oifname $wan counter snat ip saddr map @snat_map comment "Vnitřní IP adresy z mapy snat_map sNATujeme za jim přidělené veřejné IP adresy"
		oifname $wan counter masquerade comment "Ostatní vnitřní IP adresy zaNATujeme za veřejnou IP adresu brány"
	}
}


Server

Jednoduchý firewall pro server:

#!/usr/sbin/nft -f

# vymazeme puvodni pravidla
flush ruleset

define UNART4 = {
        10.143.126.0/24,
        5.104.16.0/21
}

define UNART6 = {
        2a05:2100::/29
}
 
# tabulka pro filtrovani provozu (pro IPv4 i IPv6)
table inet filter {

       set unart4 {
               type ipv4_addr
               flags interval
               elements = $UNART4
       }

       set unart6 {
               type ipv6_addr
               flags interval
               elements = $UNART6
       }

       # omezení provozu na server
       chain input {
               type filter hook input priority 0

               ct state established,related counter accept

               icmp type echo-request counter accept comment "Povolení IPv4 pingu"
               icmpv6 type {
                       destination-unreachable,
                       echo-reply,
                       echo-request,
                       nd-neighbor-solicit,
                       nd-router-advert,
                       nd-neighbor-advert,
                       packet-too-big,
                       parameter-problem,
                       time-exceeded
               } counter accept comment "Povolení IPv6 pingu"

               tcp dport {
                        ftp,
                        ssh,
                        http,
                        https,
                        mysql,
                        tproxy
               } counter accept comment "Povolení TCP služeb (FTP, SSH, HTTP, HTTPs a MySQL)"

               ip saddr @unart4 udp dport snmp counter accept comment "Povolení SNMP z IPv4 rozsahů UnArtu"
               ip6 saddr @unart6 udp dport snmp counter accept comment "Povolení SNMP z IPv6 rozsahů UnArtu"

               counter comment "Všechno ostatní zakaž"
               policy drop
        }

        # omezení provozu ze serveru
        chain output {
               type filter hook output priority 0

               counter comment "Všechno povol"
               policy accept
        }
}


Dokumentace

Logování provozu