X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Ftor.cgi;h=f39c0d8da0677110f2de3ab974e63974d911051a;hb=3be1e3c6f78a166029464de23078e367cc34dfa1;hp=ed8964cdbd8f989dfd9812ff9462451e43bbd11b;hpb=818f47d06f0b2126428e8702c5930b9b44c73cc1;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/html/cgi-bin/tor.cgi b/html/cgi-bin/tor.cgi index ed8964cdbd..f39c0d8da0 100644 --- a/html/cgi-bin/tor.cgi +++ b/html/cgi-bin/tor.cgi @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2013 IPFire Team # +# Copyright (C) 2007-2020 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -20,13 +20,13 @@ ############################################################################### use strict; -use Locale::Country; # enable only the following on debugging purpose -use warnings; -use CGI::Carp 'fatalsToBrowser'; +#use warnings; +#use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; +require "${General::swroot}/location-functions.pl"; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; @@ -35,10 +35,10 @@ my @dummy = ( ${Header::colouryellow} ); undef (@dummy); my @bandwidth_limits = ( - 1000 * 1024, # 1G + 1000 * 1024, # 1 GBit/s 500 * 1024, 200 * 1024, - 100 * 1024, # 100M + 100 * 1024, # 100 MBit/s 64 * 1024, 50 * 1024, 25 * 1024, @@ -48,35 +48,68 @@ my @bandwidth_limits = ( 8 * 1024, 4 * 1024, 2 * 1024, - 1024, # 1M - 512, - 256, - 160 + 1024 # 1 MBit/s ); my @accounting_periods = ('daily', 'weekly', 'monthly'); my $TOR_CONTROL_PORT = 9051; +my $string=(); +my $memory=(); +my @memory=(); +my @pid=(); +my @tor=(); +sub daemonstats +{ + $memory = 0; + # for pid and memory + open(FILE, '/usr/local/bin/addonctrl tor status | '); + @tor = ; + close(FILE); + $string = join("", @tor); + $string =~ s/[a-z_]//gi; + $string =~ s/\[[0-1]\;[0-9]+//gi; + $string =~ s/[\(\)\.]//gi; + $string =~ s/ //gi; + $string =~ s///gi; + @pid = split(/\s/,$string); + if (open(FILE, "/proc/$pid[0]/statm")){ + my $temp = ; + @memory = split(/ /,$temp); + close(FILE); + } + $memory+=$memory[0]; +} +daemonstats(); + our %netsettings = (); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); +our %color = (); +our %mainsettings = (); +&General::readhash("${General::swroot}/main/settings", \%mainsettings); +&General::readhash("/srv/web/ipfire/html/themes/ipfire/include/colors.txt", \%color); + our %settings = (); $settings{'TOR_ENABLED'} = 'off'; $settings{'TOR_SOCKS_PORT'} = 9050; $settings{'TOR_EXIT_COUNTRY'} = ''; $settings{'TOR_USE_EXIT_NODES'} = ''; +$settings{'TOR_GUARD_COUNTRY'} = ''; +$settings{'TOR_USE_GUARD_NODES'} = ''; $settings{'TOR_ALLOWED_SUBNETS'} = "$netsettings{'GREEN_NETADDRESS'}\/$netsettings{'GREEN_NETMASK'}"; if (&Header::blue_used()) { $settings{'TOR_ALLOWED_SUBNETS'} .= ",$netsettings{'BLUE_NETADDRESS'}\/$netsettings{'BLUE_NETMASK'}"; } $settings{'TOR_RELAY_ENABLED'} = 'off'; -$settings{'TOR_RELAY_MODE'} = 'exit'; +$settings{'TOR_RELAY_MODE'} = 'relay'; +$settings{'TOR_RELAY_ADDRESS'} = ''; $settings{'TOR_RELAY_PORT'} = 9001; +$settings{'TOR_RELAY_DIRPORT'} = 0; $settings{'TOR_RELAY_NICKNAME'} = ''; $settings{'TOR_RELAY_CONTACT_INFO'} = ''; -$settings{'TOR_RELAY_NOADVERTISE'} = 'off'; $settings{'TOR_RELAY_BANDWIDTH_RATE'} = 0; $settings{'TOR_RELAY_BANDWIDTH_BURST'} = 0; $settings{'TOR_RELAY_ACCOUNTING_LIMIT'} = 0; @@ -97,8 +130,10 @@ our $torctrl = &TorConnect(); # Toggle enable/disable field. if ($settings{'ACTION'} eq $Lang::tr{'save'}) { - if ($settings{'TOR_RELAY_NICKNAME'} !~ /^[a-zA-Z0-9]+$/) { - $errormessage = "$Lang::tr{'tor errmsg invalid relay name'}: $settings{'TOR_RELAY_NICKNAME'}"; + if ($settings{'TOR_RELAY_NICKNAME'} ne '') { + if ($settings{'TOR_RELAY_NICKNAME'} !~ /^[a-zA-Z0-9]+$/) { + $errormessage = "$Lang::tr{'tor errmsg invalid relay name'}: $settings{'TOR_RELAY_NICKNAME'}"; + } } if (!&General::validport($settings{'TOR_SOCKS_PORT'})) { @@ -108,6 +143,21 @@ if ($settings{'ACTION'} eq $Lang::tr{'save'}) { if (!&General::validport($settings{'TOR_RELAY_PORT'})) { $errormessage = "$Lang::tr{'tor errmsg invalid relay port'}: $settings{'TOR_RELAY_PORT'}"; } + if ($settings{'TOR_RELAY_DIRPORT'} ne '0') { + if (!&General::validport($settings{'TOR_RELAY_DIRPORT'})) { + $errormessage = "$Lang::tr{'tor errmsg invalid directory port'}: $settings{'TOR_RELAY_DIRPORT'}"; + } + } + + if ($settings{'TOR_RELAY_ADDRESS'} ne '') { + if ((!&General::validfqdn($settings{'TOR_RELAY_ADDRESS'})) && (!&General::validip($settings{'TOR_RELAY_ADDRESS'}))) { + $errormessage = "$Lang::tr{'tor errmsg invalid relay address'}: $settings{'TOR_RELAY_ADDRESS'}"; + } + } + + if ($settings{'TOR_RELAY_ACCOUNTING_LIMIT'} !~ /^\d+$/) { + $errormessage = "$Lang::tr{'tor errmsg invalid accounting limit'}: $settings{'TOR_RELAY_ACCOUNTING_LIMIT'}"; + } my @temp = split(/[\n,]/,$settings{'TOR_ALLOWED_SUBNETS'}); $settings{'TOR_ALLOWED_SUBNETS'} = ""; @@ -130,6 +180,15 @@ if ($settings{'ACTION'} eq $Lang::tr{'save'}) { } } + @temp = split(/[\n,]/,$settings{'TOR_USE_GUARD_NODES'}); + $settings{'TOR_USE_GUARD_NODES'} = ""; + foreach (@temp) { + s/^\s+//g; s/\s+$//g; + if ($_) { + $settings{'TOR_USE_GUARD_NODES'} .= $_.","; + } + } + # Burst bandwidth must be less or equal to bandwidth rate. if ($settings{'TOR_RELAY_BANDWIDTH_RATE'} == 0) { $settings{'TOR_RELAY_BANDWIDTH_BURST'} = 0; @@ -180,17 +239,42 @@ sub showMainBox() { print "
\n"; - &Header::openbox('100%', 'left', $Lang::tr{'tor configuration'}); + &Header::openbox('100%', 'center', $Lang::tr{'tor'}); + + +if ( ($memory != 0) && (@pid[0] ne "///") ){ + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print "
$Lang::tr{'tor service'}
$Lang::tr{'tor daemon'}$Lang::tr{'running'}
PID$Lang::tr{'memory'}
@pid[0]$memory KB
"; + } else { + print ""; + print ""; + print ""; + print ""; + print "
$Lang::tr{'tor service'}
$Lang::tr{'tor daemon'}$Lang::tr{'stopped'}
"; + } + + &Header::closebox(); + + &Header::openbox('100%', 'center', $Lang::tr{'tor configuration'}); print < + - + - + @@ -202,225 +286,282 @@ sub showMainBox() {
$Lang::tr{'tor common settings'}$Lang::tr{'tor common settings'}
$Lang::tr{'tor enabled'}: $Lang::tr{'tor socks port'}:$Lang::tr{'tor socks port'}: *
END - if ($settings{'TOR_ENABLED'} eq 'on') { - my @temp = split(",", $settings{'TOR_ALLOWED_SUBNETS'}); - $settings{'TOR_ALLOWED_SUBNETS'} = join("\n", @temp); + my @temp = split(",", $settings{'TOR_ALLOWED_SUBNETS'}); + $settings{'TOR_ALLOWED_SUBNETS'} = join("\n", @temp); - @temp = split(",", $settings{'TOR_USE_EXIT_NODES'}); - $settings{'TOR_USE_EXIT_NODES'} = join("\n", @temp); + @temp = split(",", $settings{'TOR_USE_EXIT_NODES'}); + $settings{'TOR_USE_EXIT_NODES'} = join("\n", @temp); - print < -
-
+ @temp = split(",", $settings{'TOR_USE_GUARD_NODES'}); + $settings{'TOR_USE_GUARD_NODES'} = join("\n", @temp); - - - - - - - - - - - - -
$Lang::tr{'tor acls'}
- $Lang::tr{'tor allowed subnets'}: -
- -
+ print < +
-
-
-
+ + + + + + + + + + + + +
$Lang::tr{'tor acls'}
+ $Lang::tr{'tor allowed subnets'}: +
+ +
- - - - - - - - - - + + +
$Lang::tr{'tor exit nodes'}
$Lang::tr{'tor use exit nodes'}:
- + + + + + + + + + - - -
$Lang::tr{'tor guard nodes'}
$Lang::tr{'tor use guard nodes'}:
+ - -
-

-END - } + my @country_codes = &Location::Functions::get_locations("no_special_locations"); + foreach my $country_code (@country_codes) { + # Convert country code into upper case format. + $country_code = uc($country_code); - &Header::closebox(); + # Get country name. + my $country_name = &Location::Functions::get_full_country_name($country_code); - if ($settings{'TOR_RELAY_ENABLED'} eq 'on') { - $checked{'TOR_RELAY_NOADVERTISE'}{'on'} = ''; - $checked{'TOR_RELAY_NOADVERTISE'}{'off'} = ''; - $checked{'TOR_RELAY_NOADVERTISE'}{$settings{'TOR_RELAY_NOADVERTISE'}} = 'checked'; + print "\n"; } - $selected{'TOR_RELAY_BANDWIDTH_RATE'}{$settings{'TOR_RELAY_BANDWIDTH_RATE'}} = 'selected'; - $selected{'TOR_RELAY_BANDWIDTH_BURST'}{'0'} = ''; - foreach (@bandwidth_limits) { - $selected{'TOR_RELAY_BANDWIDTH_BURST'}{$_} = ''; + print < +
+ +
+ +
+
+ + + + + + + + + + + + + +
$Lang::tr{'tor exit nodes'}
$Lang::tr{'tor use exit nodes'}:
+ + +
+END - print < - - $Lang::tr{'tor relay mode'}: - - - - $Lang::tr{'tor relay port'}: - - - - - - $Lang::tr{'tor relay address'}: * - - - - $Lang::tr{'tor do not advertise relay'}: - - - - - - $Lang::tr{'tor relay nickname'}: * - - - - - - - $Lang::tr{'tor contact info'}: * - - - - - + &Header::closebox(); -
+ # Tor relay box + $selected{'TOR_RELAY_MODE'}{'bridge'} = ''; + $selected{'TOR_RELAY_MODE'}{'exit'} = ''; + $selected{'TOR_RELAY_MODE'}{'private-bridge'} = ''; + $selected{'TOR_RELAY_MODE'}{'relay'} = ''; + $selected{'TOR_RELAY_MODE'}{$settings{'TOR_RELAY_MODE'}} = 'selected'; - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
$Lang::tr{'tor bandwidth settings'}
$Lang::tr{'tor bandwidth rate'}: -
$Lang::tr{'tor relay mode'}: + + $Lang::tr{'tor relay nickname'}: + +
$Lang::tr{'tor relay address'}: + + $Lang::tr{'tor relay port'}: * + +
  $Lang::tr{'tor directory port'}: * +  $Lang::tr{'tor 0 = disabled'} +
$Lang::tr{'tor contact info'}: + +
+ +
+ + + + + + + + - - - - - - + + + + + + - - + + - -
$Lang::tr{'tor bandwidth settings'}
$Lang::tr{'tor bandwidth rate'}: + - $Lang::tr{'tor accounting limit'}: - -
$Lang::tr{'tor bandwidth burst'}: - + $Lang::tr{'tor accounting limit'}: * + +
$Lang::tr{'tor bandwidth burst'}: + - $Lang::tr{'tor accounting period'}: - + $Lang::tr{'tor accounting period'}: +
+ print < + + + END - &Header::closebox(); - } + &Header::closebox(); print < + - +
- * $Lang::tr{'this field may be blank'} - * $Lang::tr{'required field'}  

- +
@@ -431,13 +572,13 @@ END # If we have a control connection, show the stats. if ($torctrl) { - &Header::openbox('100%', 'left', $Lang::tr{'tor stats'}); + &Header::openbox('100%', 'center', $Lang::tr{'tor stats'}); my @traffic = &TorTrafficStats($torctrl); if (@traffic) { print < +
 
END if ($settings{'TOR_RELAY_ENABLED'} eq 'on') { @@ -447,7 +588,7 @@ END END @@ -478,7 +619,7 @@ END my $accounting = &TorAccountingStats($torctrl); if ($accounting) { print < +
$Lang::tr{'tor relay fingerprint'}: - $fingerprint + $fingerprint
@@ -529,7 +670,7 @@ END if (@nodes) { my $nodes_length = scalar @nodes; print < +
$Lang::tr{'tor accounting'}
@@ -540,7 +681,7 @@ END print < @@ -548,7 +689,15 @@ END END if (exists($node->{'country_code'})) { - print "$node->{"; + # Get the flag icon of the country. + my $flag_icon = &Location::Functions::get_flag_icon($node->{'country_code'}); + + # Check if a flag for the given country is available. + if ($flag_icon) { + print "$node->{"; + } else { + print ""; + } } print </dev/null"); } + # Update pid and memory + daemonstats(); } sub TorConnect() { @@ -828,7 +1012,7 @@ sub TorNodeDescription() { $node->{'address'} = $3; $node->{'port'} = $4; - my $country_code = &TorGetInfo($tor, "ip-to-country/$node->{'address'}"); + my $country_code = &Location::Functions::lookup_country_code($node->{'address'}); $node->{'country_code'} = $country_code; # Flags @@ -896,7 +1080,7 @@ sub FormatBytes() { sub FormatBitsPerSecond() { my $bits = shift; - my @units = ("Bit/s", "KBit/s", "MBit/s", "GBit/s", "TBit/s"); + my @units = ("bit/s", "kbit/s", "Mbit/s", "Gbit/s", "Tbit/s"); my $units_index = 0; while (($units_index <= $#units) && ($bits >= 1024)) {
$Lang::tr{'tor connected relays'} ($nodes_length) - + $node->{'name'}