network: eliminate code that uses default iptables chains

The network driver has put all its rules into private chains (created
by libvirt) since commit 7431b3eb9a, which was included in
libvirt-5.1.0. When the conversion was made, code was included that
would attempt to delete existing rules in the default chains, to make
it possible to upgrade libvirt without restarting the host OS.

Almost 3 years has passed, and it is doubtful that anyone will be
attempting to upgrade directly from a pre-5.1.0 libvirt to something
as new as 8.0.0 (possibly with the exception of upgrading the entire
OS to a new release, which would include also rebooting), so it is now
safe to remove this code.

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Laine Stump 2021-11-08 12:15:29 -05:00
parent d9fdc65a51
commit b449603192
4 changed files with 49 additions and 95 deletions

View File

@ -2501,7 +2501,6 @@ iptablesRemoveTcpInput;
iptablesRemoveTcpOutput;
iptablesRemoveUdpInput;
iptablesRemoveUdpOutput;
iptablesSetDeletePrivate;
iptablesSetupPrivateChains;

View File

@ -37,7 +37,7 @@ VIR_LOG_INIT("network.bridge_driver_linux");
static virOnceControl createdOnce;
static bool chainInitDone; /* true iff networkSetupPrivateChains was ever called */
static bool createdChains; /* true iff networkSetupPrivateChains created chains during most recent call */
static virErrorPtr errInitV4;
static virErrorPtr errInitV6;
@ -50,7 +50,6 @@ static void networkSetupPrivateChains(void)
VIR_DEBUG("Setting up global firewall chains");
createdChains = false;
virFreeError(errInitV4);
errInitV4 = NULL;
virFreeError(errInitV6);
@ -63,12 +62,10 @@ static void networkSetupPrivateChains(void)
errInitV4 = virSaveLastError();
virResetLastError();
} else {
if (rc) {
if (rc)
VIR_DEBUG("Created global IPv4 chains");
createdChains = true;
} else {
else
VIR_DEBUG("Global IPv4 chains already exist");
}
}
rc = iptablesSetupPrivateChains(VIR_FIREWALL_LAYER_IPV6);
@ -78,12 +75,10 @@ static void networkSetupPrivateChains(void)
errInitV6 = virSaveLastError();
virResetLastError();
} else {
if (rc) {
if (rc)
VIR_DEBUG("Created global IPv6 chains");
createdChains = true;
} else {
else
VIR_DEBUG("Global IPv6 chains already exist");
}
}
chainInitDone = true;
@ -145,7 +140,7 @@ networkHasRunningNetworksWithFW(virNetworkDriverState *driver)
void
networkPreReloadFirewallRules(virNetworkDriverState *driver,
bool startup,
bool startup G_GNUC_UNUSED,
bool force)
{
/*
@ -183,31 +178,13 @@ networkPreReloadFirewallRules(virNetworkDriverState *driver,
}
ignore_value(virOnce(&createdOnce, networkSetupPrivateChains));
/*
* If this is initial startup, and we just created the
* top level private chains we either
*
* - upgraded from old libvirt
* - freshly booted from clean state
*
* In the first case we must delete the old rules from
* the built-in chains, instead of our new private chains.
* In the second case it doesn't matter, since no existing
* rules will be present. Thus we can safely just tell it
* to always delete from the builin chain
*/
if (startup && createdChains) {
VIR_DEBUG("Requesting cleanup of legacy firewall rules");
iptablesSetDeletePrivate(false);
}
}
}
void networkPostReloadFirewallRules(bool startup G_GNUC_UNUSED)
{
iptablesSetDeletePrivate(true);
}

View File

@ -47,8 +47,6 @@ enum {
REMOVE
};
static bool deletePrivate = true;
typedef struct {
const char *parent;
const char *child;
@ -162,17 +160,9 @@ iptablesSetupPrivateChains(virFirewallLayer layer)
}
void
iptablesSetDeletePrivate(bool pvt)
{
deletePrivate = pvt;
}
static void
iptablesInput(virFirewall *fw,
virFirewallLayer layer,
bool pvt,
const char *iface,
int port,
int action,
@ -186,7 +176,7 @@ iptablesInput(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_INP" : "INPUT",
"LIBVIRT_INP",
"--in-interface", iface,
"--protocol", tcp ? "tcp" : "udp",
"--destination-port", portstr,
@ -197,7 +187,6 @@ iptablesInput(virFirewall *fw,
static void
iptablesOutput(virFirewall *fw,
virFirewallLayer layer,
bool pvt,
const char *iface,
int port,
int action,
@ -211,7 +200,7 @@ iptablesOutput(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_OUT" : "OUTPUT",
"LIBVIRT_OUT",
"--out-interface", iface,
"--protocol", tcp ? "tcp" : "udp",
"--destination-port", portstr,
@ -234,7 +223,7 @@ iptablesAddTcpInput(virFirewall *fw,
const char *iface,
int port)
{
iptablesInput(fw, layer, true, iface, port, ADD, 1);
iptablesInput(fw, layer, iface, port, ADD, 1);
}
/**
@ -252,7 +241,7 @@ iptablesRemoveTcpInput(virFirewall *fw,
const char *iface,
int port)
{
iptablesInput(fw, layer, deletePrivate, iface, port, REMOVE, 1);
iptablesInput(fw, layer, iface, port, REMOVE, 1);
}
/**
@ -270,7 +259,7 @@ iptablesAddUdpInput(virFirewall *fw,
const char *iface,
int port)
{
iptablesInput(fw, layer, true, iface, port, ADD, 0);
iptablesInput(fw, layer, iface, port, ADD, 0);
}
/**
@ -288,7 +277,7 @@ iptablesRemoveUdpInput(virFirewall *fw,
const char *iface,
int port)
{
iptablesInput(fw, layer, deletePrivate, iface, port, REMOVE, 0);
iptablesInput(fw, layer, iface, port, REMOVE, 0);
}
/**
@ -306,7 +295,7 @@ iptablesAddTcpOutput(virFirewall *fw,
const char *iface,
int port)
{
iptablesOutput(fw, layer, true, iface, port, ADD, 1);
iptablesOutput(fw, layer, iface, port, ADD, 1);
}
/**
@ -324,7 +313,7 @@ iptablesRemoveTcpOutput(virFirewall *fw,
const char *iface,
int port)
{
iptablesOutput(fw, layer, deletePrivate, iface, port, REMOVE, 1);
iptablesOutput(fw, layer, iface, port, REMOVE, 1);
}
/**
@ -342,7 +331,7 @@ iptablesAddUdpOutput(virFirewall *fw,
const char *iface,
int port)
{
iptablesOutput(fw, layer, true, iface, port, ADD, 0);
iptablesOutput(fw, layer, iface, port, ADD, 0);
}
/**
@ -360,7 +349,7 @@ iptablesRemoveUdpOutput(virFirewall *fw,
const char *iface,
int port)
{
iptablesOutput(fw, layer, deletePrivate, iface, port, REMOVE, 0);
iptablesOutput(fw, layer, iface, port, REMOVE, 0);
}
@ -400,7 +389,6 @@ static char *iptablesFormatNetwork(virSocketAddr *netaddr,
*/
static int
iptablesForwardAllowOut(virFirewall *fw,
bool pvt,
virSocketAddr *netaddr,
unsigned int prefix,
const char *iface,
@ -418,7 +406,7 @@ iptablesForwardAllowOut(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWO" : "FORWARD",
"LIBVIRT_FWO",
"--source", networkstr,
"--in-interface", iface,
"--out-interface", physdev,
@ -428,7 +416,7 @@ iptablesForwardAllowOut(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWO" : "FORWARD",
"LIBVIRT_FWO",
"--source", networkstr,
"--in-interface", iface,
"--jump", "ACCEPT",
@ -457,7 +445,7 @@ iptablesAddForwardAllowOut(virFirewall *fw,
const char *iface,
const char *physdev)
{
return iptablesForwardAllowOut(fw, true, netaddr, prefix, iface, physdev, ADD);
return iptablesForwardAllowOut(fw, netaddr, prefix, iface, physdev, ADD);
}
/**
@ -480,7 +468,7 @@ iptablesRemoveForwardAllowOut(virFirewall *fw,
const char *iface,
const char *physdev)
{
return iptablesForwardAllowOut(fw, deletePrivate, netaddr, prefix, iface, physdev, REMOVE);
return iptablesForwardAllowOut(fw, netaddr, prefix, iface, physdev, REMOVE);
}
@ -489,7 +477,6 @@ iptablesRemoveForwardAllowOut(virFirewall *fw,
*/
static int
iptablesForwardAllowRelatedIn(virFirewall *fw,
bool pvt,
virSocketAddr *netaddr,
unsigned int prefix,
const char *iface,
@ -507,7 +494,7 @@ iptablesForwardAllowRelatedIn(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWI" : "FORWARD",
"LIBVIRT_FWI",
"--destination", networkstr,
"--in-interface", physdev,
"--out-interface", iface,
@ -519,7 +506,7 @@ iptablesForwardAllowRelatedIn(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWI" : "FORWARD",
"LIBVIRT_FWI",
"--destination", networkstr,
"--out-interface", iface,
"--match", "conntrack",
@ -550,7 +537,7 @@ iptablesAddForwardAllowRelatedIn(virFirewall *fw,
const char *iface,
const char *physdev)
{
return iptablesForwardAllowRelatedIn(fw, true, netaddr, prefix, iface, physdev, ADD);
return iptablesForwardAllowRelatedIn(fw, netaddr, prefix, iface, physdev, ADD);
}
/**
@ -573,14 +560,13 @@ iptablesRemoveForwardAllowRelatedIn(virFirewall *fw,
const char *iface,
const char *physdev)
{
return iptablesForwardAllowRelatedIn(fw, deletePrivate, netaddr, prefix, iface, physdev, REMOVE);
return iptablesForwardAllowRelatedIn(fw, netaddr, prefix, iface, physdev, REMOVE);
}
/* Allow all traffic destined to the bridge, with a valid network address
*/
static int
iptablesForwardAllowIn(virFirewall *fw,
bool pvt,
virSocketAddr *netaddr,
unsigned int prefix,
const char *iface,
@ -598,7 +584,7 @@ iptablesForwardAllowIn(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWI" : "FORWARD",
"LIBVIRT_FWI",
"--destination", networkstr,
"--in-interface", physdev,
"--out-interface", iface,
@ -608,7 +594,7 @@ iptablesForwardAllowIn(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWI" : "FORWARD",
"LIBVIRT_FWI",
"--destination", networkstr,
"--out-interface", iface,
"--jump", "ACCEPT",
@ -636,7 +622,7 @@ iptablesAddForwardAllowIn(virFirewall *fw,
const char *iface,
const char *physdev)
{
return iptablesForwardAllowIn(fw, true, netaddr, prefix, iface, physdev, ADD);
return iptablesForwardAllowIn(fw, netaddr, prefix, iface, physdev, ADD);
}
/**
@ -659,20 +645,19 @@ iptablesRemoveForwardAllowIn(virFirewall *fw,
const char *iface,
const char *physdev)
{
return iptablesForwardAllowIn(fw, deletePrivate, netaddr, prefix, iface, physdev, REMOVE);
return iptablesForwardAllowIn(fw, netaddr, prefix, iface, physdev, REMOVE);
}
static void
iptablesForwardAllowCross(virFirewall *fw,
virFirewallLayer layer,
bool pvt,
const char *iface,
int action)
{
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWX" : "FORWARD",
"LIBVIRT_FWX",
"--in-interface", iface,
"--out-interface", iface,
"--jump", "ACCEPT",
@ -695,7 +680,7 @@ iptablesAddForwardAllowCross(virFirewall *fw,
virFirewallLayer layer,
const char *iface)
{
iptablesForwardAllowCross(fw, layer, true, iface, ADD);
iptablesForwardAllowCross(fw, layer, iface, ADD);
}
/**
@ -714,20 +699,19 @@ iptablesRemoveForwardAllowCross(virFirewall *fw,
virFirewallLayer layer,
const char *iface)
{
iptablesForwardAllowCross(fw, layer, deletePrivate, iface, REMOVE);
iptablesForwardAllowCross(fw, layer, iface, REMOVE);
}
static void
iptablesForwardRejectOut(virFirewall *fw,
virFirewallLayer layer,
bool pvt,
const char *iface,
int action)
{
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWO" : "FORWARD",
"LIBVIRT_FWO",
"--in-interface", iface,
"--jump", "REJECT",
NULL);
@ -748,7 +732,7 @@ iptablesAddForwardRejectOut(virFirewall *fw,
virFirewallLayer layer,
const char *iface)
{
iptablesForwardRejectOut(fw, layer, true, iface, ADD);
iptablesForwardRejectOut(fw, layer, iface, ADD);
}
/**
@ -766,21 +750,20 @@ iptablesRemoveForwardRejectOut(virFirewall *fw,
virFirewallLayer layer,
const char *iface)
{
iptablesForwardRejectOut(fw, layer, deletePrivate, iface, REMOVE);
iptablesForwardRejectOut(fw, layer, iface, REMOVE);
}
static void
iptablesForwardRejectIn(virFirewall *fw,
virFirewallLayer layer,
bool pvt,
const char *iface,
int action)
{
virFirewallAddRule(fw, layer,
"--table", "filter",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_FWI" : "FORWARD",
"LIBVIRT_FWI",
"--out-interface", iface,
"--jump", "REJECT",
NULL);
@ -801,7 +784,7 @@ iptablesAddForwardRejectIn(virFirewall *fw,
virFirewallLayer layer,
const char *iface)
{
iptablesForwardRejectIn(fw, layer, true, iface, ADD);
iptablesForwardRejectIn(fw, layer, iface, ADD);
}
/**
@ -819,7 +802,7 @@ iptablesRemoveForwardRejectIn(virFirewall *fw,
virFirewallLayer layer,
const char *iface)
{
iptablesForwardRejectIn(fw, layer, deletePrivate, iface, REMOVE);
iptablesForwardRejectIn(fw, layer, iface, REMOVE);
}
@ -828,7 +811,6 @@ iptablesRemoveForwardRejectIn(virFirewall *fw,
*/
static int
iptablesForwardMasquerade(virFirewall *fw,
bool pvt,
virSocketAddr *netaddr,
unsigned int prefix,
const char *physdev,
@ -863,7 +845,7 @@ iptablesForwardMasquerade(virFirewall *fw,
rule = virFirewallAddRule(fw, layer,
"--table", "nat",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_PRT" : "POSTROUTING",
"LIBVIRT_PRT",
"--source", networkstr,
"-p", protocol,
"!", "--destination", networkstr,
@ -872,7 +854,7 @@ iptablesForwardMasquerade(virFirewall *fw,
rule = virFirewallAddRule(fw, layer,
"--table", "nat",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_PRT" : "POSTROUTING",
"LIBVIRT_PRT",
"--source", networkstr,
"!", "--destination", networkstr,
NULL);
@ -944,7 +926,7 @@ iptablesAddForwardMasquerade(virFirewall *fw,
virPortRange *port,
const char *protocol)
{
return iptablesForwardMasquerade(fw, true, netaddr, prefix,
return iptablesForwardMasquerade(fw, netaddr, prefix,
physdev, addr, port, protocol, ADD);
}
@ -970,7 +952,7 @@ iptablesRemoveForwardMasquerade(virFirewall *fw,
virPortRange *port,
const char *protocol)
{
return iptablesForwardMasquerade(fw, deletePrivate, netaddr, prefix,
return iptablesForwardMasquerade(fw, netaddr, prefix,
physdev, addr, port, protocol, REMOVE);
}
@ -980,7 +962,6 @@ iptablesRemoveForwardMasquerade(virFirewall *fw,
*/
static int
iptablesForwardDontMasquerade(virFirewall *fw,
bool pvt,
virSocketAddr *netaddr,
unsigned int prefix,
const char *physdev,
@ -998,7 +979,7 @@ iptablesForwardDontMasquerade(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "nat",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_PRT" : "POSTROUTING",
"LIBVIRT_PRT",
"--out-interface", physdev,
"--source", networkstr,
"--destination", destaddr,
@ -1008,7 +989,7 @@ iptablesForwardDontMasquerade(virFirewall *fw,
virFirewallAddRule(fw, layer,
"--table", "nat",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_PRT" : "POSTROUTING",
"LIBVIRT_PRT",
"--source", networkstr,
"--destination", destaddr,
"--jump", "RETURN",
@ -1038,7 +1019,7 @@ iptablesAddDontMasquerade(virFirewall *fw,
const char *physdev,
const char *destaddr)
{
return iptablesForwardDontMasquerade(fw, true, netaddr, prefix,
return iptablesForwardDontMasquerade(fw, netaddr, prefix,
physdev, destaddr, ADD);
}
@ -1063,14 +1044,13 @@ iptablesRemoveDontMasquerade(virFirewall *fw,
const char *physdev,
const char *destaddr)
{
return iptablesForwardDontMasquerade(fw, deletePrivate, netaddr, prefix,
return iptablesForwardDontMasquerade(fw, netaddr, prefix,
physdev, destaddr, REMOVE);
}
static void
iptablesOutputFixUdpChecksum(virFirewall *fw,
bool pvt,
const char *iface,
int port,
int action)
@ -1083,7 +1063,7 @@ iptablesOutputFixUdpChecksum(virFirewall *fw,
virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
"--table", "mangle",
action == ADD ? "--insert" : "--delete",
pvt ? "LIBVIRT_PRT" : "POSTROUTING",
"LIBVIRT_PRT",
"--out-interface", iface,
"--protocol", "udp",
"--destination-port", portstr,
@ -1107,7 +1087,7 @@ iptablesAddOutputFixUdpChecksum(virFirewall *fw,
const char *iface,
int port)
{
iptablesOutputFixUdpChecksum(fw, true, iface, port, ADD);
iptablesOutputFixUdpChecksum(fw, iface, port, ADD);
}
/**
@ -1124,5 +1104,5 @@ iptablesRemoveOutputFixUdpChecksum(virFirewall *fw,
const char *iface,
int port)
{
iptablesOutputFixUdpChecksum(fw, deletePrivate, iface, port, REMOVE);
iptablesOutputFixUdpChecksum(fw, iface, port, REMOVE);
}

View File

@ -25,8 +25,6 @@
int iptablesSetupPrivateChains (virFirewallLayer layer);
void iptablesSetDeletePrivate (bool pvt);
void iptablesAddTcpInput (virFirewall *fw,
virFirewallLayer layer,
const char *iface,