[pve-devel] [PATCH proxmox-firewall 32/37] firewall: add proxmox-firewall binary
Stefan Hanreich
s.hanreich at proxmox.com
Tue Apr 2 19:16:24 CEST 2024
Co-authored-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
---
proxmox-firewall/src/main.rs | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/proxmox-firewall/src/main.rs b/proxmox-firewall/src/main.rs
index 53c1289..28aecdf 100644
--- a/proxmox-firewall/src/main.rs
+++ b/proxmox-firewall/src/main.rs
@@ -5,7 +5,41 @@ mod firewall;
mod object;
mod rule;
+use firewall::Firewall;
+use proxmox_nftables::NftCtx;
+
+const RULE_BASE: &str = include_str!("../resources/proxmox-firewall.nft");
+
fn main() -> Result<(), Error> {
env_logger::init();
+
+ let mut nft = NftCtx::new()?;
+ let firewall = Firewall::new()?;
+
+ if !firewall.is_enabled() {
+ log::info!("Removing existing firewall rules");
+ let commands = firewall.remove_firewall();
+
+ // can ignore failures, since it fails when table does not exist
+ let _ = nft.run_commands(&commands);
+
+ return Ok(());
+ }
+
+ let commands = firewall.full_host_fw()?;
+
+ log::info!("Running proxmox-firewall.nft");
+ let got = nft.run_nft_commands(RULE_BASE)?;
+ log::info!("got response from nftables: {got:?}");
+
+ log::info!("Running proxmox-firewall commands");
+
+ for (idx, c) in commands.iter().enumerate() {
+ log::debug!("cmd #{idx} {}", serde_json::to_string(&c)?);
+ }
+
+ let got = nft.run_commands(&commands)?;
+ log::info!("got response from nftables: {got:?}");
+
Ok(())
}
--
2.39.2
More information about the pve-devel
mailing list