带有DansGuardian,ClamAV和WPAD(代理自动检测)的Ubuntu 9.04上的Squid代理服务器
版本1.1
Mark Coombes(mtcoombes at gmail dot com)
变更日志
1.0 - 本教程的第一个版本
1.1 - 通过dhcp3添加实现WPAD的信息; 在lighttpd添加部分; 添加了关于SSH的信息
本教程将演示如何使用DansGuardian(用于内容过滤)和ClamAV(用于病毒扫描)在Ubuntu 9.04上设置Squid代理服务器; 此外,我们将通过DHCP(在这种情况下,dhcp3或Windows Server 2003 DHCP服务器)或DNS设置Web代理自动检测(WPAD),以便客户端所需的唯一配置是检查“自动检测代理在Firefox或Internet Explorer中设置此网络的设置。 在教程末尾,用户将拥有完全功能和安全的HTTP访问代理。
另外...最后一节将向用户显示如何通过SSH连接到此代理服务器,以便在远离家庭/办公室时进行受保护的浏览会话。
注意:本教程不创建透明代理! 网路浏览器以外的互联网流量将不会被代理! 这些是为我工作的步骤,但我不声称他们将为您工作,而无需修改。
初步配置
本教程假设您已经将Ubuntu Server 9.04,更新和升级的安装包安装到其最新版本。 Squid,DansGuardian,ClamAV,dhcp3和Apache或Lighttpd的预配置不是必需的 - 以下步骤将显示所有必要的配置。 所有安装和配置必须以具有Sudo权限的用户完成。
1.安装和配置ClamAV
从shell执行以下命令来安装ClamAV:
sudo apt-get install clamav-daemon clamav-freshclam
这将安装使用DansGuardian进行病毒扫描所需的ClamAV后台程序,还可以安装FreshClam,以确保病毒库始终保持最新。 您可能会收到以下警告:
LibClamAV Warning:***********************************************************
LibClamAV Warning: *** This version of the ClamAV engine is outdated.***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/support/faq ***
LibClamAV Warning: ***********************************************************
这表明病毒引擎本身由于Ubuntu 9.04打包的版本而过时。 为了最高的安全性,您应该努力使ClamAV引擎更新到最新版本,但是这不可能通过apt,因此超出了本指南的范围。 在大多数情况下,我相信这个警告可以被忽略。
ClamAV的配置文件位于/ etc / clamav中
,但默认配置适合我们的需要。 FreshClam将每小时更新病毒定义; 如果要更改此行为,请编辑/etc/clamav/freshclam.conf
并更改部分:
# Check for new database 24 times a day
Checks 24
要想检查更新的次数,例如:
# Check for new database 24 times a day
Checks 48
多做两次。 当nano询问您是否要“保存修改的缓冲区”时,按Ctrl + X退出并回答Y。 如果您更改了FreshClam的配置,请执行以下操作以确保新配置被加载:
sudo /etc/init.d/clamav-freshclam restart
2.安装和配置Squid
从shell执行以下操作来安装Squid:
sudo apt-get install squid
Squid的配置指令位于/etc/squid/squid.conf中
。 输入以下内容即可编辑此文件:
sudo nano /etc/squid/squid.conf
我们不必对Squid的默认配置做很多工作,因为DansGuardian将坐在Squid和用户之间,并直接流量到适当的Squid端口。 现在通过将此参数添加到文件的底部来设置此端口:
http_port 3128
当nano询问您是否要“保存修改的缓冲区”时,按Ctrl + X退出并回答Y。 然后键入以下命令以使squid重新加载其配置文件:
sudo /etc/init.d/squid reload
3.安装和配置DansGuardian
从shell执行以下命令来安装DansGuardian:
sudo apt-get install dansguardian
DansGuardian的配置文件位于/ etc / dansguardian中
。 现在通过键入以下内容来编辑主配置:
sudo nano /etc/dansguardian/dansguardian.conf
整个dansguardian.conf有很好的评论和信息。 以下将演示一个基本设置,但是要真正获得DansGuardian的内容过滤功能,您应该彻底阅读此文件。 默认情况下,DansGuardian是非常严格的(这可能是你以后的); 放宽这些限制需要一些耐心和编辑配置文件。 下面我将会介绍一下。 注意配置中的以下几行:
language = 'ukenglish'
filterip = x.x.x.x
filterport = 8080
proxyip = 127.0.0.1
proxyport = 3128
#contentscanner = '/etc/dansguardian/contentscanners/clamav.conf'
“语言”指令指示DansGuardian在阻止网页时将显示的错误页面的语言。 此选项的可能值可在/ etc / dansguardian
目录中找到。 一旦您决定要显示给用户的错误页面的语言,请更改/etc/dansguardian/dansguardian.conf中
的语言字符串; 然后自定义错误页面:
sudo nano /etc/dansguardian/languages/ukenglish/template.html
按照template.html中的说明
插入您的公司名称,并为了您的目的自定义消息。
“filterip”和“filterport”指令分别定义了代理服务器的IP地址和端口。 将filterip设置为等于本机在LAN上的ip,并且filterport等于您要代理的端口; 一个很好的默认是8080。
重要提示:如果您想要通过同一台机器上的SSH服务器远程访问此代理,请添加另一个“filterip”行,并使用IP 127.0.0.1 - 这将确保DansGuardian还将监听本地主机以进行连接要求。
“proxyip”指令是Squid代理的IP地址,“proxyport”是代理监听的端口。 如果您一直在遵循本指南,请将其留在127.0.0.1,换句话说就是本地机器。 同样,如果您使用之前建议的默认Squid端口,可以将proxyport保留为3128。
“contentscanner”行已经在/etc/dansguardian/dansguardian.conf中
。 取消注释此行以告诉DansGuardian使用ClamAV扫描通过HTTP请求的项目。
最后,注释掉或删除行:
UNCONFIGURED - Please remove this line after configuration
告诉DansGuardian你已经改变了默认配置。 使用Ctrl + X和“Y”保存此文件,然后执行以下操作:
sudo /etc/init.d/dansguardian restart
让DansGuardian重读其配置并连接到正在运行的Squid代理。
此时,请执行以下操作以确保Squid代理,并阻止用户规避DansGuardian:
注意:如果您有其他防火墙规则,请勿执行此操作! 这会把他们弄乱了。 简单地调整您正在使用的任何其他防火墙方法来考虑以下因素。
sudo ufw default DENY
sudo ufw ALLOW 8080
sudo ufw enable
这确保除端口8080(DansGuardian代理端口)之外的所有传入连接都被阻止(防止恶意用户访问端口3128上的打开的Squid代理)。 或者,您可以明确地阻止3128:
sudo ufw DENY 3128
但是我选择了使整个系统更安全的第一种方式。
目录/ etc / dansguardian / lists
包含与内容过滤相关的所有文件。 仔细阅读每个这些文件,以了解DansGuardian可能形成的想法,并且放松或收紧DansGuardian默认的严格性。 由于我们与DansGuardian一起使用ClamAV,因此需要检出的目录是/ etc / dansguardian / lists / contentscanners
,其中包含您不想被ClamAV检查的文件的异常列表; 默认情况下,这些文件列出了几个例外,因此值得检查以确保满足您的需求!
4.设置Web代理自动检测(WPAD)
在这一点上,如果一切都成功,您应该可以进入Web浏览器的代理设置,并输入我们刚刚设置的代理服务器的地址和端口,并具有由DansGuardian和ClamAV保护的代理连接。 我们希望为用户自动提供这些信息,因此我们必须按照以下步骤设置自动检测; 请注意,此过程仍需要您最初设置Web浏览器(即勾选“自动检测设置”框)。 为了更透明地设置代理,您需要使用Squid查看透明代理,但这不在当前教程的范围之内。
从本质上讲,WPAD可以通过http服务器向网络上的浏览器提供脚本。 由于我希望这台机器是一个一体化的解决方案,所以现在我将继续安装一个Web服务器(不需要花哨的配置,因为用户不会直接与Web服务器进行交互)。 如果您的网络上已经存在Web服务器,并且客户端可以在本地连接到该服务器,则还可以调整此配置以将WPAD脚本放在该服务器上。
Web服务器选项1 - Apache2
首先我们安装Apache:
sudo apt-get install apache2
我们需要在/etc/apache2/httpd.conf
中添加一行; 执行:
sudo nano /etc/apache2/httpd.conf
并将以下行添加到文件(这将自动配置脚本的正确mime类型与.dat扩展名相关联):
AddType application/x-ns-proxy-autoconfig .dat
退出并使用Ctrl + X和“Y”保存,然后重新加载(或者如果Apache尚未启动,则启动它):
sudo /etc/init.d/apache2 reload
OR
sudo /etc/init.d/apache2 start
现在在Web浏览器中导航到您的服务器的IP地址; 默认的Apache配置应该返回“It works!” 这将让您知道服务器正在工作!
Web服务器选项2 - lighttpd
这个应用程序的理想Web服务器(如果您不需要它的任何其他)将看起来是lighttpd。 我没有广泛测试lighttpd,但下面的部分将帮助您安装和配置它,以便为客户端提供WPAD脚本。 首先,安装lighttpd:
sudo apt-get install lighttpd
我们需要将适当的mime-type与配置脚本相关联。 为此,我们必须编辑/etc/lighttpd/lighttpd.conf
:
sudo nano /etc/lighttpd/lighttpd.conf
将以下部分添加到文件的底部(默认安装不应该有现有的mime类型部分):
mimetype.assign = ( ".dat" => "application/x-ns-proxy-autoconfig" )
Ctrl-X和“Y”退出nano并保存更改,然后执行:
sudo /etc/init.d/lighttpd restart
重启lighttpd。 现在在Web浏览器中导航到您的服务器的IP地址,您应该接受lighttpd默认页面,让您知道服务器正在运行!
创建自动配置脚本“wpad.dat”
默认情况下,Web服务器的根(对于两种情况)都在/ var / www中
。 执行以下操作来创建自动配置脚本:
sudo touch /var/www/wpad.dat
sudo nano /var/www/wpad.dat
并将以下内容粘贴到文件中:
function FindProxyForURL(url, host)
{
if (isInNet(host, "x.x.x.0", "255.255.255.0"))
return "DIRECT";
else
return "PROXY x.x.x.x:8080";
}
有很多方法来创建这样一个脚本,以达到不同的目的。 上述脚本将需要编辑以匹配您的配置。 将IP地址设置为(isInNet(host,...)到本地网络的子网ID;例如,如果您的本地网络具有C类范围为192.168.1.x的IP,请输入192.168.1.0。更改子网掩码以匹配网络的配置,并将“PROXY”后面的IP地址编辑为代理服务器的IP地址,如果使用8080以外的其他IP地址,请确保更改端口。
浏览会话开始时,该脚本将被提供给Web浏览器; 如果请求的地址是本地的(即在您的网络上),代理将被绕过。 所有其他请求将由代理处理。 这具有允许您将此Web服务器用于其他目的(不受DansGuardian影响)的优点。
此时,要测试您的http服务器是否正常工作,您应该能够访问网络上的Web浏览器并将其指向http://xxxx/wpad.dat,并提示您下载自动配置脚本(其中xxxx是Web服务器/代理服务器的地址)。 如果没有,请确保wpad.dat位于服务器的根目录( / var / www
)中,并且Web服务器已在服务器上启动:
sudo /etc/init.d/apache2 start
OR
sudo /etc/init.d/lighttpd start
DHCP选项1 - dhcp3-server
我们现在将考虑设置dhcp3,以便将WPAD信息自动提供给客户端,作为dhcp租约的一部分。 如果您的网络上已经有一个dhcp3服务器,只需按照以下步骤进行调整,以适应您当前的配置。
如果您希望将代理服务器作为dhcp服务器,请按照https://help.ubuntu.com/community/dhcp3-server中的步骤进行基本配置,以便您的客户端向客户端提供租用服务。 我们只需要改变一个配置。 打开/etc/dhcp3/dhcpd.conf
,使用nano进行编辑:
sudo nano /etc/dhcp3/dhcpd.conf
...并添加:
option custom-proxy-server "http://x.x.x.x/wpad.dat"
...与文件中的其他选项,其中xxxx是将WPAD脚本放置在Web服务器配置中的Web服务器的IP地址; 以Ubuntu示例配置为例:
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.example";
option custom-proxy-server "http://x.x.x.x/wpad.dat";
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;
}
Ctrl-X和“Y”退出nano并保存更改,然后执行以下操作重新启动dhcp3:
sudo /etc/init.d/dhcp3 restart
为客户请求新的dhcp租约,在客户端浏览器中选中“自动检测代理设置”,然后前往www.whatismyip.com,您应该看到以下内容:
您的IP地址是:xxxx
检测到可能的代理:1.0 your.fqdn.here:3128(squid / 2.7.STABLE3)
...表示您的客户端的连接已被代理!
DHCP选项2 - Microsoft DHCP服务器
dhcp的另一个受欢迎的选项是Microsoft DHCP服务器(我设置此配置的公司网络使用Windows Server 2003,因此这是我的经验)。
在Windows Server上打开DHCP配置。 右键单击服务器,然后选择“设置预定义选项...”,然后选择“添加”,然后在弹出的窗口中设置以下选项(此信息已从http://support.microsoft.com获取/default.aspx?scid=kb;EN-US;252898 ):
名称:代理自动配置
数据类型:字符串
数组 (未选中)
代码: 252
说明:代理自动配置选项
点击“确定”,然后在字段中:输入服务代理自动配置脚本的Web服务器的http地址,后跟一个空格,例如“http://xxxx/wpad.dat”(但不带引号)。 接下来,右键单击“范围选项”(如果您希望代理仅适用于特定范围)或“服务器选项”(如果要使全局应用代理),然后选择“配置选项”,然后向下滚动列表以确保选项252被检查(这是您刚刚设置的选项!),点击确定并关闭DHCP配置。
现在为您的客户请求一个新的DHCP租约,将Web浏览器中的代理选项设置为自动检测配置,然后导航到 ,您应该看到以下内容:
您的IP地址是:xxxx
检测到可能的代理:1.0 your.fqdn.here:3128(squid / 2.7.STABLE3)
...表示您的连接已被代理!
可选DNS配置
WPAD设置应该没有这个步骤,但是如果您没有运行DHCP,请将您的代理服务器的DNS别名设置为“wpad”,以便当您尝试解析http://wpad.your.fqdn .here /,您被重定向到Web服务器(可能在您的代理服务器上)。 诸如Internet Explorer和Firefox之类的Web浏览器在此位置找不到wpad.dat条目,如果通过DHCP未正确传递该选项,则各种DNS服务器将具有不同的设置此别名的方法。
(新!)使用SSH远程访问您的代理
为了能够远程连接到您的代理,您必须(显然)在您的网络上设置一个SSH服务器。 有很多方法来实现这一结果。 Ubuntu社区文档可以在https://help.ubuntu.com/community/SSH/OpenSSH/Configuring找到一个很好的例子 。 设置此服务器不在本教程的范围之内,但我建议将代理服务器与SSH服务器分开是一个不希望用户绕过代理的环境的好主意。 将两台服务器置于同一台机器上意味着用户可以自由地隧道未受保护的Squid端口,而不是受保护的DansGuardian端口。 分离服务器意味着代理仍将仅允许连接到8080.但是,如果此服务器是家庭使用的,您可以随意设置,但是您希望。 重要的是要记住,如果SSH服务器和DansGuardian位于同一台机器上,则必须在/etc/dansguardian/dansguardian.conf中
设置另一个“filterip”行等于127.0.0.1,以便DG将监听本地主机代理通过SSH进行请求
为了远程使用代理,从远程机器创建一个SSH隧道到代理服务器/端口:
ssh -p 22 username@ssh-server-ip -L 8080:proxy-server-ip:proxy-port -N
其中“-p 22”是SSH服务器的默认端口,如果不同,请更改它),“username”是SSH服务器上的用户名,“ssh-server-ip”是您的SSH服务器的IP地址远程SSH服务器“proxy-server-ip”是您的代理服务器的本地IP地址(即其内部地址,192.168.1.whatever - 如果SSH服务器和代理服务器在同一台机器上,请使用127.0.0.1) ,“proxy-port”是...代理端口(8080,如果你一直在跟踪)。
现在,您可以进入远程计算机上的Web浏览器,代理设置以及代理服务器的IP,键入“localhost”OR“127.0.0.1”和端口8080.您的网络流量现在将隧道通过SSH到您的服务器,然后传递到代理服务器进行受保护的冲浪!
结论
一个最后的测试将确保防病毒检测工作正常。 浏览到http://www.eicar.org/anti_virus_test_file.htm并向下滚动页面,尝试下载EICAR防病毒测试文件,该文件不是恶意的,但应该对ClamAV构成威胁。 如果DansGuardian正在工作,并且您尚未编辑默认配置,则应该避免由于扩展名而尝试下载多个文件,并且应该被DansGuardian“拒绝访问”页面通知。 要更改此行为,请编辑/ etc / dansguardian /
名为“bannedextensionlist”和“bannedmimetypelist”列表中的禁用列表。 之后,您仍然无法下载Anti-Virus测试文件,DansGuardian会通知您,由于病毒内容您已被拒绝访问。
遵循本教程后,您应该有一个Squid缓存代理服务器,受DansGuardian的内容过滤功能保护,并且具有由ClamAV提供的互联网文件的病毒扫描; 最重要的是,WPAD应确保客户端必需的唯一配置是确保在客户端的Web浏览器中检查“自动检测此网络的代理设置”。 所有这一切通过安装文件只通过apt! 希望本教程对您有用。 如果您有任何疑问,请随时与我联系,我可以帮您排查。