From: Arun Isaac <arunisaac@systemreboot.net>
To: 32465@debbugs.gnu.org
Subject: [bug#32465] Add iptables service
Date: Fri, 17 Aug 2018 16:54:19 +0530 [thread overview]
Message-ID: <cu7tvnt6xss.fsf@systemreboot.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 543 bytes --]
I have written a service to configure iptables rules. What tests should
I write for this service? I see the following two approaches to tests:
- Dump the iptables rules using iptables-save and verify that they
matches the configured rules.
- Configure iptables to block certain ports and allow some other
ports. Then, run a service on those ports and check if it is possible to
reach them.
After we have iterated a few times, and converged on the final patch for
this service, I will also contribute a similar service for ip6tables.
[-- Attachment #2: 0001-gnu-services-Add-iptables-service.patch --]
[-- Type: text/x-patch, Size: 4087 bytes --]
From 53e0b56ea0ee4de75ab8749b0ce0ad9a2eebe671 Mon Sep 17 00:00:00 2001
From: Arun Isaac <arunisaac@systemreboot.net>
Date: Fri, 17 Aug 2018 16:39:07 +0530
Subject: [PATCH] gnu: services: Add iptables service.
* gnu/services/networking.scm (<iptables-configuration>): New record type.
(iptables-service-type): New variable.
* doc/guix.texi (Networking Services): Document it.
---
doc/guix.texi | 27 ++++++++++++++++++++++
gnu/services/networking.scm | 45 ++++++++++++++++++++++++++++++++++++-
2 files changed, 71 insertions(+), 1 deletion(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 0b72e5d8c..d5ff43811 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11287,6 +11287,33 @@ Thus, it can be instantiated like this:
@end lisp
@end defvr
+@cindex iptables
+@defvr {Scheme Variabe} iptables-service-type
+This is the service type to set up an iptables coniguration. iptables is a
+packet filtering framework supported by the Linux kernel. It can be
+instantiated as:
+
+@lisp
+(service iptables-service-type
+ (iptables-configuration
+ (rules (local-file "iptables.rules"))))
+@end lisp
+
+@deftp {Data Type} iptables-configuration
+The data type representing the configuration of @command{iptables}.
+
+@table @asis
+@item @code{iptables} (default: @code{iptables})
+The iptables package that provides @code{iptables-restore}.
+@item @code{rules}
+The iptables rules to use. This is required. It will be passed to
+@code{iptables-restore}. This may be any ``file-like'' object
+(@pxref{G-Expressions, file-like objects}).
+@end table
+@end deftp
+
+@end defvr
+
@cindex NTP
@cindex real time clock
@deffn {Scheme Procedure} ntp-service [#:ntp @var{ntp}] @
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index d5d0cf9d1..46e0ee3d0 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -7,6 +7,7 @@
;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -102,7 +103,13 @@
wpa-supplicant-service-type
openvswitch-service-type
- openvswitch-configuration))
+ openvswitch-configuration
+
+ iptables-configuration
+ iptables-configuration?
+ iptables-configuration-iptables
+ iptables-configuration-rules
+ iptables-service-type))
;;; Commentary:
;;;
@@ -1086,4 +1093,40 @@ networking."))))
switch designed to enable massive network automation through programmatic
extension.")))
+;;;
+;;; iptables
+;;;
+
+(define-record-type* <iptables-configuration>
+ iptables-configuration make-iptables-configuration iptables-configuration?
+ (iptables iptables-configuration-iptables
+ (default iptables))
+ (rules iptables-configuration-rules))
+
+(define iptables-shepherd-service
+ (match-lambda
+ (($ <iptables-configuration> iptables rules)
+ (let ((iptables-restore (file-append iptables "/sbin/iptables-restore")))
+ (shepherd-service
+ (documentation "Packet filtering framework")
+ (provision '(iptables))
+ (start #~(lambda _ (invoke #$iptables-restore #$rules)))
+ (stop #~(lambda _ (invoke #$iptables-restore
+ #$(plain-file "iptables.rules"
+ "*filter
+:INPUT ACCEPT [0:0]
+:FORWARD ACCEPT [0:0]
+:OUTPUT ACCEPT [0:0]
+COMMIT
+")))))))))
+
+(define iptables-service-type
+ (service-type
+ (name 'iptables)
+ (description
+ "Run @command{iptables-restore}, setting up the specified rules.")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ (compose list iptables-shepherd-service))))))
+
;;; networking.scm ends here
--
2.18.0
next reply other threads:[~2018-08-17 11:25 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-17 11:24 Arun Isaac [this message]
2018-09-04 13:14 ` [bug#32465] Add iptables service Ludovic Courtès
2018-09-04 13:52 ` Julien Lepiller
2018-09-05 9:40 ` Arun Isaac
2018-09-10 12:51 ` Ludovic Courtès
2018-09-05 9:42 ` Arun Isaac
2018-09-14 10:59 ` Arun Isaac
2018-09-17 21:05 ` Ludovic Courtès
2018-09-18 6:24 ` Arun Isaac
2018-09-18 14:39 ` Ludovic Courtès
2018-09-18 16:02 ` Arun Isaac
2018-09-19 20:41 ` Ludovic Courtès
2018-09-20 7:50 ` bug#32465: " Arun Isaac
2018-09-11 6:53 ` [bug#32465] " Björn Höfling
2018-09-11 8:43 ` Arun Isaac
2018-09-15 12:27 ` Rutger Helling
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cu7tvnt6xss.fsf@systemreboot.net \
--to=arunisaac@systemreboot.net \
--cc=32465@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.