From: Michael Tremer <michael.tremer@ipfire.org>
To: development@lists.ipfire.org
Subject: Re: [PATCH 2/2] firewall: Move dropping hostile networks to rules.pl.
Date: Tue, 01 Mar 2022 13:23:29 +0000 [thread overview]
Message-ID: <4B68B5BE-A13D-4DED-9FDD-0BE3549355C4@ipfire.org> (raw)
In-Reply-To: <20220227134903.1828-2-stefan.schantl@ipfire.org>
[-- Attachment #1: Type: text/plain, Size: 4311 bytes --]
Reviewed-by: Michael Tremer <michael.tremer(a)ipfire.org>
> On 27 Feb 2022, at 13:49, Stefan Schantl <stefan.schantl(a)ipfire.org> wrote:
>
> Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
> ---
> config/firewall/rules.pl | 33 +++++++++++++++++++++++++++++++++
> src/initscripts/system/firewall | 23 ++++++++---------------
> 2 files changed, 41 insertions(+), 15 deletions(-)
>
> diff --git a/config/firewall/rules.pl b/config/firewall/rules.pl
> index 7a7c8ed31..b12764d18 100644
> --- a/config/firewall/rules.pl
> +++ b/config/firewall/rules.pl
> @@ -59,6 +59,9 @@ my @PRIVATE_NETWORKS = (
> # MARK masks
> my $NAT_MASK = 0x0f000000;
>
> +# Country code, which is used to mark hostile networks.
> +my $HOSTILE_CCODE = "XD";
> +
> my %fwdfwsettings=();
> my %fwoptions = ();
> my %defaultNetworks=();
> @@ -97,6 +100,9 @@ if (-e "$locationfile") {
> # Get all available locations.
> my @locations = &Location::Functions::get_locations();
>
> +# Name or the RED interface.
> +my $RED_DEV = &General::get_red_interface();
> +
> my @log_limit_options = &make_log_limit_options();
>
> my $POLICY_INPUT_ALLOWED = 0;
> @@ -135,6 +141,9 @@ sub main {
> # Load Location block rules.
> &locationblock();
>
> + # Load rules to block hostile networks.
> + &drop_hostile_networks();
> +
> # Reload firewall policy.
> run("/usr/sbin/firewall-policy");
>
> @@ -676,6 +685,30 @@ sub locationblock {
> }
> }
>
> +sub drop_hostile_networks () {
> + # Flush the HOSTILE firewall chain.
> + run("$IPTABLES -F HOSTILE");
> +
> + # If dropping hostile networks is not enabled, we are finished here.
> + if ($fwoptions{'DROPHOSTILE'} ne "on") {
> + # Exit function.
> + return;
> + }
> +
> + # Call function to load the network list of hostile networks.
> + &ipset_restore($HOSTILE_CCODE);
> +
> + # Setup rules to pass traffic which does not belong to a hostile network.
> + run("$IPTABLES -A HOSTILE -i $RED_DEV -m set ! --match-set $HOSTILE_CCODE src -j RETURN");
> + run("$IPTABLES -A HOSTILE -o $RED_DEV -m set ! --match-set $HOSTILE_CCODE dst -j RETURN");
> +
> + # Setup logging.
> + run("$IPTABLES -A HOSTILE -m limit --limit 10/second -j LOG --log-prefix \"DROP_HOSTILE \"");
> +
> + # Drop traffic from/to hostile network.
> + run("$IPTABLES -A HOSTILE -j DROP -m comment --comment \"DROP_HOSTILE\"");
> +}
> +
> sub get_protocols {
> my $hash = shift;
> my $key = shift;
> diff --git a/src/initscripts/system/firewall b/src/initscripts/system/firewall
> index 22e3fae59..2c4d3163b 100644
> --- a/src/initscripts/system/firewall
> +++ b/src/initscripts/system/firewall
> @@ -169,21 +169,6 @@ iptables_init() {
> iptables -t nat -N CUSTOMPOSTROUTING
> iptables -t nat -A POSTROUTING -j CUSTOMPOSTROUTING
>
> - # Log and drop any traffic from and to networks known as being hostile, posing
> - # a technical threat to our users (i. e. listed at Spamhaus DROP et al.)
> - iptables -N HOSTILE
> - if [ "$DROPHOSTILE" == "on" ]; then
> - # Call ipset and load the list which contains the hostile networks.
> - ipset restore < $IPSET_DB_DIR/CC_XD.ipset4
> -
> - iptables -A HOSTILE -m limit --limit 10/second -j LOG --log-prefix "DROP_HOSTILE "
> - iptables -A INPUT -i $IFACE -m set --match-set CC_XD src -j HOSTILE
> - iptables -A FORWARD -i $IFACE -m set --match-set CC_XD src -j HOSTILE
> - iptables -A FORWARD -o $IFACE -m set --match-set CC_XD dst -j HOSTILE
> - iptables -A OUTPUT -o $IFACE -m set --match-set CC_XD src -j HOSTILE
> - fi
> - iptables -A HOSTILE -j DROP -m comment --comment "DROP_HOSTILE"
> -
> # IPS (Guardian) chains
> iptables -N GUARDIAN
> iptables -A INPUT -j GUARDIAN
> @@ -274,6 +259,14 @@ iptables_init() {
> iptables -A OUTPUT -o "${BLUE_DEV}" -j DHCPBLUEOUTPUT
> fi
>
> + # Chains for networks known as being hostile, posing a technical threat to our users
> + # (i. e. listed at Spamhaus DROP et al.)
> + iptables -N HOSTILE
> + iptables -A INPUT -i $IFACE -j HOSTILE
> + iptables -A FORWARD -i $IFACE -j HOSTILE
> + iptables -A FORWARD -o $IFACE -j HOSTILE
> + iptables -A OUTPUT -o $IFACE -j HOSTILE
> +
> # Tor (inbound)
> iptables -N TOR_INPUT
> iptables -A INPUT -j TOR_INPUT
> --
> 2.30.2
>
next prev parent reply other threads:[~2022-03-01 13:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-27 13:49 [PATCH 1/2] rules.pl: Allow dynamic destory of loaded but unused ipset sets Stefan Schantl
2022-02-27 13:49 ` [PATCH 2/2] firewall: Move dropping hostile networks to rules.pl Stefan Schantl
2022-03-01 13:23 ` Michael Tremer [this message]
2022-03-01 13:23 ` [PATCH 1/2] rules.pl: Allow dynamic destory of loaded but unused ipset sets Michael Tremer
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=4B68B5BE-A13D-4DED-9FDD-0BE3549355C4@ipfire.org \
--to=michael.tremer@ipfire.org \
--cc=development@lists.ipfire.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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox