FortiGate
FortiGate Next Generation Firewall utilizes purpose-built security processors and threat intelligence security services from FortiGuard labs to deliver top-rated protection and high performance, including encrypted traffic.
vhitnal
Staff
Staff
Article Id 191767

Description


This article describes how to allow YouTube channels while blocking all the other videos.

Only the videos from that channel will be reproduced.

 

Scope

 

FortiGate v7.0.11+.


Solution


With the video filter profile, it is possible to filter YouTube videos by channel ID for a more granular override of a single channel, user, or video.
The video filter profile is currently supported in proxy-based policies and requires SSL deep inspection.

 

It is recommended the use of YouTube API key, FortiGate extracts the video ID (vid) and tries to check the category and channel from the local cache. If there is no match from the local cache, it connects to the FortiGuard video rating server to query the video category. If the FortiGuard rating fails, it uses the videofilter.youtube-key to communicate with the Google API server to get its category and channel ID. 

 

To create the YouTube key:

 

  1. Go to console.cloud.google.com and log in with a Google Account.
  2. Create a new project:

    09.jpg
  3. Give it name and select 'CREATE':

 

10.jpg

 

  1. Select the Project, go to Navigation Menu -> APIs & Services -> Credentials:

     

    11.jpg

     

     

  2. Select 'Enabled APIs & services', and select 'ENABLE APIS AND SERVICES':

     

    12.jpg

     

     

  3. Select 'YouTube Data API V3'. Enable the API:

     

    13.jpg

     

    14.jpg

     

     

  4. Select 'Credentials', then CREATE CREDENTIALS -> API Key:

     

    15.jpg

     

    16.jpg

     

     

  5. Copy the API key and set it on FortiGate through CLI:


    config videofilter youtube-key

        edit 1
            set key *****************
        next
    end


To configure a video filter from GUI.

 

  1. Go to Security Profiles -> Video Filter and select 'Create New'. Add a profile name. In some cases, Video Filter might not be visible thus use the following commands if needed:


config system settings
     set gui-proxy-inspection enable
end


01.jpg

  1. In the YouTube Channel override list section, select 'Create New'. The New Channel Override Entry pane opens.
  • Collect Channel ID:
    • On YouTube, go to YouTube Channel and select More information about this channel -> Share Channel -> Copy channel ID.

 

    • HarveyRebelo_0-1726876406405.png

       

       

  • Enter a Channel ID and select an Action. To allow the channel, the actions 'Allow' or 'Monitor' can be used:

 

02.jpg

 
  • Select 'OK'.
The channel default action is 'Monitor', therefore all YouTube channels are allowed by default. For this example, it is necessary to change the default action to 'Block'. 
 
This step must be done through CLI:
 
config videofilter youtube-channel-filter
    edit 1
        set name "VideoFilter"   
<----- Video Filter profile name.
        set default-action block

            config entries
                edit 1
                    set action allow
                    set channel-id "UCRMwv-dKBzq9rH"
                next
            end
        set override-category enable <----- To guarantee the channel action will override the Video Categories.
        set log enable 
<----- Enable this option to generate logs.
    next
end

All the YouTube channels will be blocked except the one added to the override list in Step 2.


Note that for versions higher than 7.4.x, the configuration is slightly different, because the 'config videofilter youtube-channel-filter'  feature line is not available. Only available 'Keyword", 'profile' and 'youtube-key':

config videofilter
keyword Configure video filter keywords.
profile Configure VideoFilter profile.
youtube-key Configure YouTube API keys.


Due to this, in the 'Config videofilter profile' it must manually create the default action 'Block' to block 'any' categories of videos not allowed as follows:

Video_Filter_7_4_x.JPG

  1. Create the firewall policy: 
  • Go to Policy & Objects -> Firewall Policy and select 'Create New'.
  • For Inspection Mode, select Proxy-based.
  • Enable 'Video Filter' and select the profile created.
  • WebFilter profile is not mandatory. If it is used, the category 'Streaming Media and Download' must be set to 'Allow' or 'Monitor'.
  • For SSL Inspection, select 'deep-inspection'. Note- In some scenarios, deep inspection will not work, but works with custom deep inspection.
  • To guarantee the SSL deep inspection is performed correctly, the QUIC protocol must be blocked. Enable 'Application Control Profile' and make sure QUIC is blocked:
 3.jpg
 
  • When all the profiles are enabled, select Ok in the Firewall Policy settings:
 
04.jpg
 
  1. Test YouTube access.
  • The initial page will be loaded, it is expected. But the videos will not work, they keep loading:
 
05.jpg
 

Youtube block.png

 

Run the below commands to check in the CLI:

 

fermion-kvm57 # diagnose test application wad 1000

fermion-kvm57 # diagnose wad debug enable level verbose

fermion-kvm57 # diagnose wad debug enable category video
Debug messages will be on for 30 minutes.

fermion-kvm57 # diagnose debug enable

 

[V][p:29565] wad_video_filter_on_ftgd_video_rating:1568 task=0x7f37312b81c8,state=5
[V][p:29565] wad_vf_task_on_ftgd_resp :1519 task=0x7f37312b81c8 received ftgd resp, resp ok
[V][p:29565] wad_vf_task_on_ftgd_resp :1530 category_id=6
[V][p:29565] wad_youtube_source_req_alloc :615 req=0x7f372cc69c08
[I][p:29565] wad_youtube_api_req_video_info :554 video info req submitted ret=1
[I][p:29565] wad_vf_task_check_api :1747 task=0x7f37312b81c8 waiting for youtube api video info
[V][p:29565] wad_vf_async_task_run :1884 end of async task ret=0
[I][p:29565] wad_youtube_api_video_info_cbs :448 hreq=0x7f372fcd04d8, code=2
[V][p:29565] wad_ytf_task_on_api_fail :1705 task=0x7f37312b81c8,state=8,fail_msg=failed to get video info response
[V][p:29565] wad_youtube_source_req_close :586 req=0x7f372cc69c08
[I][p:29565] wad_vf_sync_task_proc_async_result:2090 task=0x7f37312b81c8 item=0x7f3729d8d048
[V][p:29565] wad_vf_sync_task_proc_async_result:2126 ctx(0x7f3731611408) category result is block
[I][p:29565] wad_vfc_client_add :233 oid=4226947919158231301
vfc-core add new item, item's value:

 

  • The following error might be displayed:
 
06.jpg
 
  •  The block events can be seen in the Web filter logs:
 
07.jpg
 
  •  Only the allowed channel will open:
 
08.jpg