Revision: 6064 http://ipcop.svn.sourceforge.net/ipcop/?rev=6064&view=rev Author: marcoson Date: 2011-11-12 22:57:03 +0000 (Sat, 12 Nov 2011) Log Message: ----------- Helper program to write the squid.conf from outside the proxy GUI
Added Paths: ----------- ipcop/trunk/src/scripts/makesquidconf Added: ipcop/trunk/src/scripts/makesquidconf =================================================================== --- ipcop/trunk/src/scripts/makesquidconf (rev 0) +++ ipcop/trunk/src/scripts/makesquidconf 2011-11-12 22:57:03 UTC (rev 6064) @@ -0,0 +1,1244 @@ +#!/usr/bin/perl +# +# +# This file is part of the IPCop Firewall. +# +# IPCop is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# IPCop is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with IPCop; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Copyright (C) 2009-2011, the IPCop team. +# +# $Id$ +# + +use strict; +use NetAddr::IP; + +require '/usr/lib/ipcop/general-functions.pl'; + +my $http_port='81'; +my $https_port='8443'; # default value, pull actual value from main/settings later + +my %mainsettings=(); +my %proxysettings=(); +my %netsettings=(); +my %redirectorsettings=(); +my %ovpnsettings=(); +my $ovpnactive = 0; + +my @useragent=(); +my @useragentlist=(); + +my @temp=(); + +my $proxy1=''; +my $proxy2=''; +my $replybodymaxsize=0; +my $browser_regexp=''; +my $redirectors=0; + +my $acldir = "/var/ipcop/proxy/acls"; +my $ncsadir = "/var/ipcop/proxy/ncsa"; +my $ntlmdir = "/var/ipcop/proxy/ntlm"; +my $raddir = "/var/ipcop/proxy/radius"; +my $identdir = "/var/ipcop/proxy/ident"; +my $credir = "/var/ipcop/proxy/cre"; + +my $userdb = "$ncsadir/passwd"; +my $stdgrp = "$ncsadir/standard.grp"; +my $extgrp = "$ncsadir/extended.grp"; +my $disgrp = "$ncsadir/disabled.grp"; + +my $browserdb = "/var/ipcop/proxy/useragents"; +my $mimetypes = "/var/ipcop/proxy/mimetypes"; +my $throttled_urls = "/var/ipcop/proxy/throttle"; +my $redirectwrapper = "/usr/local/bin/redirectwrapper"; + +my $cre_groups = "/var/ipcop/proxy/cre/classrooms"; +my $cre_svhosts = "/var/ipcop/proxy/cre/supervisors"; + +my $identhosts = "$identdir/hosts"; + +my $authdir = "/usr/lib/squid"; +my $errordir = "/usr/lib/squid/errors"; + +my $acl_src_subnets = "$acldir/src_subnets.acl"; +my $acl_src_networks = "$acldir/src_networks.acl"; +my $acl_src_banned_ip = "$acldir/src_banned_ip.acl"; +my $acl_src_banned_mac = "$acldir/src_banned_mac.acl"; +my $acl_src_unrestricted_ip = "$acldir/src_unrestricted_ip.acl"; +my $acl_src_unrestricted_mac = "$acldir/src_unrestricted_mac.acl"; +my $acl_src_noaccess_ip = "$acldir/src_noaccess_ip.acl"; +my $acl_src_noaccess_mac = "$acldir/src_noaccess_mac.acl"; +my $acl_dst_noauth = "$acldir/dst_noauth.acl"; +my $acl_dst_noauth_dom = "$acldir/dst_noauth_dom.acl"; +my $acl_dst_noauth_net = "$acldir/dst_noauth_net.acl"; +my $acl_dst_noauth_url = "$acldir/dst_noauth_url.acl"; +my $acl_dst_nocache = "$acldir/dst_nocache.acl"; +my $acl_dst_nocache_dom = "$acldir/dst_nocache_dom.acl"; +my $acl_dst_nocache_net = "$acldir/dst_nocache_net.acl"; +my $acl_dst_nocache_url = "$acldir/dst_nocache_url.acl"; +my $acl_dst_mime_exceptions = "$acldir/dst_mime_exceptions.acl"; +my $acl_dst_mime_exceptions_dom = "$acldir/dst_mime_exceptions_dom.acl"; +my $acl_dst_mime_exceptions_net = "$acldir/dst_mime_exceptions_net.acl"; +my $acl_dst_mime_exceptions_url = "$acldir/dst_mime_exceptions_url.acl"; +my $acl_dst_throttle = "$acldir/dst_throttle.acl"; +my $acl_ports_safe = "$acldir/ports_safe.acl"; +my $acl_ports_ssl = "$acldir/ports_ssl.acl"; +my $acl_include = "$acldir/include.acl"; + +# Read all the settings required for the proxy service + +&General::readhash("/var/ipcop/main/settings", \%mainsettings); +&General::readhash("/var/ipcop/ethernet/settings", \%netsettings); +&General::readhash("/var/ipcop/proxy/settings", \%proxysettings); +&General::readhash("/var/ipcop/openvpn/settings", \%ovpnsettings); + +# Check if OpenVPN is active + +if ((defined($ovpnsettings{'ENABLED_RED_1'}) && $ovpnsettings{'ENABLED_RED_1'} eq 'on') + || (defined($ovpnsettings{'ENABLED_BLUE_1'}) && $ovpnsettings{'ENABLED_BLUE_1'} eq 'on')) { + $ovpnactive = 1; +} + +# Set port for the GUI + +$https_port = $mainsettings{'GUIPORT'} if (defined($mainsettings{'GUIPORT'})); + +# Read useragent definitions + +if (-e $browserdb) { + open FILE, $browserdb; + @useragentlist = sort { reverse(substr(reverse(substr($a,index($a,',')+1)),index(reverse(substr($a,index($a,','))),',')+1)) cmp reverse(substr(reverse(substr($b,index($b,',')+1)),index(reverse(substr($b,index($b,','))),',')+1))} grep !/(^$)|(^\s*#)/,<FILE>; + close(FILE); +} + +# Build a regular expression of selected useragents + +foreach (@useragentlist) +{ + chomp; + @useragent = split(/,/); + if ($proxysettings{'UA_'.@useragent[0]} eq 'on') { $browser_regexp .= "@useragent[2]|"; } +} +chop($browser_regexp); + + +# Write the file for proxy auto configuration (pac) + +&writepacfile; + +# Write the squid.conf file + +&writeconfigfile; + +# Write the squid redirector wrapper + +&writewrapper; + + +# ------------------------------------------------------------------- +# Retrieve number of active redirectors + +sub activeredirectors +{ + my $redirector; + my $count=0; + + foreach $redirector (</var/ipcop/proxy/redirector/*>) { + if (-e $redirector) { + %redirectorsettings=(); + &General::readhash($redirector, \%redirectorsettings); + + if (defined($redirectorsettings{'NAME'}) && ($redirectorsettings{'ENABLED'} eq 'on')) { + $count++; + } + } + } + return $count; +} + +# ------------------------------------------------------------------- +# Retrieve minimum number of child processes + +sub numchildprocesses +{ + my $redirector; + my $count=0; + + foreach $redirector (</var/ipcop/proxy/redirector/*>) { + if (-e $redirector) { + %redirectorsettings=(); + &General::readhash($redirector, \%redirectorsettings); + + if (defined($redirectorsettings{'NAME'}) && ($redirectorsettings{'ENABLED'} eq 'on')) { + if ($count lt $redirectorsettings{'CHILDREN'}) { $count = $redirectorsettings{'CHILDREN'}} + } + } + } + return $count; +} + +# ------------------------------------------------------------------- +# Build a chain of redirector processes + +sub redirectorchain +{ + my $redirector; + my @chain=(); + + foreach $redirector (</var/ipcop/proxy/redirector/*>) { + if (-e $redirector) { + %redirectorsettings=(); + &General::readhash($redirector, \%redirectorsettings); + + if (defined($redirectorsettings{'NAME'}) && ($redirectorsettings{'ENABLED'} eq 'on')) { + if (@chain) { push(@chain," | "); } + push(@chain,$redirectorsettings{'CMD'}); + } + } + } + return @chain; +} + +# ------------------------------------------------------------------- +# Write the wrapper program for the redirectors + +sub writewrapper +{ + open (FILE, ">$redirectwrapper"); + print FILE "#!/bin/sh\n"; + print FILE &redirectorchain; + print FILE "\n"; + close FILE; + system("chmod 750 $redirectwrapper"); +} + +# ------------------------------------------------------------------- + +sub writepacfile +{ + open(FILE, ">/home/httpd/vhost81/html/proxy.pac"); + flock(FILE, 2); + print FILE "function FindProxyForURL(url, host)\n{\n"; + + if (($proxysettings{'ENABLED_GREEN_1'} eq 'on') || ($proxysettings{'ENABLED_BLUE_1'} eq 'on') || ($proxysettings{'ENABLED_OVPN'} eq 'on')) { + print FILE <<END + // URL without dots + if (isPlainHostName(host)) + return "DIRECT"; + + // our domain + if (dnsDomainIs(host, ".$mainsettings{'DOMAINNAME'}")) + return "DIRECT"; + + var resolved_host = dnsResolve(host); + // 'internal' IPs + if ( + (isInNet(resolved_host, "10.0.0.0", "255.0.0.0")) || + (isInNet(resolved_host, "172.16.0.0", "255.240.0.0")) || + (isInNet(resolved_host, "192.168.0.0", "255.255.0.0")) || + (isInNet(resolved_host, "169.254.0.0", "255.255.0.0")) || + (isInNet(resolved_host, "127.0.0.0", "255.0.0.0")) + ) + return "DIRECT"; +END +; + if ($ovpnactive && ($proxysettings{'ENABLED_OVPN'} eq 'on')) { + my $ovpnnet = NetAddr::IP->new($ovpnsettings{'DOVPN_SUBNET'})->network()->addr(); + my $ovpnmask = NetAddr::IP->new($ovpnsettings{'DOVPN_SUBNET'})->mask(); + my $serverip = NetAddr::IP->new($ovpnsettings{'DOVPN_SUBNET'})->first()->addr(); + print FILE <<END + + // OpenVPN Network + else if (isInNet(myIpAddress(), "$ovpnnet", "$ovpnmask)) + return "PROXY $serverip:$proxysettings{'PROXY_PORT'}"; +END + ; + } + if (($netsettings{'BLUE_COUNT'} >= 1) && ($proxysettings{'ENABLED_BLUE_1'} eq 'on')) { + print FILE <<END + + // BLUE Network + else if (isInNet(myIpAddress(), "$netsettings{'BLUE_1_NETADDRESS'}", "$netsettings{'BLUE_1_NETMASK'}")) + return "PROXY $netsettings{'BLUE_1_ADDRESS'}:$proxysettings{'PROXY_PORT'}"; +END + ; + } + if ($proxysettings{'ENABLED_GREEN_1'} eq 'on') { + print FILE "\n return \"PROXY $netsettings{'GREEN_1_ADDRESS'}:$proxysettings{'PROXY_PORT'}\";\n"; + } + else { + print FILE "\n return \"DIRECT\";\n"; + } + } + print FILE "}\n"; + close(FILE); +} + +# ------------------------------------------------------------------- + +sub writeconfigfile +{ + my $authrealm; + my $delaypools; + + if ($proxysettings{'THROTTLING_GREEN_TOTAL'} + + $proxysettings{'THROTTLING_GREEN_HOST'} + + $proxysettings{'THROTTLING_BLUE_TOTAL'} + + $proxysettings{'THROTTLING_BLUE_HOST'} gt 0) + { + $delaypools = 1; } else { $delaypools = 0; + } + + if ($proxysettings{'AUTH_REALM'} eq '') + { + $authrealm = "IPCop Proxy Server"; + } else { + $authrealm = $proxysettings{'AUTH_REALM'}; + } + + $_ = $proxysettings{'UPSTREAM_PROXY'}; + my ($remotehost, $remoteport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/); + + if ($remoteport eq '') { $remoteport = 80; } + + open(FILE, ">/var/ipcop/proxy/squid.conf"); + flock(FILE, 2); + print FILE <<END +# Do not modify '/var/ipcop/proxy/squid.conf' directly since any changes +# you make will be overwritten whenever you resave proxy settings using the +# web interface! +# +# Instead, modify the file '$acl_include' and +# then restart the proxy service using the web interface. Changes made to the +# 'include.acl' file will propagate to the 'squid.conf' file at that time. + +shutdown_lifetime 5 seconds +icp_port 0 + +END + ; + + if ($proxysettings{'ENABLED_GREEN_1'} eq 'on') { + print FILE "http_port $netsettings{'GREEN_1_ADDRESS'}:$proxysettings{'PROXY_PORT'}"; + if ($proxysettings{'TRANSPARENT_GREEN_1'} eq 'on') { print FILE " transparent" } + if ($proxysettings{'NO_CONNECTION_AUTH'} eq 'on') { print FILE " no-connection-auth" } + print FILE "\n"; + } + if (($netsettings{'BLUE_COUNT'} >= 1) && ($proxysettings{'ENABLED_BLUE_1'} eq 'on')) { + print FILE "http_port $netsettings{'BLUE_1_ADDRESS'}:$proxysettings{'PROXY_PORT'}"; + if ($proxysettings{'TRANSPARENT_BLUE_1'} eq 'on') { print FILE " transparent" } + if ($proxysettings{'NO_CONNECTION_AUTH'} eq 'on') { print FILE " no-connection-auth" } + print FILE "\n"; + } + if ($proxysettings{'ENABLED_OVPN'} eq 'on') { + my $serverip = NetAddr::IP->new($ovpnsettings{'DOVPN_SUBNET'})->first()->addr(); + print FILE "http_port $serverip:$proxysettings{'PROXY_PORT'}"; + if ($proxysettings{'TRANSPARENT_OVPN'} eq 'on') { print FILE " transparent" } + if ($proxysettings{'NO_CONNECTION_AUTH'} eq 'on') { print FILE " no-connection-auth" } + print FILE "\n"; + } + + if (($proxysettings{'CACHE_SIZE'} > 0) || ($proxysettings{'CACHE_MEM'} > 0)) { + print FILE "\n"; + + if (!-z $acl_dst_nocache_dom) { + print FILE "acl no_cache_domains dstdomain \"$acl_dst_nocache_dom\"\n"; + print FILE "cache deny no_cache_domains\n"; + } + if (!-z $acl_dst_nocache_net) { + print FILE "acl no_cache_ipaddr dst \"$acl_dst_nocache_net\"\n"; + print FILE "cache deny no_cache_ipaddr\n"; + } + if (!-z $acl_dst_nocache_url) { + print FILE "acl no_cache_hosts url_regex -i \"$acl_dst_nocache_url\"\n"; + print FILE "cache deny no_cache_hosts\n"; + } + } + + print FILE <<END + +cache_effective_user squid +cache_effective_group squid +umask 022 + +pid_filename /var/run/squid.pid + +cache_mem $proxysettings{'CACHE_MEM'} MB +END + ; + + unless ($proxysettings{'CACHE_SIZE'} eq '0') { + print FILE "cache_dir aufs /var/log/cache $proxysettings{'CACHE_SIZE'} $proxysettings{'L1_DIRS'} 256\n\n"; + } + + if (($proxysettings{'ERR_DESIGN'} eq 'ipcop') && ($proxysettings{'VISIBLE_HOSTNAME'} eq '')) + { + print FILE "error_directory $errordir.ipcop/$proxysettings{'ERR_LANGUAGE'}\n\n"; + } else { + print FILE "error_directory $errordir/$proxysettings{'ERR_LANGUAGE'}\n\n"; + } + + if ($proxysettings{'OFFLINE_MODE'} eq 'on') { print FILE "offline_mode on\n\n"; } + + if ((!($proxysettings{'MEM_POLICY'} eq 'LRU')) || (!($proxysettings{'CACHE_POLICY'} eq 'LRU'))) + { + if (!($proxysettings{'MEM_POLICY'} eq 'LRU')) + { + print FILE "memory_replacement_policy $proxysettings{'MEM_POLICY'}\n"; + } + if (!($proxysettings{'CACHE_POLICY'} eq 'LRU')) + { + print FILE "cache_replacement_policy $proxysettings{'CACHE_POLICY'}\n"; + } + print FILE "\n"; + } + + if ($proxysettings{'LOGGING'} eq 'on') + { + print FILE <<END +access_log /var/log/squid/access.log +cache_log /var/log/squid/cache.log +cache_store_log none +END + ; + if ($proxysettings{'LOGUSERAGENT'} eq 'on') { print FILE "useragent_log \/var\/log\/squid\/user_agent.log\n"; } + if ($proxysettings{'LOGQUERY'} eq 'on') { print FILE "\nstrip_query_terms off\n"; } + } else { + print FILE <<END +access_log /dev/null +cache_log /dev/null +cache_store_log none +END + ;} + print FILE <<END + +log_mime_hdrs off +logfile_rotate 0 +END + ; + + if ($proxysettings{'FORWARD_IPADDRESS'} eq 'on') + { + print FILE "forwarded_for on\n"; + } else { + print FILE "forwarded_for off\n"; + } + if ($proxysettings{'FORWARD_VIA'} eq 'on') + { + print FILE "via on\n"; + } else { + print FILE "via off\n"; + } + print FILE "\n"; + + if ((!($proxysettings{'AUTH_METHOD'} eq 'none')) && (!($proxysettings{'AUTH_METHOD'} eq 'ident'))) + { + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + print FILE "auth_param basic program $authdir/ncsa_auth $userdb\n"; + print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n"; + print FILE "auth_param basic realm $authrealm\n"; + print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n"; + if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; } + } + + if ($proxysettings{'AUTH_METHOD'} eq 'ldap') + { + print FILE "auth_param basic program $authdir/squid_ldap_auth -b \"$proxysettings{'LDAP_BASEDN'}\""; + if (!($proxysettings{'LDAP_BINDDN_USER'} eq '')) { print FILE " -D \"$proxysettings{'LDAP_BINDDN_USER'}\""; } + if (!($proxysettings{'LDAP_BINDDN_PASS'} eq '')) { print FILE " -w $proxysettings{'LDAP_BINDDN_PASS'}"; } + if ($proxysettings{'LDAP_TYPE'} eq 'ADS') + { + if ($proxysettings{'LDAP_GROUP'} eq '') + { + print FILE " -f \"(\&(objectClass=person)(sAMAccountName=\%s))\""; + } else { + print FILE " -f \"(\&(\&(objectClass=person)(sAMAccountName=\%s))(memberOf=$proxysettings{'LDAP_GROUP'}))\""; + } + print FILE " -u sAMAccountName -P"; + } + if ($proxysettings{'LDAP_TYPE'} eq 'NDS') + { + if ($proxysettings{'LDAP_GROUP'} eq '') + { + print FILE " -f \"(\&(objectClass=person)(cn=\%s))\""; + } else { + print FILE " -f \"(\&(\&(objectClass=person)(cn=\%s))(groupMembership=$proxysettings{'LDAP_GROUP'}))\""; + } + print FILE " -u cn -P"; + } + if (($proxysettings{'LDAP_TYPE'} eq 'V2') || ($proxysettings{'LDAP_TYPE'} eq 'V3')) + { + if ($proxysettings{'LDAP_GROUP'} eq '') + { + print FILE " -f \"(\&(objectClass=person)(uid=\%s))\""; + } else { + print FILE " -f \"(\&(\&(objectClass=person)(uid=\%s))(posixGroup=$proxysettings{'LDAP_GROUP'}))\""; + } + if ($proxysettings{'LDAP_TYPE'} eq 'V2') { print FILE " -v 2"; } + if ($proxysettings{'LDAP_TYPE'} eq 'V3') { print FILE " -v 3"; } + print FILE " -u uid -P"; + } + print FILE " $proxysettings{'LDAP_SERVER'}:$proxysettings{'LDAP_PORT'}\n"; + print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n"; + print FILE "auth_param basic realm $authrealm\n"; + print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n"; + if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; } + } + + if ($proxysettings{'AUTH_METHOD'} eq 'ntlm') + { + if ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'on') + { + print FILE "auth_param ntlm program $authdir/ntlm_smb_lm_auth $proxysettings{'NTLM_DOMAIN'}/$proxysettings{'NTLM_PDC'}"; + if ($proxysettings{'NTLM_BDC'} eq '') { print FILE "\n"; } else { print FILE " $proxysettings{'NTLM_DOMAIN'}/$proxysettings{'NTLM_BDC'}\n"; } + print FILE "auth_param ntlm children $proxysettings{'AUTH_CHILDREN'}\n"; + if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; } + } else { + print FILE "auth_param basic program $authdir/msnt_auth\n"; + print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n"; + print FILE "auth_param basic realm $authrealm\n"; + print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n"; + if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; } + + open(MSNTCONF, ">$ntlmdir/msntauth.conf"); + flock(MSNTCONF,2); + print MSNTCONF "server $proxysettings{'NTLM_PDC'}"; + if ($proxysettings{'NTLM_BDC'} eq '') { print MSNTCONF " $proxysettings{'NTLM_PDC'}"; } else { print MSNTCONF " $proxysettings{'NTLM_BDC'}"; } + print MSNTCONF " $proxysettings{'NTLM_DOMAIN'}\n"; + if ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') + { + if ($proxysettings{'NTLM_USER_ACL'} eq 'positive') + { + print MSNTCONF "allowusers $ntlmdir/msntauth.allowusers\n"; + } else { + print MSNTCONF "denyusers $ntlmdir/msntauth.denyusers\n"; + } + } + close(MSNTCONF); + } + } + + if ($proxysettings{'AUTH_METHOD'} eq 'radius') + { + print FILE "auth_param basic program $authdir/squid_radius_auth -h $proxysettings{'RADIUS_SERVER'} -p $proxysettings{'RADIUS_PORT'} "; + if (!($proxysettings{'RADIUS_IDENTIFIER'} eq '')) { print FILE "-i $proxysettings{'RADIUS_IDENTIFIER'} "; } + print FILE "-w $proxysettings{'RADIUS_SECRET'}\n"; + print FILE "auth_param basic children $proxysettings{'AUTH_CHILDREN'}\n"; + print FILE "auth_param basic realm $authrealm\n"; + print FILE "auth_param basic credentialsttl $proxysettings{'AUTH_CACHE_TTL'} minutes\n"; + if (!($proxysettings{'AUTH_IPCACHE_TTL'} eq '0')) { print FILE "\nauthenticate_ip_ttl $proxysettings{'AUTH_IPCACHE_TTL'} minutes\n"; } + } + + print FILE "\n"; + print FILE "acl for_inetusers proxy_auth REQUIRED\n"; + if (($proxysettings{'AUTH_METHOD'} eq 'ntlm') && ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'on') && ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on')) + { + if ((!-z "$ntlmdir/msntauth.allowusers") && ($proxysettings{'NTLM_USER_ACL'} eq 'positive')) + { + print FILE "acl for_acl_users proxy_auth \"$ntlmdir/msntauth.allowusers\"\n"; + } + if ((!-z "$ntlmdir/msntauth.denyusers") && ($proxysettings{'NTLM_USER_ACL'} eq 'negative')) + { + print FILE "acl for_acl_users proxy_auth \"$ntlmdir/msntauth.denyusers\"\n"; + } + } + if (($proxysettings{'AUTH_METHOD'} eq 'radius') && ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on')) + { + if ((!-z "$raddir/radauth.allowusers") && ($proxysettings{'RADIUS_USER_ACL'} eq 'positive')) + { + print FILE "acl for_acl_users proxy_auth \"$raddir/radauth.allowusers\"\n"; + } + if ((!-z "$raddir/radauth.denyusers") && ($proxysettings{'RADIUS_USER_ACL'} eq 'negative')) + { + print FILE "acl for_acl_users proxy_auth \"$raddir/radauth.denyusers\"\n"; + } + } + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + print FILE "\n"; + if (!-z $extgrp) { print FILE "acl for_extended_users proxy_auth \"$extgrp\"\n"; } + if (!-z $disgrp) { print FILE "acl for_disabled_users proxy_auth \"$disgrp\"\n"; } + } + if (!($proxysettings{'AUTH_MAX_USERIP'} eq '')) { print FILE "\nacl concurrent max_user_ip -s $proxysettings{'AUTH_MAX_USERIP'}\n"; } + print FILE "\n"; + + if (!-z $acl_dst_noauth_net) { print FILE "acl to_ipaddr_without_auth dst \"$acl_dst_noauth_net\"\n"; } + if (!-z $acl_dst_noauth_dom) { print FILE "acl to_domains_without_auth dstdomain \"$acl_dst_noauth_dom\"\n"; } + if (!-z $acl_dst_noauth_url) { print FILE "acl to_hosts_without_auth url_regex -i \"$acl_dst_noauth_url\"\n"; } + print FILE "\n"; + } + + if ($proxysettings{'AUTH_METHOD'} eq 'ident') + { + if ($proxysettings{'IDENT_REQUIRED'} eq 'on') + { + print FILE "acl for_inetusers ident REQUIRED\n"; + } + if ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') + { + if ((!-z "$identdir/identauth.allowusers") && ($proxysettings{'IDENT_USER_ACL'} eq 'positive')) + { + print FILE "acl for_acl_users ident_regex -i \"$identdir/identauth.allowusers\"\n\n"; + } + if ((!-z "$identdir/identauth.denyusers") && ($proxysettings{'IDENT_USER_ACL'} eq 'negative')) + { + print FILE "acl for_acl_users ident_regex -i \"$identdir/identauth.denyusers\"\n\n"; + } + } + if (!-z $acl_dst_noauth_net) { print FILE "acl to_ipaddr_without_auth dst \"$acl_dst_noauth_net\"\n"; } + if (!-z $acl_dst_noauth_dom) { print FILE "acl to_domains_without_auth dstdomain \"$acl_dst_noauth_dom\"\n"; } + if (!-z $acl_dst_noauth_url) { print FILE "acl to_hosts_without_auth url_regex -i \"$acl_dst_noauth_url\"\n"; } + print FILE "\n"; + } + + if (($delaypools) && (!-z $acl_dst_throttle)) { print FILE "acl for_throttled_urls url_regex -i \"$acl_dst_throttle\"\n\n"; } + + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { print FILE "acl with_allowed_useragents browser $browser_regexp\n\n"; } + + print FILE "acl within_timeframe time "; + if ($proxysettings{'TIME_MON'} eq 'on') { print FILE "M"; } + if ($proxysettings{'TIME_TUE'} eq 'on') { print FILE "T"; } + if ($proxysettings{'TIME_WED'} eq 'on') { print FILE "W"; } + if ($proxysettings{'TIME_THU'} eq 'on') { print FILE "H"; } + if ($proxysettings{'TIME_FRI'} eq 'on') { print FILE "F"; } + if ($proxysettings{'TIME_SAT'} eq 'on') { print FILE "A"; } + if ($proxysettings{'TIME_SUN'} eq 'on') { print FILE "S"; } + print FILE " $proxysettings{'TIME_FROM_HOUR'}:"; + print FILE "$proxysettings{'TIME_FROM_MINUTE'}-"; + print FILE "$proxysettings{'TIME_TO_HOUR'}:"; + print FILE "$proxysettings{'TIME_TO_MINUTE'}\n\n"; + + if ((!-z $mimetypes) && ($proxysettings{'ENABLE_MIME_FILTER'} eq 'on')) { + print FILE "acl blocked_mimetypes rep_mime_type \"$mimetypes\"\n"; + if (!-z $acl_dst_mime_exceptions_dom) { print FILE "acl mime_exception_domains dstdomain \"$acl_dst_mime_exceptions_dom\")\n"; } + if (!-z $acl_dst_mime_exceptions_net) { print FILE "acl mime_exception_ipaddr dst \"$acl_dst_mime_exceptions_net\")\n"; } + if (!-z $acl_dst_mime_exceptions_url) { print FILE "acl mime_exception_hosts url_regex -i \"$acl_dst_mime_exceptions_url\")\n"; } + print FILE "\n"; + } + + print FILE <<END +acl localhost src 127.0.0.1/32 +END +; +open (PORTS,"$acl_ports_ssl"); +@temp = <PORTS>; +close PORTS; +if (@temp) +{ + foreach (@temp) { print FILE "acl SSL_ports port $_"; } +} +open (PORTS,"$acl_ports_safe"); +@temp = <PORTS>; +close PORTS; +if (@temp) +{ + foreach (@temp) { print FILE "acl Safe_ports port $_"; } +} + print FILE <<END + +acl IPCop_http port $http_port +acl IPCop_https port $https_port +acl IPCop_ips dst $netsettings{'GREEN_1_ADDRESS'} +acl IPCop_networks src "$acl_src_networks" +acl IPCop_servers dst "$acl_src_subnets" +END + ; + print FILE "acl IPCop_green_network src " . NetAddr::IP->new ("$netsettings{'GREEN_1_NETADDRESS'}/$netsettings{'GREEN_1_NETMASK'}") . "\n"; + print FILE "acl IPCop_green_servers dst " . NetAddr::IP->new ("$netsettings{'GREEN_1_NETADDRESS'}/$netsettings{'GREEN_1_NETMASK'}") . "\n"; + if ($netsettings{'BLUE_COUNT'} >= 1) { print FILE "acl IPCop_blue_network src " . NetAddr::IP->new ("$netsettings{'BLUE_1_NETADDRESS'}/$netsettings{'BLUE_1_NETMASK'}") . "\n"; } + if ($netsettings{'BLUE_COUNT'} >= 1) { print FILE "acl IPCop_blue_servers dst " . NetAddr::IP->new ("$netsettings{'BLUE_1_NETADDRESS'}/$netsettings{'BLUE_1_NETMASK'}") . "\n"; } + if (!-z $acl_src_banned_ip) { print FILE "acl IPCop_banned_ips src \"$acl_src_banned_ip\"\n"; } + if (!-z $acl_src_banned_mac) { print FILE "acl IPCop_banned_mac arp \"$acl_src_banned_mac\"\n"; } + if (!-z $acl_src_unrestricted_ip) { print FILE "acl IPCop_unrestricted_ips src \"$acl_src_unrestricted_ip\"\n"; } + if (!-z $acl_src_unrestricted_mac) { print FILE "acl IPCop_unrestricted_mac arp \"$acl_src_unrestricted_mac\"\n"; } + print FILE <<END +acl CONNECT method CONNECT +END + ; + + if ($proxysettings{'CLASSROOM_EXT'} eq 'on') { + print FILE <<END + +#Classroom extensions +acl IPCop_no_access_ips src "$acl_src_noaccess_ip" +acl IPCop_no_access_mac arp "$acl_src_noaccess_mac" +END + ; + print FILE "deny_info "; + if ((($proxysettings{'ERR_DESIGN'} eq 'ipcop') && (-e "$errordir.ipcop/$proxysettings{'ERR_LANGUAGE'}/ERR_ACCESS_DISABLED")) || + (($proxysettings{'ERR_DESIGN'} eq 'squid') && (-e "$errordir/$proxysettings{'ERR_LANGUAGE'}/ERR_ACCESS_DISABLED"))) + { + print FILE "ERR_ACCESS_DISABLED"; + } else { + print FILE "ERR_ACCESS_DENIED"; + } + print FILE " IPCop_no_access_ips\n"; + print FILE "deny_info "; + if ((($proxysettings{'ERR_DESIGN'} eq 'ipcop') && (-e "$errordir.ipcop/$proxysettings{'ERR_LANGUAGE'}/ERR_ACCESS_DISABLED")) || + (($proxysettings{'ERR_DESIGN'} eq 'squid') && (-e "$errordir/$proxysettings{'ERR_LANGUAGE'}/ERR_ACCESS_DISABLED"))) + { + print FILE "ERR_ACCESS_DISABLED"; + } else { + print FILE "ERR_ACCESS_DENIED"; + } + print FILE " IPCop_no_access_mac\n"; + + print FILE <<END +http_access deny IPCop_no_access_ips +http_access deny IPCop_no_access_mac +END + ; + } + + #Insert acl file and replace __VAR__ with correct values + my $blue_net = ''; #BLUE empty by default + my $blue_ip = ''; + if (($netsettings{'BLUE_COUNT'} >= 1) && ($proxysettings{'ENABLED_BLUE_1'} eq 'on')) { + $blue_net = "$netsettings{'BLUE_1_NETADDRESS'}/$netsettings{'BLUE_1_NETMASK'}"; + $blue_ip = "$netsettings{'BLUE_1_ADDRESS'}"; + } + if (!-z $acl_include) + { + open (ACL, "$acl_include"); + print FILE "\n#Start of custom includes\n\n"; + while (<ACL>) { + $_ =~ s/__GREEN_IP__/$netsettings{'GREEN_1_ADDRESS'}/; + $_ =~ s/__GREEN_NET__/$netsettings{'GREEN_1_NETADDRESS'}\/$netsettings{'GREEN_1_NETMASK'}/; + $_ =~ s/__BLUE_IP__/$netsettings{'BLUE_1_ADDRESS'}/; + $_ =~ s/__BLUE_NET__/$netsettings{'BLUE_1_NETADDRESS'}\/$netsettings{'BLUE_1_NETMASK'}/; + $_ =~ s/__PROXY_PORT__/$proxysettings{'PROXY_PORT'}/; + print FILE $_; + } + print FILE "\n#End of custom includes\n"; + close (ACL); + } + if ((!-z $extgrp) && ($proxysettings{'AUTH_METHOD'} eq 'ncsa') && ($proxysettings{'NCSA_BYPASS_REDIR'} eq 'on')) { print FILE "\nredirector_access deny for_extended_users\n"; } + print FILE <<END + +#Access to squid: +#local machine, no restriction +http_access allow localhost + +#GUI admin if local machine connects +http_access allow IPCop_ips IPCop_networks IPCop_http +http_access allow CONNECT IPCop_ips IPCop_networks IPCop_https + +#Deny not web services +http_access deny !Safe_ports +http_access deny CONNECT !SSL_ports + +END + ; + +if ($proxysettings{'AUTH_METHOD'} eq 'ident') +{ +print FILE "#Set ident ACLs\n"; +if (!-z $identhosts) + { + print FILE "acl on_ident_aware_hosts src \"$identhosts\"\n"; + print FILE "ident_lookup_access allow on_ident_aware_hosts\n"; + print FILE "ident_lookup_access deny all\n"; + } else { + print FILE "ident_lookup_access allow all\n"; + } + print FILE "ident_timeout $proxysettings{'IDENT_TIMEOUT'} seconds\n\n"; +} + +if ($delaypools) { + print FILE "#Set download throttling\n"; + + if ($netsettings{'BLUE_COUNT'} >= 1) + { + print FILE "delay_pools 2\n"; + } else { + print FILE "delay_pools 1\n"; + } + + print FILE "delay_class 1 3\n"; + if ($netsettings{'BLUE_COUNT'} >= 1) { print FILE "delay_class 2 3\n"; } + + print FILE "delay_parameters 1 "; + if ($proxysettings{'THROTTLING_GREEN_TOTAL'} eq 'unlimited') + { + print FILE "-1/-1"; + } else { + print FILE $proxysettings{'THROTTLING_GREEN_TOTAL'} * 125; + print FILE "/"; + print FILE $proxysettings{'THROTTLING_GREEN_TOTAL'} * 250; + } + + print FILE " -1/-1 "; + if ($proxysettings{'THROTTLING_GREEN_HOST'} eq 'unlimited') + { + print FILE "-1/-1"; + } else { + print FILE $proxysettings{'THROTTLING_GREEN_HOST'} * 125; + print FILE "/"; + print FILE $proxysettings{'THROTTLING_GREEN_HOST'} * 250; + } + print FILE "\n"; + + if ($netsettings{'BLUE_COUNT'} >= 1) + { + print FILE "delay_parameters 2 "; + if ($proxysettings{'THROTTLING_BLUE_TOTAL'} eq 'unlimited') + { + print FILE "-1/-1"; + } else { + print FILE $proxysettings{'THROTTLING_BLUE_TOTAL'} * 125; + print FILE "/"; + print FILE $proxysettings{'THROTTLING_BLUE_TOTAL'} * 250; + } + print FILE " -1/-1 "; + if ($proxysettings{'THROTTLING_BLUE_HOST'} eq 'unlimited') + { + print FILE "-1/-1"; + } else { + print FILE $proxysettings{'THROTTLING_BLUE_HOST'} * 125; + print FILE "/"; + print FILE $proxysettings{'THROTTLING_BLUE_HOST'} * 250; + } + print FILE "\n"; + } + + print FILE "delay_access 1 deny IPCop_ips\n"; + if (!-z $acl_src_unrestricted_ip) { print FILE "delay_access 1 deny IPCop_unrestricted_ips\n"; } + if (!-z $acl_src_unrestricted_mac) { print FILE "delay_access 1 deny IPCop_unrestricted_mac\n"; } + if (($proxysettings{'AUTH_METHOD'} eq 'ncsa') && (!-z $extgrp)) { print FILE "delay_access 1 deny for_extended_users\n"; } + + if ($netsettings{'BLUE_COUNT'} >= 1) + { + print FILE "delay_access 1 allow IPCop_green_network"; + if (!-z $acl_dst_throttle) { print FILE " for_throttled_urls"; } + print FILE "\n"; + print FILE "delay_access 1 deny all\n"; + } else { + print FILE "delay_access 1 allow all"; + if (!-z $acl_dst_throttle) { print FILE " for_throttled_urls"; } + print FILE "\n"; + } + + if ($netsettings{'BLUE_COUNT'} >= 1) + { + print FILE "delay_access 2 deny IPCop_ips\n"; + if (!-z $acl_src_unrestricted_ip) { print FILE "delay_access 2 deny IPCop_unrestricted_ips\n"; } + if (!-z $acl_src_unrestricted_mac) { print FILE "delay_access 2 deny IPCop_unrestricted_mac\n"; } + if (($proxysettings{'AUTH_METHOD'} eq 'ncsa') && (!-z $extgrp)) { print FILE "delay_access 2 deny for_extended_users\n"; } + print FILE "delay_access 2 allow IPCop_blue_network"; + if (!-z $acl_dst_throttle) { print FILE " for_throttled_urls"; } + print FILE "\n"; + print FILE "delay_access 2 deny all\n"; + } + + print FILE "delay_initial_bucket_level 100\n"; + print FILE "\n"; +} + +if ($proxysettings{'NO_PROXY_LOCAL'} eq 'on') +{ + print FILE "#Prevent internal proxy access\n"; + print FILE "http_access deny IPCop_servers\n\n"; +} + +if ($proxysettings{'NO_PROXY_LOCAL_GREEN'} eq 'on') +{ + print FILE "#Prevent internal proxy access to Green\n"; + print FILE "http_access deny IPCop_green_servers !IPCop_green_network\n\n"; +} + +if (($proxysettings{'NO_PROXY_LOCAL_BLUE'} eq 'on') && ($netsettings{'BLUE_COUNT'} >= 1)) +{ + print FILE "#Prevent internal proxy access from Blue\n"; + print FILE "http_access allow IPCop_blue_network IPCop_blue_servers\n"; + print FILE "http_access deny IPCop_blue_network IPCop_servers\n\n"; +} + + print FILE <<END +#Set custom configured ACLs +END + ; + if (!-z $acl_src_banned_ip) { print FILE "http_access deny IPCop_banned_ips\n"; } + if (!-z $acl_src_banned_mac) { print FILE "http_access deny IPCop_banned_mac\n"; } + + if ((!-z $acl_dst_noauth) && (!($proxysettings{'AUTH_METHOD'} eq 'none'))) + { + if (!-z $acl_src_unrestricted_ip) + { + if (!-z $acl_dst_noauth_net) { print FILE "http_access allow IPCop_unrestricted_ips to_ipaddr_without_auth\n"; } + if (!-z $acl_dst_noauth_dom) { print FILE "http_access allow IPCop_unrestricted_ips to_domains_without_auth\n"; } + if (!-z $acl_dst_noauth_url) { print FILE "http_access allow IPCop_unrestricted_ips to_hosts_without_auth\n"; } + } + if (!-z $acl_src_unrestricted_mac) + { + if (!-z $acl_dst_noauth_net) { print FILE "http_access allow IPCop_unrestricted_mac to_ipaddr_without_auth\n"; } + if (!-z $acl_dst_noauth_dom) { print FILE "http_access allow IPCop_unrestricted_mac to_domains_without_auth\n"; } + if (!-z $acl_dst_noauth_url) { print FILE "http_access allow IPCop_unrestricted_mac to_hosts_without_auth\n"; } + } + if (!-z $acl_dst_noauth_net) + { + print FILE "http_access allow IPCop_networks"; + if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') { + print FILE " !within_timeframe"; + } else { + print FILE " within_timeframe"; } + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { print FILE " with_allowed_useragents"; } + print FILE " to_ipaddr_without_auth\n"; + } + if (!-z $acl_dst_noauth_dom) + { + print FILE "http_access allow IPCop_networks"; + if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') { + print FILE " !within_timeframe"; + } else { + print FILE " within_timeframe"; } + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { print FILE " with_allowed_useragents"; } + print FILE " to_domains_without_auth\n"; + } + if (!-z $acl_dst_noauth_url) + { + print FILE "http_access allow IPCop_networks"; + if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') { + print FILE " !within_timeframe"; + } else { + print FILE " within_timeframe"; } + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { print FILE " with_allowed_useragents"; } + print FILE " to_hosts_without_auth\n"; + } + } + + if (($proxysettings{'AUTH_METHOD'} eq 'ident') && ($proxysettings{'IDENT_REQUIRED'} eq 'on') && ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on')) + { + print FILE "http_access deny !for_inetusers"; + if (!-z $identhosts) { print FILE " on_ident_aware_hosts"; } + print FILE "\n"; + } + + if ( + ($proxysettings{'AUTH_METHOD'} eq 'ident') && + ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on') && + ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') && + ($proxysettings{'IDENT_USER_ACL'} eq 'negative') && + (!-z "$identdir/identauth.denyusers") + ) + { + print FILE "http_access deny for_acl_users"; + if (($proxysettings{'AUTH_METHOD'} eq 'ident') && (!-z "$identdir/hosts")) { print FILE " on_ident_aware_hosts"; } + print FILE "\n"; + } + + if (!-z $acl_src_unrestricted_ip) + { + print FILE "http_access allow IPCop_unrestricted_ips"; + if ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on') + { + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + if (!-z $disgrp) { print FILE " !for_disabled_users"; } else { print FILE " for_inetusers"; } + } + if (($proxysettings{'AUTH_METHOD'} eq 'ldap') || (($proxysettings{'AUTH_METHOD'} eq 'ntlm') && ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'off')) || ($proxysettings{'AUTH_METHOD'} eq 'radius')) + { + print FILE " for_inetusers"; + } + if (($proxysettings{'AUTH_METHOD'} eq 'ntlm') && ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'on')) + { + if ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') + { + if (($proxysettings{'NTLM_USER_ACL'} eq 'positive') && (!-z "$ntlmdir/msntauth.allowusers")) + { + print FILE " for_acl_users"; + } + if (($proxysettings{'NTLM_USER_ACL'} eq 'negative') && (!-z "$ntlmdir/msntauth.denyusers")) + { + print FILE " !for_acl_users"; + } + } else { print FILE " for_inetusers"; } + } + if (($proxysettings{'AUTH_METHOD'} eq 'radius') && ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on')) + { + if ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') + { + if (($proxysettings{'RADIUS_USER_ACL'} eq 'positive') && (!-z "$raddir/radauth.allowusers")) + { + print FILE " for_acl_users"; + } + if (($proxysettings{'RADIUS_USER_ACL'} eq 'negative') && (!-z "$raddir/radauth.denyusers")) + { + print FILE " !for_acl_users"; + } + } else { print FILE " for_inetusers"; } + } + } + print FILE "\n"; + } + + if (!-z $acl_src_unrestricted_mac) + { + print FILE "http_access allow IPCop_unrestricted_mac"; + if ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'on') + { + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + if (!-z $disgrp) { print FILE " !for_disabled_users"; } else { print FILE " for_inetusers"; } + } + if (($proxysettings{'AUTH_METHOD'} eq 'ldap') || (($proxysettings{'AUTH_METHOD'} eq 'ntlm') && ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'off')) || ($proxysettings{'AUTH_METHOD'} eq 'radius')) + { + print FILE " for_inetusers"; + } + if (($proxysettings{'AUTH_METHOD'} eq 'ntlm') && ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'on')) + { + if ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') + { + if (($proxysettings{'NTLM_USER_ACL'} eq 'positive') && (!-z "$ntlmdir/msntauth.allowusers")) + { + print FILE " for_acl_users"; + } + if (($proxysettings{'NTLM_USER_ACL'} eq 'negative') && (!-z "$ntlmdir/msntauth.denyusers")) + { + print FILE " !for_acl_users"; + } + } else { print FILE " for_inetusers"; } + } + if (($proxysettings{'AUTH_METHOD'} eq 'radius') && ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on')) + { + if ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') + { + if (($proxysettings{'RADIUS_USER_ACL'} eq 'positive') && (!-z "$raddir/radauth.allowusers")) + { + print FILE " for_acl_users"; + } + if (($proxysettings{'RADIUS_USER_ACL'} eq 'negative') && (!-z "$raddir/radauth.denyusers")) + { + print FILE " !for_acl_users"; + } + } else { print FILE " for_inetusers"; } + } + } + print FILE "\n"; + } + + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + if (!-z $disgrp) { print FILE "http_access deny for_disabled_users\n"; } + if (!-z $extgrp) { print FILE "http_access allow IPCop_networks for_extended_users\n"; } + } + + if ( + ( + ($proxysettings{'AUTH_METHOD'} eq 'ntlm') && + ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'on') && + ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') && + ($proxysettings{'NTLM_USER_ACL'} eq 'negative') && + (!-z "$ntlmdir/msntauth.denyusers") + ) + || + ( + ($proxysettings{'AUTH_METHOD'} eq 'radius') && + ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') && + ($proxysettings{'RADIUS_USER_ACL'} eq 'negative') && + (!-z "$raddir/radauth.denyusers") + ) + || + ( + ($proxysettings{'AUTH_METHOD'} eq 'ident') && + ($proxysettings{'AUTH_ALWAYS_REQUIRED'} eq 'off') && + ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') && + ($proxysettings{'IDENT_USER_ACL'} eq 'negative') && + (!-z "$identdir/identauth.denyusers") + ) + ) + { + print FILE "http_access deny for_acl_users"; + if (($proxysettings{'AUTH_METHOD'} eq 'ident') && (!-z "$identdir/hosts")) { print FILE " on_ident_aware_hosts"; } + print FILE "\n"; + } + + if (($proxysettings{'AUTH_METHOD'} eq 'ident') && ($proxysettings{'IDENT_REQUIRED'} eq 'on') && (!-z "$identhosts")) + { + print FILE "http_access allow"; + if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') { + print FILE " !within_timeframe"; + } else { + print FILE " within_timeframe"; } + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { print FILE " with_allowed_useragents"; } + print FILE " !on_ident_aware_hosts\n"; + } + + print FILE "http_access allow IPCop_networks"; + if ( + ( + ($proxysettings{'AUTH_METHOD'} eq 'ntlm') && + ($proxysettings{'NTLM_ENABLE_INT_AUTH'} eq 'on') && + ($proxysettings{'NTLM_ENABLE_ACL'} eq 'on') && + ($proxysettings{'NTLM_USER_ACL'} eq 'positive') && + (!-z "$ntlmdir/msntauth.allowusers") + ) + || + ( + ($proxysettings{'AUTH_METHOD'} eq 'radius') && + ($proxysettings{'RADIUS_ENABLE_ACL'} eq 'on') && + ($proxysettings{'RADIUS_USER_ACL'} eq 'positive') && + (!-z "$raddir/radauth.allowusers") + ) + || + ( + ($proxysettings{'AUTH_METHOD'} eq 'ident') && + ($proxysettings{'IDENT_REQUIRED'} eq 'on') && + ($proxysettings{'IDENT_ENABLE_ACL'} eq 'on') && + ($proxysettings{'IDENT_USER_ACL'} eq 'positive') && + (!-z "$identdir/identauth.allowusers") + ) + ) + { + print FILE " for_acl_users"; + } elsif (((!($proxysettings{'AUTH_METHOD'} eq 'none')) && (!($proxysettings{'AUTH_METHOD'} eq 'ident'))) || + (($proxysettings{'AUTH_METHOD'} eq 'ident') && ($proxysettings{'IDENT_REQUIRED'} eq 'on'))) { + print FILE " for_inetusers"; + } + if ((!($proxysettings{'AUTH_MAX_USERIP'} eq '')) && (!($proxysettings{'AUTH_METHOD'} eq 'none')) && (!($proxysettings{'AUTH_METHOD'} eq 'ident'))) + { + print FILE " !concurrent"; + } + if ($proxysettings{'TIME_ACCESS_MODE'} eq 'deny') { + print FILE " !within_timeframe"; + } else { + print FILE " within_timeframe"; } + if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on') { print FILE " with_allowed_useragents"; } + print FILE "\n"; + + print FILE "http_access deny all\n\n"; + + if (($proxysettings{'FORWARD_IPADDRESS'} eq 'off') || ($proxysettings{'FORWARD_VIA'} eq 'off') || + (!($proxysettings{'FAKE_USERAGENT'} eq '')) || (!($proxysettings{'FAKE_REFERER'} eq ''))) + { + print FILE "#Strip HTTP Header\n"; + + if ($proxysettings{'FORWARD_IPADDRESS'} eq 'off') + { + print FILE "request_header_access X-Forwarded-For deny all\n"; + } + if ($proxysettings{'FORWARD_VIA'} eq 'off') + { + print FILE "request_header_access Via deny all\n"; + } + if (!($proxysettings{'FAKE_USERAGENT'} eq '')) + { + print FILE "request_header_access User-Agent deny all\n"; + } + if (!($proxysettings{'FAKE_REFERER'} eq '')) + { + print FILE "request_header_access Referer deny all\n"; + } + + print FILE "\n"; + + if ((!($proxysettings{'FAKE_USERAGENT'} eq '')) || (!($proxysettings{'FAKE_REFERER'} eq ''))) + { + if (!($proxysettings{'FAKE_USERAGENT'} eq '')) + { + print FILE "header_replace User-Agent $proxysettings{'FAKE_USERAGENT'}\n"; + } + if (!($proxysettings{'FAKE_REFERER'} eq '')) + { + print FILE "header_replace Referer $proxysettings{'FAKE_REFERER'}\n"; + } + print FILE "\n"; + } + } + + if ($proxysettings{'SUPPRESS_VERSION'} eq 'on') { print FILE "httpd_suppress_version_string on\n\n" } + + if ((!-z $mimetypes) && ($proxysettings{'ENABLE_MIME_FILTER'} eq 'on')) { + if (!-z $acl_src_unrestricted_ip) { print FILE "http_reply_access allow IPCop_unrestricted_ips\n"; } + if (!-z $acl_src_unrestricted_mac) { print FILE "http_reply_access allow IPCop_unrestricted_mac\n"; } + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + if (!-z $extgrp) { print FILE "http_reply_access allow for_extended_users\n"; } + } + if (!-z $acl_dst_mime_exceptions_dom) { print FILE "http_reply_access allow mime_exception_domains\n"; } + if (!-z $acl_dst_mime_exceptions_net) { print FILE "http_reply_access allow mime_exception_ipaddr\n"; } + if (!-z $acl_dst_mime_exceptions_url) { print FILE "http_reply_access allow mime_exception_hosts\n"; } + print FILE "http_reply_access deny blocked_mimetypes\n"; + print FILE "http_reply_access allow all\n\n"; + } + + if (($proxysettings{'CACHE_SIZE'} > 0) || ($proxysettings{'CACHE_MEM'} > 0)) { + print FILE <<END +maximum_object_size $proxysettings{'MAX_SIZE'} KB +minimum_object_size $proxysettings{'MIN_SIZE'} KB + +END + ; + } + else { + print FILE "cache deny all\n\n"; + } + + print FILE <<END +request_body_max_size $proxysettings{'MAX_OUTGOING_SIZE'} KB +END + ; + $replybodymaxsize = "$proxysettings{'MAX_INCOMING_SIZE'} KB"; + if ($proxysettings{'MAX_INCOMING_SIZE'} > 0) { + if (!-z $acl_src_unrestricted_ip) { print FILE "reply_body_max_size none IPCop_unrestricted_ips\n"; } + if (!-z $acl_src_unrestricted_mac) { print FILE "reply_body_max_size none IPCop_unrestricted_mac\n"; } + if ($proxysettings{'AUTH_METHOD'} eq 'ncsa') + { + if (!-z $extgrp) { print FILE "reply_body_max_size none for_extended_users\n"; } + } + } + if ($replybodymaxsize == 0) { $replybodymaxsize = 'none'; } + print FILE "reply_body_max_size $replybodymaxsize all\n\n"; + + print FILE "visible_hostname"; + if ($proxysettings{'VISIBLE_HOSTNAME'} eq '') + { + print FILE " $mainsettings{'HOSTNAME'}.$mainsettings{'DOMAINNAME'}\n\n"; + } else { + print FILE " $proxysettings{'VISIBLE_HOSTNAME'}\n\n"; + } + + if (!($proxysettings{'ADMIN_MAIL_ADDRESS'} eq '')) { print FILE "cache_mgr $proxysettings{'ADMIN_MAIL_ADDRESS'}\n\n"; } + + # Write the parent proxy info, if needed. + if ($remotehost ne '') + { + print FILE "cache_peer $remotehost parent $remoteport 3130 default no-query"; + + # Enter authentication for the parent cache. Option format is + # login=user:password ($proxy1='YES') + # login=PASS ($proxy1='PASS') + # login=*:password ($proxysettings{'FORWARD_USERNAME'} eq 'on') + if (($proxy1 eq 'YES') || ($proxy1 eq 'PASS')) + { + print FILE " login=$proxysettings{'UPSTREAM_USER'}"; + if ($proxy1 eq 'YES') { print FILE ":$proxysettings{'UPSTREAM_PASSWORD'}"; } + } + elsif ($proxysettings{'FORWARD_USERNAME'} eq 'on') { print FILE " login=*:password"; } + + print FILE "\nalways_direct allow IPCop_ips\n"; + print FILE "never_direct allow all\n\n"; + } + + if (&activeredirectors > 0) { + print FILE "url_rewrite_program $redirectwrapper\n"; + print FILE "url_rewrite_children " . &numchildprocesses . "\n\n"; + } + + close FILE; +} + +# ------------------------------------------------------------------- Property changes on: ipcop/trunk/src/scripts/makesquidconf ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ Ipcop-svn mailing list Ipcop-svn@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipcop-svn