#!/usr/bin/perl use warnings; use strict; require '/var/ipfire/general-functions.pl'; my %settings = (); $settings{'sourceIP'} = "1.1.1.0/24"; $settings{'destinationIP'} = "10.99.99.99/32"; $settings{'protocol'} = "tcp"; $settings{'EN'} = 'on'; $settings{'minSourcePort'} = ''; $settings{'maxSourcePort'} = ''; $settings{'minDestinationPort'} = ''; $settings{'maxDestinationPort'} = ''; $settings{'portName'} = ''; $settings{'preference'} = '100'; $settings{'ruleAction'} = 'drop'; sub manageFW { my ($action, %settings) = @_; # Initialize variables my @loxicmd_options; my $command = 'loxicmd'; my $firewallRule = "--firewallRule="; # Start quote # Construct firewall rule $firewallRule .= "sourceIP:$settings{'sourceIP'},destinationIP:$settings{'destinationIP'}"; $firewallRule .= ",minSourcePort:$settings{'minSourcePort'}" if $settings{'minSourcePort'}; $firewallRule .= ",maxSourcePort:$settings{'maxSourcePort'}" if $settings{'maxSourcePort'}; $firewallRule .= ",minDestinationPort:$settings{'minDestinationPort'}" if $settings{'minDestinationPort'}; $firewallRule .= ",maxDestinationPort:$settings{'maxDestinationPort'}" if $settings{'maxDestinationPort'}; $firewallRule .= ",portName:$settings{'portName'}" if $settings{'portName'}; $firewallRule .= ",protocol:$settings{'protocol'}" if $settings{'protocol'}; $firewallRule .= ",preference:$settings{'preference'}" if $settings{'preference'}; my $ruleAction = "--$settings{'ruleAction'}"; # Push options for loxicmd push(@loxicmd_options, $action, "firewall", $firewallRule, $ruleAction); # Execute the command my $result = &General::system($command, @loxicmd_options); # Check for errors if ($result != 0) { print "Error: Failed to execute loxicmd command.\n"; # You might want to add more detailed error handling here } } sub CreateFW { my (%settings) = @_; manageFW("create", %settings); } sub DeleteFW { my (%settings) = @_; manageFW("delete", %settings); } &CreateFW(%settings);