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 table
|
||||||
@end deftp
|
@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 NTP (Network Time Protocol), service
|
||||||
@cindex ntpd, service for the Network Time Protocol daemon
|
@cindex ntpd, service for the Network Time Protocol daemon
|
||||||
@cindex real time clock
|
@cindex real time clock
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
|
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
|
||||||
;;; Copyright © 2019 Florian Pelz <pelzflorian@pelzflorian.de>
|
;;; Copyright © 2019 Florian Pelz <pelzflorian@pelzflorian.de>
|
||||||
;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||||
|
;;; Copyright © 2019 Sou Bunnbu <iyzsong@member.fsf.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -144,7 +145,14 @@
|
||||||
iptables-configuration-iptables
|
iptables-configuration-iptables
|
||||||
iptables-configuration-ipv4-rules
|
iptables-configuration-ipv4-rules
|
||||||
iptables-configuration-ipv6-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:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
||||||
|
@ -1415,4 +1423,76 @@ COMMIT
|
||||||
(list (service-extension shepherd-root-service-type
|
(list (service-extension shepherd-root-service-type
|
||||||
(compose list iptables-shepherd-service))))))
|
(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
|
;;; networking.scm ends here
|
||||||
|
|
Loading…
Reference in New Issue