Explicit proxy是Fortigate firewall集成的众多优秀的功能之一,下面说下Explict防火墙的简单配置。文章中仅介绍部署web proxy的部分,FTP proxy的配置过程类似,这里就先略过。


背景:

  1. 最近使用中国联通的网络访问国外的一些工作常用站点非常困难,网页响应时间长,甚至无法加载网页等。

    1. 某些部门的同事需要下载国外的同事发来的一些文件,很多是通过国外的云服务共享的,比如dropbox,google docs,onedrive等等;

    2. 某部门同事工作常用的站点,比如webex.com,netsuite.com,微软的CRM站点;

    3. 外企常用的搜索引擎google.com等等。大家都知道靠baidu是搜索新的有价值的技术资料是非常困难的;

  2. 解决方案:

    1. 代理;

    2. ×××;

    3. 在国外的office提供VM给国内的用户远程使用等等;


      这里笔者之前主要使用的是代理服务器,SQUID for windows,没有使用Linux版本的SQUID主要是因为公司熟悉Linux的同事并不多,怕以后维护比较困难。我之前的SQUID配置了NTLM验证,公司内通过Domain环境管理,所以为用户开放权限比较方便。由于SQUID for windows的版本非常旧了,更新到2.7之后就不更新了。碰巧前端时间刚刚帮公司更换了Fortigate的NGFW,经过国外的同事提示,NGFW内置了Explicit proxy,非常有新鲜感。也正好有脱离SQUID的想法,所以研究了起来。


  3. 配置步骤,大概分为以下几个部分:

    1. 启用explicit feature;

    2. 启用WAN Optimization feature;

    3. 配置Explicit proxy使用的端口;

    4. 在需要的interface启用explicit proxy web支持;

    5. 配置explicit proxy使用的service;

    6. 配置explicit policy;

    7. 配置RADIUS验证用户,方便权限管理;

    1. 配置windows NPS作为RADIUS服务器;

    2. 在Active Directory中建立相应的group,用于分配权限;



环境信息:

  • FortiGate 200D;

  • FortiOS 5.2;

  • 使用56789作为explicit proxy的服务端口;

  • 使用windows Active Directory,通过windows NPS设置RADIUS server验证用户;


以下是具体的配置过程:

  1. 启用Explicit feature,启用后的效果如下图:

    1. 通过web登录FW进行GUI配置;

    2. System->Config->Features;

    3. 启用basic features中的WAN Opt. & Cache;

    4. 启用Security features中的Explicit Proxy;

      wKiom1SdgkfgSa9VAARtqYqhnGA401.jpg

  2. 配置Explicit Proxy使用的服务端口,如下图所示;

    1. 依次展开system->Network->Explicit proxy

    2. 在Enable web explicit proxy项目中勾选HTTP/HTTPS;

    3. 在HTTP端口中输入56789;

    4. 在HTTPS端口保持默认设置0;

    5. 在Realm一栏,输入你想要提示窗口中显示的文字,如“Please enter your domain credentials”;

    6. 该页面其他选项保持默认即可;

      wKiom1SdhRvAhQmXAAFGbW2Z5SQ579.jpg

  3. 选择监听explicit proxy请求的interface;

    1. 可以直接在上一步界面点击listen on interfaces右侧的编辑按钮,或者system->Network->Interfaces;

    2. 首先将本地网络启用explicit proxy feature,这是必须的一步;

    3. wKiom1Sdh-jx43qjAAIK4g5y_Ps874.jpg

    1. 笔者这里将explicit proxy设置在国外HQ,国内的网络和HQ通过LAN-2-LAN ×××连接,所以我需要将这个LAN-2-LAN ×××的interface启用explicit web proxy;

    1. 笔者这里为LAN网络;

    2. 双击LAN;

    3. 勾选enable explicit web proxy;

    4. 其他的interface中同理进行勾选;

  4. 配置explicit web proxy使用的service;

    1. 笔者这里做了个实验,测试了仅开放向internet转发目的端端口为80和443端口的请求,以提高安全性,但具体安全性如何还不了解;

    2. 系统默认的webproxy服务一般是这两点:

    3. 笔者定义了两个服务:

    4. 下图的service名为webproxy-80,service type为explicit proxy,这点需要注意。目的端的端口填写80。同理再新建一个service,端口设置为443即可;



    1. 允许任何服务的请求;

    2. 仅响应目的端口为80和443的请求;

    3. 允许所有协议请求;

    4. 允许向任何目的端口的请求;

wKiom1SdiUjzM0NcAAGPfeVUYHM609.jpg



配置Explicit web proxy的用户组:

  1. 这里希望大家已经在Active Directory中建立好了响应的用户组,笔者的用户组的名称为ProxyUser_CN,并且将需要使用explicit web proxy的用户都加入了该组;

  2. 然后需要指定RADIUS的相关信息;

    1. system->User & Device->Authentication->RADIUS servers;

    2. 新建一个RADIUS server,为这个RADIUS取个名字,输入RADIUS服务器的FQDN或者是IP地址;

    3. 输入您在RADIUS服务器中设置的secret,这里笔者推荐您使用windows NPS自带的secret生成器生成的长度为64bit的高复杂度secret,并且妥善保存;

    4. 其他项目不变,点击ok即可;

  3. System->User & Device->User->User Groups

    1. 新建一个User group,为该group命名;

    2. type为Firewall;

    3. 添加remote server为我们上一步新建的RADIUS server;

    4. 其他项目保持不变,保存设置即可;

配置Explicit policy,这里是整个配置过程的一个特别需要注意过程。并不是因为这个过程有多难或多不好理解,而是因为这里通过GUI无法完成配置,因为通过FW本身的GUI节目无法配置policy需要使用的服务。笔者曾将这个问题作为一个bug提交给客服,但support给的回复是配置service的开关是隐藏功能,仅仅能通过cli进行配置。笔者对这个回答并不买账,原因是如果您用Forti Manager的话,通过Forti Manager的管理界面就可以在GUI下配置该policy需要使用的service。

  1. 具体的配置过程,大家可以参考官方的文档介绍,我这里将我配置的命令粘贴如下,供大家参考:


  2. FW # config firewall explicit-proxy-policy 
     
    FW (explicit-proxy-p~icy) # edit 0
    new entry '0' added
     
    FW (0) # set proxy web 
     
    FW (0) # set dstintf wan1 
     
    FW (0) # set srcaddr 需要使用proxy的网络地址 
     
    FW (0) # set dstaddr all 
     
    FW (0) # set action accept 
     
    FW (0) # set service webproxy-80 webproxy-443 这里是我们上一步建立的两个service。就是这条在FortiOS 5.2中无法通过GUI实现; 
     
    FW (0) # set webcache enable 
     
    FW (0) # set identity-based enable 
     
    FW (0) # set ip-based disable 
     
    FW (0) # set active-auth-method basic 
     
    FW (0) # config identity-based-policy 
     
    FW (identity-based-p~icy) # edit 0
    new entry '0' added
     
    FW (0) # set groups 您定义的AD组的名称; 
     
    FW (0) # set schedule always 
     
    FW (0) # set utm-status enable,非必要条目 
     
    FW (0) # set webfilter-profile 您自定义的策略,本条非必要; 
     
    FW (0) # set profile-protocol-options default ,非必要条目;
     
    FW (0) # end
     
    FW (0) # end


到这里FW端的配置工作就基本结束了,剩下的就是测试FW和RADIUS之间的连接性。这里笔者建议大家通过cli进行测试,测试命令为:diagnose test authserver radius radius-name authentication-protocol username password关于配置Windows NPS作为Explicit web proxy的RADIUS服务器的过程,由于这个过程适用于Fortigate防火墙的很多功能的验证,我们稍后单独写一篇文章,敬请期待。