<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[The Practical Packet]]></title><description><![CDATA[The Practical Packet]]></description><link>https://thepracticalpacket.com</link><image><url>https://cdn.hashnode.com/uploads/logos/6a396670bcb09fbee7b0b604/ed1396a3-e336-4ef3-ab04-251de9822f8f.png</url><title>The Practical Packet</title><link>https://thepracticalpacket.com</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 06:17:37 GMT</lastBuildDate><atom:link href="https://thepracticalpacket.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Handling Networking Certs for Fortigates]]></title><description><![CDATA[Introduction
This is a general overview of how to handle certificate renewals both from CSR creation, and when handed different types of certificate files. Each section will have a type of certificate]]></description><link>https://thepracticalpacket.com/handling-networking-certs-for-fortigates</link><guid isPermaLink="true">https://thepracticalpacket.com/handling-networking-certs-for-fortigates</guid><category><![CDATA[Fortigate]]></category><category><![CDATA[Fortinet ]]></category><category><![CDATA[Certificates]]></category><dc:creator><![CDATA[Josh]]></dc:creator><pubDate>Tue, 23 Jun 2026 15:09:24 GMT</pubDate><content:encoded><![CDATA[<hr />
<h2>Introduction</h2>
<p>This is a general overview of how to handle certificate renewals both from CSR creation, and when handed different types of certificate files. Each section will have a type of certificate, and explain how to convert it for use on a Fortigate. I've also included links below for reading. The easiest way is always to generate a CSR (Certificate Signing Request) from the firewall, and sign it from a Certificate Vendor (e.g. GoDaddy, Network Solutions, etc), but you won't always be able to do that.</p>
<hr />
<h2>Generate the CSR</h2>
<p>This is by far the easiest way to get a certificate to work on a Fortigate. This has you generate a CSR from the firewall, and sign it via an SSL Certificate Vendor/Authority. We're going to use the WebGUI for this as it's 100x easier, but if you want to do it via CLI then that's fine too.</p>
<ul>
<li><p>Log into the Fortigate via WebGUI (e.g. <a href="https://192.168.1.99">https://192.168.1.99</a>)</p>
</li>
<li><p>Go to System</p>
</li>
<li><p>Go to Certificates</p>
</li>
<li><p>Click Generate</p>
</li>
<li><p>Enter Certificate Name (e.g. sslvpn.thepracticalpacket.com-2026)</p>
</li>
<li><p>Set the Key Type to RSA</p>
</li>
<li><p>Set the Key Size to 2048 Bit</p>
</li>
<li><p>Select the domain name and type in the FQDN (e.g. sslvpn.thepracticalpacket.com)</p>
</li>
<li><p>Fill in the rest of the information as needed (none of it is NEEDED reaslly)</p>
</li>
<li><p>Select the Enrollment Method as File Based</p>
</li>
<li><p>Click OK</p>
</li>
<li><p>To save the .csr file to your drive, highlight the "pending" certificate and select Download</p>
</li>
<li><p>Log into your Certificate Vendor/Authority (e.g. Godaddy)</p>
</li>
<li><p>You can follow the instructions in the links section for vendor specific ways to get CSRs signed</p>
</li>
</ul>
<hr />
<h2>Converting from a .crt + .key to PKCS#12 for Importing</h2>
<p>When you aren't able to generate your own private key and get a CSR signed, sometimes you will be provided a certificate file and a private key file. The easiest way to import this is to convert it to an encrypted PKCS12 formatted file using OpenSSL.</p>
<ul>
<li><p>Download OpenSSL from the link below (Choose the Win64 OpenSSL v4.0.1 version if you're using Windows and you're not sure)</p>
</li>
<li><p>Prepare to convert by gathering the location of your certificate (.crt) file and your private key file (e.g. c:/Temp/certificate.crt)</p>
</li>
<li><p>Open a Windows Explorer window (Win+E) and go to C:\Program Files\OpenSSL-Win64 (or wherever you installed OpenSSL)</p>
</li>
<li><p>Shift right click on the blank space while inside the folder and choose "Open Powershell here"</p>
</li>
<li><p>For this example, we'll assume the certificate file is named server.crt, and the private key file is named server.key, and the PKCS#12 file you want will be named server.p12</p>
</li>
<li><p>Type the following: .\openssl.exe pkcs12 -export -out server.p12 -inkey server.key -in server.crt</p>
</li>
<li><p>It will ask you for a password. Make sure you use a strong password and document it somewhere safe!</p>
</li>
<li><p>This will import your private key and certificate, and then export it as a PKCS12 formatted file</p>
</li>
</ul>
<hr />
<h2>Applying a PKCS#12/PFX Certificate to the Firewall</h2>
<p>Adding a PKCS12 (also known as a PFX) Certificate to a firewall is simple once you have it.</p>
<ul>
<li><p>Log into the Fortigate via WebGUI (e.g. <a href="https://192.168.1.99">https://192.168.1.99</a>)</p>
</li>
<li><p>Go to System</p>
</li>
<li><p>Go to Certificates</p>
</li>
<li><p>Click on Import</p>
</li>
<li><p>Click on Local Certificate</p>
</li>
<li><p>Click on PKCS#12 Certificate</p>
</li>
<li><p>Browse to the PKCS12 formatted file you created or were given</p>
</li>
<li><p>Type the password you created or were given with the file</p>
</li>
<li><p>Click Okay</p>
</li>
<li><p>You are now ready to use this for SSLVPN or anything else you need certificates for</p>
</li>
</ul>
<hr />
<h2>More Learning</h2>
<ul>
<li><p>OpenSSL Download - <a href="https://slproweb.com/products/Win32OpenSSL.html">https://slproweb.com/products/Win32OpenSSL.html</a></p>
</li>
<li><p>GoDaddy Cerificates - <a href="https://www.godaddy.com/help/set-up-and-install-my-standard-dv-ssl-certificate-42480">https://www.godaddy.com/help/set-up-and-install-my-standard-dv-ssl-certificate-42480</a></p>
</li>
<li><p>Network Solutions Certificates - <a href="https://www.networksolutions.com/help/article/get-started-with-ssl">https://www.networksolutions.com/help/article/get-started-with-ssl</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Open Box to Basic Fortigate Setup]]></title><description><![CDATA[FortiGate 40F Initial Setup: A Practical Guide for Small Business IT & MSPs

Introduction
This guide walks you through the full initial setup from factory default to a hardened, production-ready state]]></description><link>https://thepracticalpacket.com/open-box-to-basic-fortigate-setup</link><guid isPermaLink="true">https://thepracticalpacket.com/open-box-to-basic-fortigate-setup</guid><category><![CDATA[Fortigate]]></category><category><![CDATA[networking]]></category><category><![CDATA[Fortinet ]]></category><dc:creator><![CDATA[Josh]]></dc:creator><pubDate>Mon, 22 Jun 2026 23:18:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/89cbe141-4a54-42ea-9ecb-cba0d0a29e42.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>FortiGate 40F Initial Setup: A Practical Guide for Small Business IT &amp; MSPs</h1>
<hr />
<h2>Introduction</h2>
<p>This guide walks you through the full initial setup from factory default to a hardened, production-ready state, with security best practices baked in throughout.</p>
<hr />
<h2>What You'll Need</h2>
<p>Before you power on the device, make sure you have the following:</p>
<ul>
<li><p>FortiGate 40F unit and power adapter (or similar model)</p>
</li>
<li><p>RJ-45 Ethernet cable (for initial management access)</p>
</li>
<li><p>A laptop or workstation with a browser and SSH client</p>
</li>
<li><p>Your ISP connection details (static IP, PPPoE credentials, or DHCP — whatever applies) (if you're setting this up as your border firewall)</p>
</li>
<li><p>A Fortinet support account (to register the device and activate licenses - not required if you want to run trial licenses and a VM)</p>
</li>
<li><p>FortiCare and FortiGuard subscription details (UTM bundle or individual licenses)</p>
</li>
<li><p>Your planned IP scheme for the internal network (not super required, you can use 192.168.1.0/24 doesn't really matter for this demo)</p>
</li>
</ul>
<hr />
<h2>Step 1: Physical Setup and Initial Access</h2>
<p>Connect your management workstation to <strong>port 2</strong> (or any LAN port, typically 2–5 on the 40F) with an Ethernet cable. The WAN interface is <strong>port 1</strong> — leave that unplugged until the initial configuration is complete. This is an important security practice: never connect an unconfigured firewall to the internet.</p>
<p>The FortiGate 40F ships with the following defaults:</p>
<ul>
<li><p><strong>Management IP:</strong> <code>192.168.1.99</code></p>
</li>
<li><p><strong>Default credentials:</strong> username <code>admin</code>, no password</p>
</li>
<li><p><strong>HTTPS GUI:</strong> <code>https://192.168.1.99</code></p>
</li>
<li><p><strong>DHCP server:</strong> Enabled on LAN, serving the <code>192.168.1.0/24</code> range</p>
</li>
</ul>
<p>Set your workstation to a static IP in the <code>192.168.1.x</code> range (e.g., <code>192.168.1.10</code>, subnet mask <code>255.255.255.0</code>) and open a browser to <code>https://192.168.1.99</code>. Accept the self-signed certificate warning — you'll replace this later.</p>
<blockquote>
<p><strong>Security note:</strong> Modern browsers will aggressively warn about the self-signed cert. This is expected on first access. Don't save an exception permanently — once you've configured a proper FQDN and certificate, this warning goes away. Realistically you don't need a proper FQDN and certificate for management, but if you want to make it very clean, do that!</p>
</blockquote>
<hr />
<h2>Step 2: First Login and Firmware Update</h2>
<p>Log in with <code>admin</code> and a blank password. FortiOS will immediately prompt you to set a new admin password.</p>
<p><strong>Password requirements for production:</strong></p>
<ul>
<li><p>Minimum 12 characters</p>
</li>
<li><p>Mix of uppercase, lowercase, numbers, and special characters</p>
</li>
<li><p>Do not reuse passwords from other devices</p>
</li>
<li><p>Store it in your password manager or documentation vault immediately</p>
</li>
</ul>
<p>Once logged in, the setup wizard will launch. You can run through it, but for MSPs and experienced engineers, it's often cleaner to dismiss it and configure manually so you know exactly what's been set.</p>
<p><strong>Check and update firmware first — before anything else.</strong></p>
<p>Navigate to <strong>Dashboard &gt; Status</strong> and note the current FortiOS version. Then go to <strong>System &gt; Firmware &amp; Registration</strong> and check for updates. As of this writing, FortiOS 7.6.x is the current stable branch for the 40F. Always run a supported, non-EOL firmware version. The current FortiOS recommended by Fortinet is here: <a href="https://community.fortinet.com/fortigate-3/technical-tip-recommended-release-for-fortios-116639">https://community.fortinet.com/fortigate-3/technical-tip-recommended-release-for-fortios-116639</a></p>
<blockquote>
<p><strong>Compatibility Note:</strong> Fortigate has stopped allowing SSLVPN on smaller models. Make sure you're ready to use IPSEC if you update to the latest!</p>
</blockquote>
<blockquote>
<p><strong>Security note:</strong> Fortinet regularly patches critical CVEs (FortiOS has had several high-severity vulnerabilities in recent years). Running outdated firmware is one of the most common attack vectors on perimeter devices. Patch before you deploy, and schedule recurring maintenance windows for ongoing updates.</p>
</blockquote>
<p>After upgrading, the device will reboot. Log back in.</p>
<hr />
<h2>Step 3: Register the Device and Activate Licenses</h2>
<p>Go to <strong>Dashboard &gt; Status &gt; License Information</strong> and register the unit using your Fortinet support account. You'll need the device serial number, which is on the bottom label and in the dashboard.</p>
<p>Registration enables:</p>
<ul>
<li><p>FortiGuard threat intelligence updates (antivirus, IPS signatures, web filter databases)</p>
</li>
<li><p>Technical support entitlement</p>
</li>
<li><p>Firmware access</p>
</li>
</ul>
<p>If you have a FortiCare bundle or UTM subscription, activate the licenses here. For MSPs managing multiple clients, FortiManager and/or FortiCloud make this process scalable.</p>
<blockquote>
<p><strong>Best practice:</strong> Don't skip licensing. Running a FortiGate with expired FortiGuard subscriptions means your IPS signatures, web filter categorizations, and AV definitions are stale. That's a NGFW with the "Next-Gen" stripped out. May as well bring back out the trusty Linksys DDWRT box...</p>
</blockquote>
<hr />
<h2>Step 4: Hostname, Time, and Basic System Settings</h2>
<p>Navigate to <strong>System &gt; Settings</strong>.</p>
<p>Set the following:</p>
<p><strong>Hostname:</strong> Use a meaningful, site-specific name (e.g., <code>FGT-ClientName-Site01</code>). This matters for syslog correlation and FortiManager inventory.</p>
<p><strong>Timezone:</strong> Set the correct local timezone for the deployment site. Accurate timestamps are critical for log analysis and incident response. Don't skip this part!!!! It's often missed.</p>
<p><strong>NTP:</strong> Enable NTP and point it to reliable servers. Fortinet's built-in NTP pool (<code>ntp1.fortinet.com</code>, <code>ntp2.fortinet.com</code>) works well, or use your preferred public servers (e.g., <code>pool.ntp.org</code>). Time sync is non-negotiable — certificate validation, logging, and scheduled tasks all depend on it.</p>
<p><strong>Idle timeout:</strong> Reduce the admin session timeout from the default 480 minutes to something reasonable — 15 or 30 minutes is a good balance for active engineers. I've often seen clients request it pushed to 60 minutes instead if they have read-only or admin access.</p>
<hr />
<h2>Step 5: Configure WAN (Port 1)</h2>
<p>Navigate to <strong>Network &gt; Interfaces</strong> and click on <code>port1</code> (WAN).</p>
<p>Configure it based on your ISP connection type:</p>
<p><strong>DHCP (most common for cable/fiber residential-grade connections):</strong></p>
<ul>
<li><p>Set Addressing Mode to DHCP</p>
</li>
<li><p>Enable "Retrieve default gateway from server"</p>
</li>
</ul>
<p><strong>Static IP:</strong></p>
<ul>
<li>Enter the IP address, subnet mask, and default gateway provided by your ISP</li>
</ul>
<p><strong>PPPoE (common with DSL or some fiber ISPs):</strong></p>
<ul>
<li><p>Set Addressing Mode to PPPoE</p>
</li>
<li><p>Enter your username and password</p>
</li>
<li><p>Cry a bit because you have to still use PPPoE</p>
</li>
</ul>
<p><strong>Security hardening for the WAN interface:</strong></p>
<ul>
<li><p><strong>Administrative Access:</strong> Uncheck everything (HTTPS, SSH, HTTP, Ping) unless you have a specific, documented reason to enable it</p>
</li>
<li><p>Never expose the management GUI to the internet through the WAN interface without a jump host, VPN, or IP whitelist in front of it</p>
</li>
</ul>
<blockquote>
<p><strong>Critical security note:</strong> Leaving HTTPS or SSH enabled on the WAN interface is one of the leading causes of FortiGate compromise. Shodan and other scanners will find your device within hours of it going online. Keep management access locked to the LAN or a trusted management VLAN. If you absolutely need external access, use a local in policy (<a href="https://docs.fortinet.com/document/fortigate/7.6.4/administration-guide/363127/local-in-policy">https://docs.fortinet.com/document/fortigate/7.6.4/administration-guide/363127/local-in-policy</a>)</p>
</blockquote>
<p>Once configured, you can connect the WAN cable to your ISP modem or handoff. Verify connectivity under <strong>Network &gt; Routing</strong> and confirm a default route appears.</p>
<hr />
<h2>Step 6: Configure LAN Interface and DHCP</h2>
<p>Navigate to <strong>Network &gt; Interfaces</strong> and click on the LAN interface (often shown as <code>lan</code> or <code>internal</code>, depending on firmware version).</p>
<p><strong>Recommended changes from default:</strong></p>
<p><strong>IP/Subnet:</strong> Change the default <code>192.168.1.99/24</code> to your planned internal subnet. Common choices are <code>10.x.x.1/24</code> or <code>172.16.x.1/24</code>. Using the default <code>192.168.1.x</code> range is fine functionally, but it creates issues with split tunneling in VPN scenarios and conflicts with many ISP-provided modems.</p>
<p><strong>DHCP Server:</strong> Enable and configure the built-in DHCP server for the LAN:</p>
<ul>
<li><p>Set the address range (e.g., <code>10.10.1.100</code> to <code>10.10.1.200</code>)</p>
</li>
<li><p>Set the default gateway to the FortiGate's LAN IP</p>
</li>
<li><p>Configure DNS servers — either use Fortinet's DNS filter feature or specify <code>8.8.8.8</code> / <code>1.1.1.1</code> as upstream resolvers</p>
</li>
<li><p>Set lease time appropriately (8–24 hours for most office environments)</p>
</li>
</ul>
<p><strong>Administrative Access on LAN:</strong> Only enable what you actually need. HTTPS and SSH for management are reasonable. Disable HTTP — there's no reason to allow unencrypted management access. If you enabled local-in-policy above, make sure you allow for your internal network/hosts as appropriate too!</p>
<hr />
<h2>Step 7: Configure Security Profiles</h2>
<p>This is where the FortiGate earns its "next-generation" label. Navigate to <strong>Security Profiles</strong> in the left menu.</p>
<h3>Antivirus</h3>
<p>Create or edit the default AV profile. For most SMB deployments:</p>
<ul>
<li><p>Enable scanning for HTTP, HTTPS, FTP, IMAP, POP3, SMTP</p>
</li>
<li><p>Enable blocking of infected files</p>
</li>
<li><p>Enable detection of grayware/riskware</p>
</li>
</ul>
<h3>Web Filter</h3>
<p>Enable web filtering in flow-based or proxy-based inspection mode (flow-based has lower latency; proxy-based offers more granular control). At minimum:</p>
<ul>
<li><p>Block known malicious sites (built-in with FortiGuard categories)</p>
</li>
<li><p>Block anonymizers and proxy avoidance tools</p>
</li>
<li><p>Block phishing and fraud categories</p>
</li>
</ul>
<p>Adjust content filtering categories based on the client's acceptable use policy. Document what you've enabled and why.</p>
<h3>Intrusion Prevention System (IPS)</h3>
<p>Apply an IPS profile to outbound and inbound policies. The default <code>protect_client</code> profile is a reasonable starting point for LAN-to-WAN traffic. Review and tune signatures periodically — overly aggressive IPS can cause false positives.</p>
<h3>Application Control</h3>
<p>Enable application control to gain visibility into what's crossing the wire. Start in monitor-only mode to establish a baseline, then move to blocking after you understand the environment's legitimate traffic patterns.</p>
<h3>SSL/TLS Inspection</h3>
<p>This is often skipped in SMB deployments — don't skip it. A large percentage of modern malware uses HTTPS. Without SSL inspection, your AV and IPS profiles are blind to encrypted threats.</p>
<p>Configure a Deep Inspection profile, install the FortiGate's CA certificate on client machines (via Group Policy or MDM), and apply the inspection profile to your outbound policy.</p>
<blockquote>
<p><strong>Note:</strong> SSL inspection requires client trust of the FortiGate's certificate. Plan this deployment carefully, especially for managed devices. Unmanaged personal devices (BYOD) may need to be on a separate policy without inspection, or require users to manually install the cert.</p>
</blockquote>
<hr />
<h2>Step 8: Configure Firewall Policies</h2>
<p>Navigate to <strong>Policy &amp; Objects &gt; Firewall Policy</strong>.</p>
<p>A clean policy set is easier to audit and troubleshoot. Follow these principles:</p>
<p><strong>LAN to WAN (outbound):</strong> Create a policy allowing internal traffic out to the internet. Apply your security profiles (AV, web filter, IPS, application control, SSL inspection) here. Log all sessions — storage is cheap, blind spots are expensive.</p>
<p><strong>WAN to LAN (inbound):</strong> By default, no inbound policy exists, meaning all unsolicited inbound traffic is denied. This is the correct default. Only create inbound rules for specific, documented, business-justified services (e.g., a VIP/DNAT rule for an on-prem mail server or remote access service). Each inbound rule should be as specific as possible — source IP restrictions, specific destination ports, and logging enabled.</p>
<p><strong>Implicit deny:</strong> FortiOS has an implicit deny-all at the bottom of the policy table. Don't delete it. Enable logging on it to catch unexpected traffic patterns.</p>
<p><strong>Policy hygiene best practices:</strong></p>
<ul>
<li><p>Name every policy descriptively (e.g., <code>LAN_to_WAN_Outbound_UTM</code> not <code>Policy_1</code>)</p>
</li>
<li><p>Add comments explaining the business justification</p>
</li>
<li><p>Review the policy table quarterly and remove unused rules</p>
</li>
<li><p>Avoid "any/any" policies — specify source and destination objects wherever possible</p>
</li>
</ul>
<hr />
<h2>Step 9: Configure Remote Access (VPN)</h2>
<p>For remote workers or MSP management access, configure either SSL-VPN or IPsec VPN.</p>
<p><strong>SSL-VPN (web portal + FortiClient):</strong></p>
<p>Navigate to <strong>VPN &gt; SSL-VPN Settings</strong>.</p>
<ul>
<li><p>Bind to a specific interface (consider a loopback or management port rather than the main WAN - <a href="https://community.fortinet.com/fortigate-3/technical-tip-ssl-vpn-connection-to-a-loopback-interface-using-virtual-ip-176357">https://community.fortinet.com/fortigate-3/technical-tip-ssl-vpn-connection-to-a-loopback-interface-using-virtual-ip-176357</a>)</p>
</li>
<li><p>Set the listening port — changing from the default 443 or 10443 to a non-standard port adds mild obscurity, though it's not a substitute for strong auth. It's also extremely annoying to troubleshoot and adds another step for manual client setups if you don't have FortiEMS or another XML push script.</p>
</li>
<li><p>Enable two-factor authentication — FortiToken, email OTP, or integration with a RADIUS/MFA provider. Even better if you can do SAML with Azure or similar!</p>
</li>
<li><p>Restrict access to specific user groups</p>
</li>
<li><p>Set idle and authentication timeout values</p>
</li>
</ul>
<p>Create an SSL-VPN portal and a firewall policy allowing VPN users access only to the resources they need — not the entire internal network.</p>
<p><strong>IPsec VPN (site-to-site):</strong></p>
<p>For connecting branch offices or client sites, use IPsec with IKEv2. Use strong encryption parameters:</p>
<ul>
<li><p>Phase 1: AES-256, SHA-256, DH Group 14 or higher</p>
</li>
<li><p>Phase 2: AES-256, SHA-256</p>
</li>
</ul>
<p>Avoid outdated algorithms (DES, 3DES, MD5, DH Group 1/2/5). FortiOS will flag weak proposals, but verify manually.</p>
<hr />
<h2>Step 10: Harden Administrative Access</h2>
<p>This section is often skipped in rushed deployments. Don't.</p>
<h3>Change the default admin account</h3>
<p>Navigate to <strong>System &gt; Administrators</strong>. The built-in <code>admin</code> account cannot be deleted, but you should:</p>
<ul>
<li><p>Set a strong password (done in Step 2)</p>
</li>
<li><p>Create a separate named admin account for each engineer who needs access (for audit trail purposes)</p>
</li>
<li><p>Assign appropriate permission profiles — not everyone needs super-admin</p>
</li>
</ul>
<h3>Enable two-factor authentication for admin accounts</h3>
<p>Go to <strong>System &gt; Administrators</strong>, edit each account, and enable two-factor authentication using FortiToken Mobile, email OTP, or a RADIUS/TACACS+ server.</p>
<h3>Restrict management access by trusted hosts</h3>
<p>In each admin account, set <strong>Trusted Hosts</strong> — this restricts GUI and SSH login to specific source IP addresses. For MSPs, whitelist your jump host, RMM egress IP, or management VLAN. This is one of the most effective controls against unauthorized admin access. You can also use local-in-policy for this. If you do this, you prevent the ability for someone to forget adding trustedhosts to a new admin user, and opening the entire device up to the internet because of a simple mistake.</p>
<h3>Disable unused management services</h3>
<p>Under <strong>System &gt; Settings &gt; Administration Settings:</strong></p>
<ul>
<li><p>Disable HTTP (use HTTPS only)</p>
</li>
<li><p>Consider disabling the management GUI on the WAN interface entirely (done in Step 5)</p>
</li>
<li><p>Enable HTTPS redirect</p>
</li>
</ul>
<h3>Replace the self-signed certificate</h3>
<p>Navigate to <strong>System &gt; Certificates</strong> and either import a certificate from your PKI or use Fortinet's ACME integration to generate a Let's Encrypt certificate for the management domain. A valid cert eliminates browser warnings and ensures encrypted management traffic isn't undermined by users clicking through cert errors. Your helpdesk will thank you... because if you don't do this... they're getting a lot of tickets.</p>
<hr />
<h2>Step 11: Logging and Monitoring</h2>
<p>A firewall you can't see into is a liability.</p>
<h3>Configure FortiCloud or a syslog server</h3>
<p>Navigate to <strong>Log &amp; Report &gt; Log Settings</strong>.</p>
<p>For standalone deployments, enable <strong>FortiCloud</strong> (basic log storage is included with registration). For MSP environments, forward logs to a central syslog server or SIEM (Splunk, Graylog, Microsoft Sentinel, etc.) using UDP/TCP syslog on port 514.</p>
<p><strong>What to log:</strong></p>
<ul>
<li><p>Traffic logs (at minimum, log denied traffic and security policy matches)</p>
</li>
<li><p>Event logs (admin logins, config changes, HA events)</p>
</li>
<li><p>Security logs (IPS, AV, web filter alerts)</p>
</li>
<li><p>VPN logs</p>
</li>
</ul>
<p><strong>Log level:</strong> Set to "Information" for security events. "Debug" is noisy and for troubleshooting only.</p>
<h3>Set up email alerts</h3>
<p>Under <strong>Log &amp; Report &gt; Alert Email</strong>, configure alerts for critical events: admin login failures, IPS critical detections, high CPU/memory, HA failovers.</p>
<h3>SNMP monitoring</h3>
<p>If your NMS (LibreNMS, PRTG, Zabbix, etc.) supports it, configure SNMP v3 (not v1 or v2c — those send community strings in plaintext) for interface monitoring, resource utilization, and uptime tracking.</p>
<hr />
<h2>Step 12: Backup the Configuration</h2>
<p>Before going live, export a backup of the full configuration.</p>
<p>Navigate to <strong>System &gt; Backup</strong> and download the config file. Store it in:</p>
<ul>
<li><p>Your documentation platform (IT Glue, Hudu, etc.)</p>
</li>
<li><p>A secure file share or backup location separate from the device</p>
</li>
<li><p>Source control, if your team uses it for network configs</p>
</li>
</ul>
<p>Set an automation stitch or scheduled task to push config backups to FortiCloud or your backup destination on a regular cadence (weekly at minimum).</p>
<blockquote>
<p><strong>MSP note:</strong> For client environments, keep a copy of the decryption password if you encrypt the backup file. Losing it means losing access to the config. You can also use FortiManager to keep config downloads and change management as it can be set up to take a config file for every change it sees.</p>
</blockquote>
<hr />
<h2>Post-Deployment Checklist</h2>
<p>Before handing the environment over, run through this checklist:</p>
<ul>
<li><p>[ ] Firmware is current and on a supported release</p>
</li>
<li><p>[ ] Device is registered and licenses are active</p>
</li>
<li><p>[ ] Default admin password has been changed</p>
</li>
<li><p>[ ] Named admin accounts created for each engineer; MFA enabled</p>
</li>
<li><p>[ ] Trusted hosts configured on all admin accounts</p>
</li>
<li><p>[ ] WAN interface has no management services exposed</p>
</li>
<li><p>[ ] LAN subnet changed from default <code>192.168.1.x</code> (if applicable)</p>
</li>
<li><p>[ ] DNS configured and resolving</p>
</li>
<li><p>[ ] NTP synced and timezone correct</p>
</li>
<li><p>[ ] Security profiles (AV, IPS, Web Filter, App Control) applied to outbound policy</p>
</li>
<li><p>[ ] SSL inspection configured and CA cert deployed to clients</p>
</li>
<li><p>[ ] No unnecessary inbound firewall policies</p>
</li>
<li><p>[ ] Implicit deny logging enabled</p>
</li>
<li><p>[ ] VPN configured with MFA (if required)</p>
</li>
<li><p>[ ] Syslog/FortiCloud logging enabled</p>
</li>
<li><p>[ ] Alert emails configured</p>
</li>
<li><p>[ ] Configuration backed up and stored securely</p>
</li>
</ul>
<hr />
<h2>Ongoing Maintenance</h2>
<p>Setup is a one-time event. Maintenance is continuous.</p>
<ul>
<li><p><strong>Firmware:</strong> Review Fortinet PSIRT advisories monthly. Patch critical vulnerabilities within your SLA windows.</p>
</li>
<li><p><strong>Policy review:</strong> Audit firewall policies quarterly. Remove stale rules, document changes. This is easier said than done, but good standardization practices make this much easier.</p>
</li>
<li><p><strong>License renewal:</strong> Track expiration dates. Expired FortiGuard means stale threat intelligence. It can also mean your webfilter blocking all traffic because it can't access FortiGuard. Ask me how I know!</p>
</li>
<li><p><strong>Log review:</strong> Review security logs regularly, or ensure your SIEM has alerting that does it for you.</p>
</li>
<li><p><strong>Backup verification:</strong> Periodically restore a config backup to a test unit or VM (FortiGate VM is available) to verify backup integrity.</p>
</li>
</ul>
<hr />
<h2>Closing Thoughts</h2>
<p>The FortiGate 40F is a capable piece of hardware, and FortiOS is a mature platform — but the security it provides is only as good as the configuration behind it. Default settings are designed for ease of first use, not for production security. Every step in this guide moves the device from "out of the box" to "defensible."</p>
<p>For MSPs, consider templating this configuration in FortiManager or using FortiOS CLI scripts to speed up consistent, repeatable deployments across client sites. Consistency is security at scale.</p>
<p>If you have questions or want to share how your team approaches FortiGate deployments, drop a comment below.</p>
<hr />
<p><em>This guide was written based on FortiOS 7.4.x on the FortiGate 40F. Interface names and menu paths may vary slightly between firmware versions.</em></p>
]]></content:encoded></item><item><title><![CDATA[Stop the Flap: Practical FortiGate SD‑WAN Tuning for Stable Internet]]></title><description><![CDATA[A ticket arrives: users report intermittent internet outages. The firewall shows both links up, monitoring dashboards are green, and server speed tests look normal—yet users experience multiple daily ]]></description><link>https://thepracticalpacket.com/stop-the-flap-practical-fortigate-sd-wan-tuning-for-stable-internet</link><guid isPermaLink="true">https://thepracticalpacket.com/stop-the-flap-practical-fortigate-sd-wan-tuning-for-stable-internet</guid><category><![CDATA[#howtos]]></category><category><![CDATA[Fortigate]]></category><category><![CDATA[Fortinet ]]></category><dc:creator><![CDATA[Josh]]></dc:creator><pubDate>Mon, 22 Jun 2026 17:01:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/a722db87-bbf2-4e30-943e-075fb9116cf1.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A ticket arrives: users report intermittent internet outages. The firewall shows both links up, monitoring dashboards are green, and server speed tests look normal—yet users experience multiple daily disconnects. The timing coincides with a recent firewall installation and a simple SD‑WAN configuration using two ISPs. During troubleshooting, the SD‑WAN logs reveal a flood of alternating messages: “route removed due to SLA failure” followed by “route added back into route table.” After tuning the SD‑WAN settings, the instability disappears. The follow‑up—how do we prevent this from happening again—has an unsurprising answer: follow best practices and test.</p>
<p>Step-By-Step Guide</p>
<ul>
<li><p>Prepare and baseline your WAN links. Document the following for each tunnel and ISP you have coming into the Fortigate.</p>
<ul>
<li><p>Bandwidth</p>
</li>
<li><p>SLA Expectations</p>
</li>
<li><p>Labels (if they're not labelled, LABEL IT)</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/48085f07-9ce0-4043-b2e9-e7ef31a30590.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Correct IP, Gateway, Subnet Mask, and any specific routes</p>
</li>
</ul>
</li>
<li><p>Test each link for ping, jitter, and throughput. You can use iperf for throughput, or <a href="http://speedof.me">speedof.me</a> for internet speed tests.</p>
</li>
<li><p>Create SD-WAN Zones and add members</p>
<ul>
<li><p>Network &gt; SD-WAN &gt; SD-WAN Zones</p>
</li>
<li><p>The biggest gotcha here is if you already have some of these interfaces in use. Follow the instructions here (link TBD) to get around this issue.</p>
</li>
<li><p>Create a zone for internet (I label it WAN, or Internet)</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/a6be7206-6c74-40dd-9ef6-839f692e72c3.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Create a zone for each tunnel group (e.g. Chicago for all tunnels going from this site to the Chicago site)</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/e9e3c08d-eb02-4e42-a42b-dbab4044deaf.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Add each interface to the appropriate member (e.g. Add Comcast Internet ISP Interface to Internet SD-WAN Zone)</p>
</li>
<li><p>Assign the correct bandwidth values (upload and download). If you don't have these numbers, make a note to find them and update this when you get them</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/7441d31c-03ec-43da-87de-543b129bb417.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
</li>
<li><p>Build realistic Performance SLAs</p>
<ul>
<li><p>This part is SUPER important! Building unrealistic SLAs makes SD-WAN effectively useless.</p>
</li>
<li><p>Create SLAs for different traffic types (e.g. General Internet, VoIP, Microsoft SaaS, etc)</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/779801ab-3b15-427a-9fba-d3ea2dd208fb.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Use appropriate probe type (e.g. Ping is good for general internet, HTTP is good for specific software, TCP is good for VoIP or other software that may not host a web server)</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/36137acb-27de-4b9c-8da1-38af567601d4.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Set thresholds based on real measurements. This is important! Your DSL in the middle of Wyoming will not get 5ms latency and SD-WAN should not remove the route when it goes above 10ms.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/a9ad7019-2714-4c3c-ad54-67f942e3c887.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Avoid overly tight latency/jitter values. This will cause flapping, and poor user experience (and lots of tickets).</p>
</li>
</ul>
</li>
<li><p>Assign SLA participants</p>
<ul>
<li><p>For each SLA, select which members should be tested. Keeping this at default means that ALL SD-WAN members will be tested and can affect traffic.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/5d6fb01c-8131-4db1-be9b-580b67c6332f.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Don't probe links that should never carry traffic.</p>
</li>
<li><p>Confirm SLA status shows healthy values and modify performance SLAs as needed.</p>
</li>
<li><p>Come back to these metrics in a week and see if you need to tune any.</p>
</li>
</ul>
</li>
<li><p>Create intent-based SD-WAN rules</p>
<ul>
<li><p>Match traffic by application, ISDB, or subnet</p>
</li>
<li><p>Use strategies aligned with business intent (whatever the users care about)</p>
<ul>
<li><p>Best Quality -&gt; VoIP, Teams, Zoom, etc</p>
</li>
<li><p>Lowest Cost (SLA) -&gt; Bulk Traffic, Backups, or things that don't care as much</p>
</li>
<li><p>Maximize Bandwidth (SLA) -&gt; General internet traffic (including your Pandora stream yes)</p>
</li>
</ul>
</li>
<li><p>Attach the correct SLA to each rule</p>
</li>
<li><p>Order the rules from most specific to least specific</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a396670bcb09fbee7b0b604/91923d81-7827-4c31-92de-aa6bdbfe1dfd.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
</li>
<li><p>Tune failover behavior</p>
<ul>
<li><p>Ensure SLA thresholds reflect real-world internet variance (again... your Wyoming DSL may go up above 50ms...)</p>
</li>
<li><p>Enable route removal when a link is out of SLA. The main gotcha here is that if you didn't set your performance SLAs correctly, or don't have something for it to fail over to... then it'll just fail.</p>
</li>
<li><p>Avoid aggressive failover times that cause oscillation (and angry users)</p>
</li>
<li><p>Test both hard failures (link down) and soft failures (high latency/loss). If you haven't tested... then test!</p>
</li>
</ul>
</li>
<li><p>Integrate security without breaking SD-WAN</p>
<ul>
<li><p>Keep firewall policies focused on security.</p>
</li>
<li><p>Keep SD-WAN rules focused on path selection.</p>
</li>
<li><p>Apply consistent security profiles (don't have one ISP with web filtering and the other have nothing... unless it's a business need!)</p>
</li>
<li><p>Ensure policy order doesn't bypass SD-WAN unintentionally</p>
</li>
</ul>
</li>
<li><p>Validate SD-WAN decisions</p>
<ul>
<li><p>Use the SD-WAN monitor to confirm path selection for all intended traffic</p>
</li>
<li><p>Check SLA logs for stability. This is important as you may have flapping and not notice it!</p>
</li>
<li><p>Run tests! Run them again! Involve users. Your users should have a basic understanding of their business needs, so they should know what works and what doesn't. The best question is "Is this working how you expect and want it to?"</p>
</li>
<li><p>Simulate link degredation then have users test again</p>
</li>
</ul>
</li>
<li><p>Monitor and adjust</p>
<ul>
<li><p>A week later, go and review hit counts on all your rules</p>
</li>
<li><p>Watch SLA trends and see what thresholds you need to adjust</p>
</li>
<li><p>Send logs to FortiAnalyzer (FAZ) or another SIEM for long-term visbility</p>
</li>
</ul>
</li>
<li><p>DOCUMENT IT</p>
<ul>
<li><p>No really. Document it.</p>
</li>
<li><p>If it's not documented then you're not done yet.</p>
</li>
</ul>
</li>
</ul>
<h2><strong>Common Mistakes</strong></h2>
<ul>
<li><p>Using default SLAs without tuning thresholds</p>
</li>
<li><p>Mixing dissimilar links in the same rule without intent.</p>
</li>
<li><p>Not enabling app control/application identification</p>
</li>
<li><p>Over-relying on volume-based load balancing</p>
</li>
<li><p>Not testing soft failures and only testing hard failures (pull the cable)</p>
</li>
</ul>
<h2><strong>Conclusion</strong></h2>
<p>In short: SD‑WAN stability is rarely fixed by magic—it's fixed by measurement, sensible thresholds, and careful tuning. Baseline each WAN, document everything, choose realistic SLA targets, and make your probes and failover logic reflect real user experience (not just idealized pings). When you see route flapping, don’t reflexively replace hardware—tune probe intervals, consecutive-failure thresholds, and target endpoints; label and group interfaces; and validate failover behavior with controlled tests. Finally, treat tuning as an iterative process: start conservative, monitor for a week under normal load, then tighten settings only when metrics show you can. Do this and you’ll turn “mystery disconnects” into predictable, manageable behavior.</p>
<p>Quick checklist to finish the job</p>
<ul>
<li><p>Baseline each link (latency, jitter, packet loss, throughput) and record SLA expectations.</p>
</li>
<li><p>Use reliable, consistent probe targets (ISP or well-distributed public endpoints).</p>
</li>
<li><p>Reduce sensitivity to noise: increase probe interval or consecutive-failure count before marking SLA failed.</p>
</li>
<li><p>Tune thresholds to reflect real user tolerances (allow small jitter/brief loss).</p>
</li>
<li><p>Label interfaces/zones and document routes, weights, and policies.</p>
</li>
<li><p>Test failover in a controlled window and monitor for several days before finalizing settings.</p>
</li>
</ul>
]]></content:encoded></item></channel></rss>