#!/usr/bin/perl -w #********************************************* # # Script Name: gateway-l # # Edit By: Francesco Cecconi # fcecconi@cpan.org # #********************************************* # #********************************************* # Function: start_rules_interface() # Function: stop_rules_interfaces() # Function: stop_rules_range() # Function: Main() # Function: help() # Function: version() #********************************************* use strict; use Getopt::Long; # Options Parser use Term::ANSIColor; # ANSI Color Font use English; Getopt::Long::Configure('auto_abbrev','no_ignore_case'); # # Global Variables # my $developer ="Cecconi Fracesco"; my $email =""; my $version ="0.3"; my $start_forward ="1"; my $stop_forward ="0"; my $firewall ="iptables"; my $path ="/proc/sys/net/ipv4/ip_forward"; my $DEBUG = 0; # # Gateway Start Interface Function # sub start_rules_interface { my ($ethernet) = @_; # Ethernet Value my $cmd_forwarding; my $cmd_firewall; my $error_forw; my $error_firew; # # Starting Forward Rules # $cmd_forwarding = "echo \"$start_forward\" > \"$path\" "; if(!$DEBUG) { $error_forw = system($cmd_forwarding); if($error_forw) { print colored ("Error Forward Rules!\n", 'bold red'); } else { print colored ("Set Forward Rules\n", 'bold green'); } } else { print"DEBUG[Rules Eth]::Echo Rules:$cmd_forwarding\n" if($DEBUG); } $cmd_firewall=" \"$firewall\" -t nat -A POSTROUTING -o \"$ethernet\" -j MASQUERADE"; if(!$DEBUG) { $error_firew = system($cmd_firewall); if($error_firew) { print colored ("Error Forward Rules!\n", 'bold red'); } else { print colored ("Set Iptables Masquerade Rules\n", 'bold green'); } } else { print"DEBUG[Rules Eth]::firewall Rules:$cmd_firewall\n" if($DEBUG); } } # # Gateway Start Interface Function # sub start_rules_range { my ($range) = @_; # passaggio dell'ip my $cmd_forwarding; my $cmd_firewall; my $error_forw; my $error_firew; # # Starting Forward Rules # $cmd_forwarding = "echo \"$start_forward\" > \"$path\" "; if(!$DEBUG) { $error_forw = system($cmd_forwarding); } else { print"DEBUG[Rules Range]::Echo Rules:$cmd_forwarding\n" if($DEBUG); } if($error_forw) { print colored ("Error Forward Rules!\n", 'bold red'); } else { print colored ("Set Forward Rules\n", 'bold green'); } $cmd_firewall=" \"$firewall\" -t nat -A POSTROUTING -d ! \"$range\" -j MASQUERADE"; if(!$DEBUG) { $error_firew = system($cmd_firewall); } else { print"DEBUG[Rules Range]::firewall Rules:$cmd_firewall\n" if($DEBUG); } if($error_firew) { print colored ("Error Forward Rules!\n", 'bold red'); } else { print colored ("Set Iptables Masquerade Rules\n", 'bold green'); } } # # Gateway Stop Function # # sub stop_rules_interface { my $cmd_forwarding; my $cmd_firewall; my $cmd_firewall_nat; my $error_forw; my $error_firew; # # Starting Forward Rules # $cmd_forwarding = "echo \"$stop_forward\" > \"$path\" "; if($DEBUG) { print"DEBUG[Unset Rules]::Echo Rules:$cmd_forwarding\n"; } else { $error_forw = system($cmd_forwarding); if($error_forw) { print colored ("Error Forward Rules!\n", 'bold red'); } else { print colored ("UnSet Forward Rules\n", 'bold green'); } } $cmd_firewall=" \"$firewall\" -F" ; if($DEBUG) { print"DEBUG[Unset Iptables Rules]::Echo Rules:$cmd_firewall\n"; } else { $error_firew = system($cmd_firewall); if($error_firew) { print colored ("Error Forward Rules!\n", 'bold red'); } else { print colored ("UnSet Iptables Masquerade Rules\n", 'bold green'); } } $cmd_firewall_nat=" \"$firewall\" -t nat -F" ; if($DEBUG) { print"DEBUG[Unset Nat Iptables Rules]::Echo Rules:$cmd_firewall_nat\n"; } else { $error_firew = system($cmd_firewall_nat); if($error_firew) { print colored ("Error Forward Rules!\n", 'bold red'); } else { print colored ("UnSet Nat Iptables Rules\n", 'bold green'); } } } # # Show Help Function # sub help { print < \$help, # help parser "version|v" => \$version, # version parser "ethernet|e=s" => \$ethernet, # etheret parser (=s inserire il nome della scheda di rete) "range|r=s" => \$range # range parser (=s inserire il l'indirizzo ip) ); if ( $UID == 0 ) { # Options Preference $ARG_val = "" if(!defined($ARG_val)); if ($ARG_count <= 2 && ($ARG_val eq "start" || $ARG_val eq "stop") && defined($ethernet)) { if ($ARG_val eq "start") { print colored ("Setting Gateway Rules...\n", 'bold blue'); $ethernet ="eth0" if($ethernet eq "start"); start_rules_interface($ethernet); } else { print colored ("UnSetting Gateway Rules...\n", 'bold blue'); stop_rules_interface(); } } elsif (defined($range) && $range ne "start" && ($ARG_val eq "start" || $ARG_val eq "stop") && $ARG_count <= 2) { if ($ARG_val eq "start") { print colored ("TEst Rules Range...\n", 'bold blue'); start_rules_range($range); } else { print colored ("UnSetting Gateway Rules...\n", 'bold blue'); stop_rules_interface(); } } elsif ($version == 1 && $ARG_count == 0) { version(); } elsif ($help == 1 && $ARG_count == 0) { help(); } else { print "Sintax error! try --help command!\n"; } } else { print colored ("You aren't a Root!\n", 'bold red'); } } # # Start # &main(); =head1 NAME B Perl script for set gateway rules =head1 Author Francesco Cecconi fcecconi@cpan.org =head1 Copyright Copyright 2006 Francesco Cecconi fcecconi@cpan.org This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 README Perl script for set gateway rules See gateway-l.pl --help =head1 PREREQUISITES Getopt::Long; Term::ANSIColor; =pod SCRIPT CATEGORIES Networking =cut