services: Add nftables-service-type.
* gnu/services/networking.scm (%default-nftables-ruleset): New variable. (<nftables-configuration>): New record type. (nftables-shepherd-service): New procedure. (nftables-service-type): New service type. * doc/guix.texi (Networking Services): Document it.
This commit is contained in:
parent
62790449e6
commit
3c4f5ad7f4
|
@ -13041,6 +13041,33 @@ objects}).
|
|||
@end table
|
||||
@end deftp
|
||||
|
||||
@cindex nftables
|
||||
@defvr {Scheme Variable} nftables-service-type
|
||||
This is the service type to set up a nftables configuration. nftables is a
|
||||
netfilter project that aims to replace the existing iptables, ip6tables,
|
||||
arptables and ebtables framework. It provides a new packet filtering
|
||||
framework, a new user-space utility @command{nft}, and a compatibility layer
|
||||
for iptables. This service comes with a default ruleset
|
||||
@code{%default-nftables-ruleset} that rejecting all incomming connections
|
||||
except those to the ssh port 22. To use it, simply write:
|
||||
|
||||
@lisp
|
||||
(service nftables-service-type)
|
||||
@end lisp
|
||||
@end defvr
|
||||
|
||||
@deftp {Data Type} nftables-configuration
|
||||
The data type representing the configuration of nftables.
|
||||
|
||||
@table @asis
|
||||
@item @code{package} (default: @code{nftables})
|
||||
The nftables package that provides @command{nft}.
|
||||
@item @code{ruleset} (default: @code{%default-nftables-ruleset})
|
||||
The nftables ruleset to use. This may be any ``file-like'' object
|
||||
(@pxref{G-Expressions, file-like objects}).
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
@cindex NTP (Network Time Protocol), service
|
||||
@cindex ntpd, service for the Network Time Protocol daemon
|
||||
@cindex real time clock
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
|
||||
;;; Copyright © 2019 Florian Pelz <pelzflorian@pelzflorian.de>
|
||||
;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||
;;; Copyright © 2019 Sou Bunnbu <iyzsong@member.fsf.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -144,7 +145,14 @@
|
|||
iptables-configuration-iptables
|
||||
iptables-configuration-ipv4-rules
|
||||
iptables-configuration-ipv6-rules
|
||||
iptables-service-type))
|
||||
iptables-service-type
|
||||
|
||||
nftables-service-type
|
||||
nftables-configuration
|
||||
nftables-configuration?
|
||||
nftables-configuration-package
|
||||
nftables-configuration-ruleset
|
||||
%default-nftables-ruleset))
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
|
@ -1415,4 +1423,76 @@ COMMIT
|
|||
(list (service-extension shepherd-root-service-type
|
||||
(compose list iptables-shepherd-service))))))
|
||||
|
||||
;;;
|
||||
;;; nftables
|
||||
;;;
|
||||
|
||||
(define %default-nftables-ruleset
|
||||
(plain-file "nftables.conf"
|
||||
"# A simple and safe firewall
|
||||
table inet filter {
|
||||
chain input {
|
||||
type filter hook input priority 0; policy drop;
|
||||
|
||||
# early drop of invalid connections
|
||||
ct state invalid drop
|
||||
|
||||
# allow established/related connections
|
||||
ct state { established, related } accept
|
||||
|
||||
# allow from loopback
|
||||
iifname lo accept
|
||||
|
||||
# allow icmp
|
||||
ip protocol icmp accept
|
||||
ip6 nexthdr icmpv6 accept
|
||||
|
||||
# allow ssh
|
||||
tcp dport ssh accept
|
||||
|
||||
# reject everything else
|
||||
reject with icmpx type port-unreachable
|
||||
}
|
||||
chain forward {
|
||||
type filter hook forward priority 0; policy drop;
|
||||
}
|
||||
chain output {
|
||||
type filter hook output priority 0; policy accept;
|
||||
}
|
||||
}
|
||||
"))
|
||||
|
||||
(define-record-type* <nftables-configuration>
|
||||
nftables-configuration
|
||||
make-nftables-configuration
|
||||
nftables-configuration?
|
||||
(package nftables-configuration-package
|
||||
(default nftables))
|
||||
(ruleset nftables-configuration-ruleset ; file-like object
|
||||
(default %default-nftables-ruleset)))
|
||||
|
||||
(define nftables-shepherd-service
|
||||
(match-lambda
|
||||
(($ <nftables-configuration> package ruleset)
|
||||
(let ((nft (file-append package "/sbin/nft")))
|
||||
(shepherd-service
|
||||
(documentation "Packet filtering and classification")
|
||||
(provision '(nftables))
|
||||
(start #~(lambda _
|
||||
(invoke #$nft "--file" #$ruleset)))
|
||||
(stop #~(lambda _
|
||||
(invoke #$nft "flush" "ruleset"))))))))
|
||||
|
||||
(define nftables-service-type
|
||||
(service-type
|
||||
(name 'nftables)
|
||||
(description
|
||||
"Run @command{nft}, setting up the specified ruleset.")
|
||||
(extensions
|
||||
(list (service-extension shepherd-root-service-type
|
||||
(compose list nftables-shepherd-service))
|
||||
(service-extension profile-service-type
|
||||
(compose list nftables-configuration-package))))
|
||||
(default-value (nftables-configuration))))
|
||||
|
||||
;;; networking.scm ends here
|
||||
|
|
Loading…
Reference in New Issue