CINXE.COM

Wafris - Open Source Web Framework Firewalls

<!DOCTYPE html> <html lang="en-US" style="scroll-behavior: smooth;"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <link rel="canonical" href="https://wafris.org/" /> <title>Wafris - Open Source Web Framework Firewalls</title> <meta name="description" content=""> <!-- Open Graph / Facebook --> <meta property="og:type" content="website"> <meta property="og:url" content="https://wafris.org/"> <meta property="og:title" content="Wafris - Open Source Web Framework Firewalls"> <meta property="og:description" content=""> <meta property="og:image" content=""> <!-- Twitter --> <meta property="twitter:card" content=""> <meta property="twitter:url" content="https://wafris.org/"> <meta property="twitter:title" content="Wafris - Open Source Web Framework Firewalls"> <meta property="twitter:description" content=""> <meta property="twitter:image" content=""> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet"/> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="Id51ASNprPRLXdQSYQKMAutrZdmUj0yeh3IMqHnQhr2lPZ1qtySUYIQrxa3u0c2dMjFrZrFS2xlCsY0LSSfekA" /> <link rel="stylesheet" href="/assets/tailwind-c89d222e849281ebb1a4e4b78a72128113f5ce4b7a46f58d3e34e1c9fc43b75c.css" data-turbo-track="reload" /> <link rel="stylesheet" href="/assets/inter-font-8c3e82affb176f4bca9616b838d906343d1251adc8408efe02cf2b1e4fcf2bc4.css" data-turbo-track="reload" /> <link rel="stylesheet" href="/assets/application-783f2a0009b90281bac70025d1d2a201122a284a6e13a0dadbe00572b96bbae1.css" data-turbo-track="reload" /> <script type="importmap" data-turbo-track="reload">{ "imports": { "application": "/assets/application-46ca8eeaadc43a6bf145b42ea0902596dcbaac29329aedd9917228466c4e6351.js", "@hotwired/turbo-rails": "/assets/turbo.min-f309baafa3ae5ad6ccee3e7362118b87678d792db8e8ab466c4fa284dd3a4700.js", "@hotwired/stimulus": "/assets/stimulus.min-d03cf1dff41d6c5698ec2c5d6a501615a7a33754dbeef8d1edd31c928d17c652.js", "@hotwired/stimulus-loading": "/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js", "@fortawesome/fontawesome-free": "https://ga.jspm.io/npm:@fortawesome/fontawesome-free@6.4.0/js/all.js", "chart.js": "https://ga.jspm.io/npm:chart.js@4.4.0/dist/chart.js", "@kurkle/color": "https://ga.jspm.io/npm:@kurkle/color@0.3.2/dist/color.esm.js", "controllers/application": "/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js", "controllers/chart_controller": "/assets/controllers/chart_controller-aeaf364df800c5f647291b3b23f7df613add725dcea31fb74e7685f9bac14495.js", "controllers/hello_controller": "/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js", "controllers": "/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js", "controllers/refresh_controller": "/assets/controllers/refresh_controller-b61e43862c205be6f366117e3aa08e073bf717443673217e2226a61ef7ec2192.js" } }</script> <link rel="modulepreload" href="/assets/application-46ca8eeaadc43a6bf145b42ea0902596dcbaac29329aedd9917228466c4e6351.js"> <link rel="modulepreload" href="/assets/turbo.min-f309baafa3ae5ad6ccee3e7362118b87678d792db8e8ab466c4fa284dd3a4700.js"> <link rel="modulepreload" href="/assets/stimulus.min-d03cf1dff41d6c5698ec2c5d6a501615a7a33754dbeef8d1edd31c928d17c652.js"> <link rel="modulepreload" href="/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js"> <script src="/assets/es-module-shims.min-d89e73202ec09dede55fb74115af9c5f9f2bb965433de1c2446e1faa6dac2470.js" async="async" data-turbo-track="reload"></script> <script type="module">import "application"</script> <script src="/highlight.min.js"></script> <script> !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); posthog.init('phc_7aZF5ZAwkGLKEpSk2czZbnhGiuWh4Yo8k3wEssQScPA',{api_host:'https://us.i.posthog.com', person_profiles: 'always', cross_subdomain_cookie: true}) </script> </head> <body class="bg-pearl antialiased"> <header class="w-full text-gray-400 border-b bg-pearl border-cinder"> <div x-data="{ open: false }" class="md:px-6 lg:px-16 xl:justify-between flex flex-col w-full px-4 mx-auto bg-bunker xl:items-center xl:flex-row max-w-7xl" > <div class="flex flex-row items-center justify-between py-2 lg:py-0"> <a href="/" class="text-lg font-semibold rounded-lg focus:outline-none focus:shadow-outline" > <img style="height: 40px; margin-top: 16px; margin-bottom: 10px;" src="/assets/wafris-logo-cc3419a6a560c96d777d2b67f6c96ef4e626079bc66b5856969e7afeefda9263.svg" /> </a> <button class="xl:hidden focus:outline-none" @click="open = !open" aria-label="hidden" > <svg fill="#ffffff" viewBox="0 0 20 20" class="w-9 h-9"> <path x-show="!open" fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM9 15a1 1 0 011-1h6a1 1 0 110 2h-6a1 1 0 01-1-1z" clip-rule="evenodd" ></path> <path x-show="open" fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd" style="display: none" ></path> </svg> </button> </div> <nav :class="{'flex': open, 'hidden': !open}" class="flex-col items-center flex-grow px-5 md:pb-0 md:justify-end xl:flex-row hidden xl:flex" > <a title="Wafris Home" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/" > Home</a > <a title="Wafris Pricing" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/pricing" >Pricing </a> <a title="Guides" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/guides" >Guides </a> <a title="Blog" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/blog" >Blog </a> <a title="Docs" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/docs" >Docs </a> <a title="IP Lookup" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/ip-lookup" >IP Lookup </a> <a title="About Wafris" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/about" >About </a> <a title="Contact Us" class="px-4 py-2 xl:mt-2 text-base transition duration-500 ease-in-out transform bg-transparent rounded-lg text-magnesium lg:text-base mt-0 hover:text-white focus:text-white hover:bg-pearl focus:outline-none focus:shadow-outline focus:ring-2 ring-offset-current ring-offset-2" href="/contact" >Contact</a > <a class="px-4 xl:py-2 xl:mt-2 xl:mx-4 py-1 text-base transition duration-500 ease-in-out transform border-2 border-white rounded-xl text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-white hover:bg-white hover:text-majorelly" href="https://hub.wafris.org">Log In</a> <!-- > --> </nav> </div> </header> <div class="relative isolate overflow-hidden"> <!-- Background SVG --> <div class="absolute left-[calc(50%-4rem)] top-10 -z-10 transform-gpu blur-3xl sm:left-[calc(50%-18rem)] lg:left-48 lg:top-[calc(50%-30rem)] xl:left-[calc(50%-24rem)]" aria-hidden="true"> <div class="aspect-[1108/632] w-[69.25rem] bg-gradient-to-r from-[#80caff] to-[#4f46e5] opacity-20" style="clip-path: polygon(73.6% 51.7%, 91.7% 11.8%, 100% 46.4%, 97.4% 82.2%, 92.5% 84.9%, 75.7% 64%, 55.3% 47.5%, 46.5% 49.4%, 45% 62.9%, 50.3% 87.2%, 21.3% 64.1%, 0.1% 100%, 5.4% 51.1%, 21.4% 63.9%, 58.9% 0.2%, 73.6% 51.7%)"></div> </div> <div class="mx-auto max-w-7xl px-6 pb-24 pt-10 sm:pb-32 lg:flex lg:px-8 lg:py-40"> <div class="mx-auto max-w-2xl flex-shrink-0 lg:mx-0 lg:max-w-xl lg:pt-8"> <h1 class="mt-10 text-4xl font-extrabold tracking-tight text-white leading-none sm:text-6xl">Stop attacks, intrusions and dark traffic from within your web stack. </h1> <p class="mt-6 text-lg leading-8 text-gray-100">Wafris is a free and open source Web Application Firewall that identifies threats and stops attacks from within your favorite Web Framework, HTTP Server or Kubernetes Ingress Controller.</p> <div class="mt-10 flex items-center gap-x-6"> <a href="https://hub.wafris.org/users/sign_up" class="rounded-md bg-majorelly px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-400 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-400">Sign up for free</a> <a href="/demo" class="text-sm font-semibold leading-6 text-white">1 Minute Demo <span aria-hidden="true">→</span></a> </div> </div> <div class="mx-auto mt-16 flex max-w-2xl sm:mt-24 lg:ml-10 lg:mr-0 lg:mt-0 lg:max-w-none lg:flex-none xl:ml-32"> <div class="max-w-3xl flex-none sm:max-w-5xl lg:max-w-none"> <a href="/demo"> <img class="w-[76rem] rounded-md mt-20" src="/assets/home-dash-one-ab66d73b6210d9a5db74a8433b974f09116e76fc44c1ffa72f517e967eb31190.png" /> </a> </div> </div> </div> </div> <div class="flex flex-wrap justify-center"> <img class="mx-4 my-2 opacity-50 h-10" src="/assets/framework-logos/heroku-transparent-9d823844475ef65b4db45c3f1f3ff95627b468b23c07382db276d79a89fb30f7.png" /> <img class="mx-4 my-2 opacity-50 h-12" src="/assets/framework-logos/aws-transparent-fcd8d73a42432c7f9e897af1af451465a09f1322ffcefca65392925eeb21dd6d.png" /> <img class="mx-4 my-2 opacity-50 h-10" src="/assets/framework-logos/fly-transparent-a063d0247421d8b2d48a88e668d3576ed70b86abbb090f8f58615002666ed660.png" /> <img class="mx-4 my-2 opacity-50 h-10" src="/assets/framework-logos/digitalocean-transparent-4a638596a32ae39b3e7f5df581981dfe35fee616ceff31a17c3db355f4eb50ff.png" /> <img class="mx-4 my-2 opacity-50 h-10" src="/assets/framework-logos/salesforce-transparent-4237a078caa26e92a6cc5354987378dbbb6db4ab3a7a0250a602eb8de2339d39.png" /> <img class="mx-4 my-2 opacity-50 h-10" src="/assets/framework-logos/google-transparent-5857a021eb5f398bb1b24014192c419f4ca2a8bdbd375037faa4455bfc407b6b.png" /> </div> <section class="relative w-full"> <div class="relative items-center w-full px-5 py-12 mx-auto lg:py-32 md:px-12 lg:px-16 max-w-7xl" > <div class="flex w-full mx-auto text-left"> <div class="relative inline-flex items-center m-auto align-middle"> <div class="max-w-3xl space-y-8 lg:text-center"> <h2 class="mb-4 text-2xl font-extrabold leading-tight lg:text-5xl text-center tracking-tight text-white"> What's Wafris do for you? </h2> <p class="mb-6 text-xl text-santa"> The modern internet is full of threats. Wafris defends<br/> against attacks and bots abusing your site. </p> </div> </div> </div> <div class="py-6 lg:py-12"> <div class="max-w-xl mx-auto lg:max-w-7xl"> <dl class="grid grid-cols-2 gap-4 lg:grid-cols-3"> <div class="h-full p-6 bg-cinder lg:p-12 shadow-thick rounded-2xl"> <dt class="space-y-8"> <div class="flex items-center text-moody"> <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true" > <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" /> </svg> <p class="ml-2 text-xl text-white lg:text-2xl">Attack Protection</p> </div> </dt> <dd class="mt-2 text-lg text-santa"> <span> Leverage Wafris rulesets to block attacks like SQL injection, XSS, and more. </span> </dd> </div> <div class="h-full p-6 bg-cinder lg:p-12 shadow-thick rounded-2xl"> <dt class="space-y-8"> <div class="flex items-center text-moody"> <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true" > <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" /> </svg> <p class="ml-2 text-xl text-white lg:text-2xl">Request Visualization</p> </div> </dt> <dd class="mt-2 text-lg text-santa"> <span> You can't block what you can't find. Wafris gives you a real-time view into the requests hitting your app so bad behaviors jump out. </span> </dd> </div> <div class="h-full p-6 bg-cinder lg:p-12 shadow-thick rounded-2xl"> <dt class="space-y-8"> <div class="flex items-center text-moody"> <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true" > <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" /> </svg> <p class="ml-2 text-xl text-white lg:text-2xl">Blocking Rules</p> </div> </dt> <dd class="mt-2 text-lg text-santa"> <span> Set custom blocking rules on IP addresses, user agents, paths and more. </span> </dd> </div> <div class="h-full p-6 bg-cinder lg:p-12 shadow-thick rounded-2xl"> <dt class="space-y-8"> <div class="flex items-center text-moody"> <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true" > <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" /> </svg> <p class="ml-2 text-xl text-white lg:text-2xl">Rate Limiting</p> </div> </dt> <dd class="mt-2 text-lg text-santa"> <span> Rate limiting is a big roadblock for attackers. Set and tweak rate limits allow users and block attackers. </span> </dd> </div> <div class="h-full p-6 bg-cinder lg:p-12 shadow-thick rounded-2xl"> <dt class="space-y-8"> <div class="flex items-center text-moody"> <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true" > <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" /> </svg> <p class="ml-2 text-xl text-white lg:text-2xl">Insights</p> </div> </dt> <dd class="mt-2 text-lg text-santa"> <span> We grade every IP's risk level and provide a grade based on past behavior. </span> </dd> </div> <div class="h-full p-6 bg-cinder lg:p-12 shadow-thick rounded-2xl"> <dt class="space-y-8"> <div class="flex items-center text-moody"> <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true" > <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" /> </svg> <p class="ml-2 text-xl text-white lg:text-2xl">Escalation</p> </div> </dt> <dd class="mt-2 text-lg text-santa"> <span> Every day we help sites defend against attacks. Get expert operational security help when you need it. </span> </dd> </div> </dl> </div> </div> </div> </section> <section class="mt-2"> <div class="max-w-screen-xl px-4 mx-auto text-center "> <figure class="max-w-screen-md mx-auto"> <blockquote> <p class="text-3xl text-smoke font-bold opacity-90"> &ldquo;Our site was getting killed by bots and spiders, driving up loadtimes and burning requests. Wafris helped us identify and stop them cold.&rdquo; </p> </blockquote> <figcaption class="flex items-center justify-center mt-6 space-x-3"> <img class="w-10 h-10 rounded-full" src="/assets/johna-9008997929fce1d63f60a2d4c6813840e7f0e1e8d94a7804b5864165d2d08a26.png" /> <div class="flex items-center divide-x-2 divide-gray-500 dark:divide-gray-700"> <div class="pr-3 font-medium text-gray-900 dark:text-white">John Athayde</div> <div class="pl-3 text-sm text-gray-500 dark:text-gray-400">Founder Meticulous</div> </div> </figcaption> </figure> </div> </section> <div class="relative items-center w-full px-5 py-12 mx-auto md:px-12 lg:px-16 max-w-7xl" > <div class="flex w-full mx-auto text-left py-24"> <div class="relative inline-flex items-center m-auto align-middle"> <div class="max-w-3xl space-y-8 lg:text-center"> <h2 class="text-2xl font-extrabold leading-tight text-white lg:text-5xl text-center tracking-tight"> Declaration of Security </h2> <p class="text-xl text-santa"> </p> <p class="mb-4 text-lg text-smoke text-left"> Something has gone wrong with our Internet. It shouldn't be the case that it's easier to attack a site than to defend it. It shouldn't be the case that the default state of a web application is to be vulnerable to attacks. It shouldn't be so easy to find an IP address in your logs doing clearly bad things and so hard to do something about it. </p> <p class="mb-4 text-lg text-smoke text-left"> We believe that every site should ship with the ability to: </p> <ul class="text-left list-disc mx-10"> <li class="mb-6 text-lg text-smoke">Block basic request properties like IP addresses, user agents and malicious paths.</li> <li class="mb-6 text-lg text-smoke">Rate Limit Traffic overall traffic</li> <li class="mb-6 text-lg text-smoke">View a list of the IPs that have made requests in the last 24 hours </li> </ul> <p class="mb-6 text-lg text-smoke text-left">Attacks hit every web app by default. Why isn't there a default set of defenses?</p> <p class="mb-6 text-lg text-smoke text-left">Wafris adds practical, immediately useful, easily configured security features to your web application.</p> </div> </div> </div> <div class=""> <div class="py-12 lg:mx-auto lg:max-w-7xl lg:px-16 lg:py-32"> <div class="lg:grid lg:grid-cols-3 lg:grid-flow-col-dense lg:gap-12"> <div class="mt-12 rounded-xl sm:mt-16 lg:mt-0 lg:col-span-2"> <div class="pr-2 -ml-48 sm:pr-6 md:-ml-16 lg:px-0 lg:m-0 lg:relative lg:h-full" > <img class="w-full lg:absolute lg:right-0 lg:w-auto lg:max-w-none" src="/assets/how-it-works-4e69f682ce311b6d88cce3d0e0236cd32d811b83152e4c0fd3a6d691de435095.png" /> </div> </div> <div class="max-w-xl px-5 mx-auto sm:px-6 lg:max-w-lg lg:mx-0 lg:px-0" > <h1 class="max-w-4xl mt-2 text-5xl font-bold leading-none tracking-tighter text-white lg:text-5xl lg:max-w-xl" > How it works </h1> <p data-animate="subtitle" class="text-lg mt-8 text-left text-smoke" > Wafris installs as a middleware in your web framework, HTTP server or Kubernetes ingress controller that analyzes every request and blocks attacks. </p> <p class="text-lg mt-8 text-left text-smoke"> Connected to your Redis instance, rules are executed with blazing speed, keeping your site fast and secure. </p> </div> </div> </div> </div> <h2 class="my-2 text-xl font-extrabold tracking-tight text-white">Web Frameworks</h2> <ul role="list" class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mb-8"> <a href="/firewalls/django"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/django-logo-8efcd6e670fab494390370556c544407abd32292df912568d7b8e2c20a93d593.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Django</h3> </div> <p class="mt-1 text-base text-santa">High-level Python Web framework</p> </div> </div> </li> </a> <a href="/firewalls/laravel"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/laravel-logo-d5b1baec6928c9f71e30603a4f4aea73f1d69e80b821571b2d33b8963e205dd9.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Laravel</h3> </div> <p class="mt-1 text-base text-santa">Elegant PHP Web framework</p> </div> </div> </li> </a> <a href="/firewalls/nodejs"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/nodejs-logo-468fb2867c02844fbd9383f06ac64659ce1517fe42de04687efef69e46e6e07a.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">NodeJS</h3> </div> <p class="mt-1 text-base text-santa">JavaScript runtime built on Chrome</p> </div> </div> </li> </a> <a href="/firewalls/rails"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/rails-logo-c6bcb50b35bd2ee8ecea638d381af631a49c82e95a305cc558e17a83d15fd123.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Rails</h3> </div> <p class="mt-1 text-base text-santa">Ruby framework for web development</p> </div> </div> </li> </a> <a href="/firewalls/blazor"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/blazor-logo-4d11484640c77d4a244d33a247a09b100acbd7a30a2e6153f81c4b7fcee88223.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Blazor</h3> </div> <p class="mt-1 text-base text-santa">Web framework in .NET</p> </div> </div> </li> </a> <a href="/firewalls/kamal"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/kamal-logo-f44b81e90f62c3c80615a75b715227dd218fd25408d1333842ab0aa6c178ed56.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Kamal</h3> </div> <p class="mt-1 text-base text-santa">Cross cloud deployment</p> </div> </div> </li> </a> </ul> <h2 class="my-2 text-xl font-extrabold tracking-tight text-white">HTTP Servers</h2> <ul role="list" class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mb-8"> <a href="/firewalls/caddy"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/caddy-logo-ec60df73ee4278fd04cdc8b0acab341deeb23f7a3510363999580e20570b5980.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Caddy</h3> </div> <p class="mt-1 text-base text-santa">Open source web server</p> </div> </div> </li> </a> <a href="/firewalls/nginx"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/nginx-logo-dd3927d5eb272f9261e3b6cf51243ab41d7a33a702848c63c022c7b58374ae9a.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Nginx</h3> </div> <p class="mt-1 text-base text-santa">Web server and reverse proxy</p> </div> </div> </li> </a> <a href="/firewalls/apache"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/apache-logo-f559f4999241c72519c5320a9882eeb02be838a198a2c6da0cb6b69205148ff6.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Apache</h3> </div> <p class="mt-1 text-base text-santa">Most used web server software</p> </div> </div> </li> </a> </ul> <h2 class="my-2 text-xl font-extrabold tracking-tight text-white">Ingress Controllers</h2> <ul role="list" class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 mb-8"> <a href="/firewalls/traefik"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/traefik-logo-864ccd2d17294d2b4ea43dd657bbb1de10f870f00d4fb4dd3f4cc323c976d603.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Traefik</h3> </div> <p class="mt-1 text-base text-santa">Modern HTTP reverse proxy</p> </div> </div> </li> </a> <a href="/firewalls/haproxy"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/haproxy-logo-8c802e75228e5eaebc93fcf2e8ccd41db9917a464edba7095fc71d1a4de1fe16.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">HA Proxy</h3> </div> <p class="mt-1 text-base text-santa">Reliable, high performance TCP/HTTP</p> </div> </div> </li> </a> <a href="/firewalls/kong"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/kong-logo-9c98d54daa388f1b5608e8ab2001b39b91dcffa7244f66fb68e40cc636cf4e6a.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Kong</h3> </div> <p class="mt-1 text-base text-santa">Cloud-native API gateway</p> </div> </div> </li> </a> <a href="/firewalls/envoy"> <li class="col-span-1 divide-y rounded-lg bg-haiti hover:bg-tuna h-40 items-start"> <div class="flex w-full items-center justify-between space-x-6 p-6 rounded-lg"> <img class="h-16 w-16 flex-shrink-0" src="/assets/envoy-logo-9bd6d49293c0d7f5a36523cb89b663094f6ff5d1552901f159db0224918b2ddf.png" /> <div class="flex-1"> <div class="flex items-center space-x-3"> <h3 class=" text-lg font-bold text-smoke">Envoy</h3> </div> <p class="mt-1 text-base text-santa">High performance, open source proxy</p> </div> </div> </li> </a> </ul> <div class="py-12 sm:py-32"> <div class="mx-auto max-w-7xl px-6 lg:px-8"> <div class="mx-auto max-w-2xl lg:mx-0"> <h2 class="text-lg font-semibold leading-7 text-indigo-400">Strong & Secure</h2> <p class="mt-2 text-3xl font-bold tracking-tight text-white sm:text-4xl">What makes Wafris better?</p> <p class="mt-6 text-lg leading-8 text-gray-300">We've built Wafris from the ground up to directly address the shortcomings that we found in both legacy DNS based WAF providers and in other solutions that only partially addressed the true operational security concerns that you're forced to care about because the Internet is full of jerks. </p> </div> <dl class="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 text-lg leading-7 text-gray-300 sm:grid-cols-2 lg:mx-0 lg:max-w-none lg:gap-x-16"> <div class="relative pl-9"> <dt class="inline font-semibold text-white"> <svg class="absolute left-1 top-1 h-5 w-5 text-indigo-500" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M10 1a4.5 4.5 0 00-4.5 4.5V9H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-.5V5.5A4.5 4.5 0 0010 1zm3 8V5.5a3 3 0 10-6 0V9h6z" clip-rule="evenodd" /> </svg> Multi Host Support </dt> <dd class="">If you have a SaaS that's issued clients' vanity domains pointing to your service (or a large number of wildcard subdomains) it's not feasible to change them. But, with Wafris there's no need to, multiple hosts are secured by default. </dd> </div> <div class="relative pl-9"> <dt class="inline font-semibold text-white"> <svg class="absolute left-1 top-1 h-5 w-5 text-indigo-500" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M5.5 17a4.5 4.5 0 01-1.44-8.765 4.5 4.5 0 018.302-3.046 3.5 3.5 0 014.504 4.272A4 4 0 0115 17H5.5zm3.75-2.75a.75.75 0 001.5 0V9.66l1.95 2.1a.75.75 0 101.1-1.02l-3.25-3.5a.75.75 0 00-1.1 0l-3.25 3.5a.75.75 0 101.1 1.02l1.95-2.1v4.59z" clip-rule="evenodd" /> </svg> Faster through physics </dt> <dd class="">DNS based solutions by design put requests to your app through more network hops. They're inevitably slower than a Redis datastore sitting next to your app.</dd> </div> <div class="relative pl-9"> <dt class="inline font-semibold text-white"> <svg class="absolute left-1 top-1 h-5 w-5 text-indigo-500" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M15.312 11.424a5.5 5.5 0 01-9.201 2.466l-.312-.311h2.433a.75.75 0 000-1.5H3.989a.75.75 0 00-.75.75v4.242a.75.75 0 001.5 0v-2.43l.31.31a7 7 0 0011.712-3.138.75.75 0 00-1.449-.39zm1.23-3.723a.75.75 0 00.219-.53V2.929a.75.75 0 00-1.5 0V5.36l-.31-.31A7 7 0 003.239 8.188a.75.75 0 101.448.389A5.5 5.5 0 0113.89 6.11l.311.31h-2.432a.75.75 0 000 1.5h4.243a.75.75 0 00.53-.219z" clip-rule="evenodd" /> </svg> No DNS configuration </dt> <dd class="">DNS changes often cause downtime and making modifications can be a challenge. In many cases, it's just not feasible to get clients or other groups to make DNS updates for you. Since Wafris works with inside your existing stack, there's no DNS updates needed. </dd> </div> <div class="relative pl-9"> <dt class="inline font-semibold text-white"> <svg class="absolute left-1 top-1 h-5 w-5 text-indigo-500" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M10 2.5c-1.31 0-2.526.386-3.546 1.051a.75.75 0 01-.82-1.256A8 8 0 0118 9a22.47 22.47 0 01-1.228 7.351.75.75 0 11-1.417-.49A20.97 20.97 0 0016.5 9 6.5 6.5 0 0010 2.5zM4.333 4.416a.75.75 0 01.218 1.038A6.466 6.466 0 003.5 9a7.966 7.966 0 01-1.293 4.362.75.75 0 01-1.257-.819A6.466 6.466 0 002 9c0-1.61.476-3.11 1.295-4.365a.75.75 0 011.038-.219zM10 6.12a3 3 0 00-3.001 3.041 11.455 11.455 0 01-2.697 7.24.75.75 0 01-1.148-.965A9.957 9.957 0 005.5 9c0-.028.002-.055.004-.082a4.5 4.5 0 018.996.084V9.15l-.005.297a.75.75 0 11-1.5-.034c.003-.11.004-.219.005-.328a3 3 0 00-3-2.965zm0 2.13a.75.75 0 01.75.75c0 3.51-1.187 6.745-3.181 9.323a.75.75 0 11-1.186-.918A13.687 13.687 0 009.25 9a.75.75 0 01.75-.75zm3.529 3.698a.75.75 0 01.584.885 18.883 18.883 0 01-2.257 5.84.75.75 0 11-1.29-.764 17.386 17.386 0 002.078-5.377.75.75 0 01.885-.584z" clip-rule="evenodd" /> </svg> Integrated investigation and blocking </dt> <dd class=""> You can't block what you can't find. Wafris gives you a real-time view into the requests hitting your app. You don't have to grep through logs or write custom Elastic queries to find bad behavior. </dd> </div> </dl> </div> </div> <div class=""> <div class="px-6 py-24 sm:px-6 sm:py-32 lg:px-8"> <div class="mx-auto max-w-2xl text-center"> <div class="mx-auto text-center" style="display: flex; justify-content: center;"><img style="height: 40px; margin-top: 16px; margin-bottom: 10px;" src="/assets/wafris-logo-cc3419a6a560c96d777d2b67f6c96ef4e626079bc66b5856969e7afeefda9263.svg" /> </div> <h2 class="text-5xl font-extrabold tracking-tight leading-tight text-white">Secure your site today.<br/></h2> <p class="mx-auto mt-6 max-w-xl text-lg leading-8 text-gray-300">Wafris lets you see what's really happening in your web app, take actions to protect it and get help when you need it.</p> <div class="mt-10 flex items-center justify-center gap-x-6"> <a href="https://hub.wafris.org/users/sign_up" class="rounded-md bg-majorelly px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-400 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-400">Sign up for free</a> <a href="https://app.harmonizely.com/expedited/wafris" class="text-sm font-semibold leading-6 text-white">Book a demo to learn more <span aria-hidden="true">→</span></a> </div> </div> </div> </div> <!-- Security Resources --> <!-- Each article is a grid item and should take up the full height of the grid row it's in --> <div class="py-24 sm:py-32"> <div class="mx-auto max-w-7xl px-6 lg:px-8"> <div class="mx-auto max-w-2xl text-center"> <h2 class="text-3xl font-bold tracking-tight text-white sm:text-4xl">Security Resources</h2> <p class="mt-2 text-lg leading-8 text-smoke">Tools, guides and articles to help you improve your web application security.</p> </div> <div class="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-x-8 gap-y-20 lg:mx-0 lg:max-w-none lg:grid-cols-3"> <article class="flex flex-col items-start justify-between"> <div class="relative w-full"> <a href="/ip-lookup"> <img class="aspect-[16/9] w-full rounded object-cover sm:aspect-[2/1] lg:aspect-[3/2]" src="/assets/ip-lookup-card-image-0e6bf0e7244e8410daec43b1335985cb52e4775e0e2336af84fe386a182a940a.png" /> <div class="absolute inset-0 rounded-xl ring-1 ring-inset ring-gray-900/10"></div> </a> </div> <div class="max-w-xl"> <div class="mt-8 flex items-center gap-x-4 text-xs"> <time datetime="2025-04-10" class="text-smoke">Apr 10, 2025</time> <a href="/ip-lookup" class="relative z-10 rounded-full bg-gray-500 px-3 py-1.5 font-medium text-white hover:bg-gray-100 hover:text-gray-500">Tools</a> </div> <div class="group relative"> <h3 class="mt-3 text-lg font-bold leading-6 text-white group-hover:text-gray-600"> <a href="/ip-lookup"> <span class="absolute inset-0"></span> IP Lookup </a> </h3> <p class="mt-5 line-clamp-3 text-base leading-6 text-white">Investigate IP addresses for malicious activity. Identify Botnets, Proxies, Tor, Hosting Providers, and more.</p> </div> <div class="relative mt-8 flex items-center gap-x-4"> <div class="text-sm leading-6 mx-auto"> <div class="font-semibold text-gray-900 mx-auto flex justify-center"> <a href="/ip-lookup"> <div class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-gray-500 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">Try It Now</div> </a> </div> </div> </div> </div> </article> <article class="flex flex-col items-start justify-between"> <div class="relative w-full"> <a href="/guides/our-experience-migrating-to-jumpstart-pro"> <img class="aspect-[16/9] w-full rounded object-cover sm:aspect-[2/1] lg:aspect-[3/2]" src="https://cdn.buttercms.com/moKQENSwQIuvGiIlp87O" /> <div class="absolute inset-0 rounded-xl ring-1 ring-inset ring-gray-900/10"></div> </a> </div> <div class="max-w-xl"> <div class="mt-8 flex items-center gap-x-4 text-xs"> <time datetime="2024-03-26" class="text-smoke">Mar 26, 2024</time> <a href="/guides" class="relative z-10 rounded-full bg-gray-500 px-3 py-1.5 font-medium text-white hover:bg-gray-100 hover:text-gray-500">Guides</a> </div> <div class="group relative"> <h3 class="mt-3 text-lg font-bold leading-6 text-white group-hover:text-gray-600"> <a href="/guides/our-experience-migrating-to-jumpstart-pro"> <span class="absolute inset-0"></span> Our Experience Migrating to Jumpstart Pro </a> </h3> <p class="mt-5 line-clamp-3 text-base leading-6 text-white">We migrated to Jumpstart Pro to provide a lot of the core SAAS features for Wafris. This guide walks you through our migration and some of the pitfalls we encountered along the way.</p> </div> <div class="relative mt-8 flex items-center gap-x-4"> <div class="text-sm leading-6 mx-auto"> <div class="font-semibold text-gray-900 mx-auto flex justify-center"> <a href="/guides"> <div class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-gray-500 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">All Guides</div> </a> </div> </div> </div> </div> </article> <article class="flex flex-col items-start justify-between"> <div class="relative w-full"> <a href="/blog/rearchitecting-for-sqlite"> <img class="aspect-[16/9] w-full rounded object-cover sm:aspect-[2/1] lg:aspect-[3/2]" src="https://cdn.buttercms.com/j02RO9ZQQSoxCrUSMX5k" /> <div class="absolute inset-0 rounded-xl ring-1 ring-inset ring-gray-900/10"></div> </a> </div> <div class="max-w-xl"> <div class="mt-8 flex items-center gap-x-4 text-xs"> <time datetime="2024-09-23" class="text-smoke">Sep 23, 2024</time> <a href="/blog" class="relative z-10 rounded-full bg-gray-500 px-3 py-1.5 font-medium text-white hover:bg-gray-100 hover:text-gray-500">Updates</a> </div> <div class="group relative"> <h3 class="mt-3 text-lg font-bold leading-6 text-white group-hover:text-gray-600"> <a href="/blog/rearchitecting-for-sqlite"> <span class="absolute inset-0"></span> Rearchitecting: Redis to SQLite </a> </h3> <p class="mt-5 line-clamp-3 text-base leading-6 text-white">Learn how we approached migrating our Wafris v1 client based on Redis to a new faster, easier to use SQLite architecture.</p> </div> <div class="relative mt-8 flex items-center gap-x-4"> <div class="text-sm leading-6 mx-auto"> <div class="font-semibold text-gray-900 mx-auto flex justify-center"> <a href="/blog"> <div class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-gray-500 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">All Blogs</div> </a> </div> </div> </div> </div> </article> </div> </div> </div> <footer class="border-t border-tuna bg-cinder" aria-labelledby="footer-heading"> <h2 id="footer-heading" class="sr-only">Footer</h2> <div class="px-4 py-12 mx-auto max-w-7xl sm:px-6 lg:px-12 lg:py-24"> <div class="xl:grid xl:grid-cols-6 xl:gap-8"> <!-- Logo and Tagline --> <div class="text-white xl:col-span-2"> <img style="height: 40px" class="ml-12 mb-2" src="/assets/wafris-logo-cc3419a6a560c96d777d2b67f6c96ef4e626079bc66b5856969e7afeefda9263.svg" /> <p class="w-1/2 mx-auto ml-12 text-sm text-santa"> Open source web framework firewalls </p> </div> <!-- Tools --> <div class="mt-12 md:mt-0"> <h3 class="text-sm font-bold tracking-wider text-white uppercase"> Tools </h3> <ul role="list" class="mt-4 space-y-4"> <li> <a href="/ip-lookup" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > IP Lookup </a> </li> </ul> </div> <!-- Site --> <div class="mt-12 md:mt-0"> <h3 class="text-sm font-bold tracking-wider text-white uppercase"> Site </h3> <ul role="list" class="mt-4 space-y-4"> <li> <a href="/" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Home </a> </li> <li> <a href="/pricing" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Pricing </a> </li> <li> <a href="/about" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > About </a> </li> <li> <a href="/contact" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Contact </a> </li> </ul> </div> <!-- Site --> <div class="mt-12 md:mt-0"> <h3 class="text-sm font-bold tracking-wider text-white uppercase"> Resources </h3> <ul role="list" class="mt-4 space-y-4"> <li> <a href="/guides" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Guides </a> </li> <li> <a href="/blog" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Blog </a> </li> <li> <a href="/docs" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Docs </a> </li> </ul> </div> <!-- Trust Center --> <div class="mt-12 md:mt-0"> <h3 class="text-sm font-bold tracking-wider text-white uppercase"> Trust Center </h3> <ul role="list" class="mt-4 space-y-4"> <li> <a href="/terms-of-service" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Terms of Service </a> </li> <li> <a href="/privacy-policy" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Privacy Policy </a> </li> <li> <a href="/security" class="text-base font-light hoiver:text-santa text-santa hover:text-white" > Security </a> </li> </ul> </div> </div> </div> </footer> <footer class="border-t border-tuna bg-cinder"> <div class="px-5 py-12 mx-auto max-w-7xl sm:px-6 md:flex md:items-center md:justify-between lg:px-20" > <div class="flex justify-center mb-8 space-x-6 md:order-last md:mb-0"> <a href="https://twitter.com/wafrisorg" class="text-santa hover:text-white"> <span class="sr-only">Twitter</span> <svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" > <path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" /> </svg> </a> <a href="https://github.com/wafris" class="text-santa hover:text-white"> <span class="sr-only">GitHub</span> <svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true" > <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" /> </svg> </a> </div> <div class="mt-8 md:mt-0 md:order-1"> <p class="text-sm text-center text-santa"> © Wafris All rights reserved. </p> </div> </div> </footer> <script defer data-domain="wafris.org" src="https://plausible.io/js/script.js"></script> <script src="https://app.bentonow.com/9343147177d53ba00439193ddbf42ee4.js" defer async></script> <script> window.addEventListener("bento:ready", function () { if (typeof(bento$) != 'undefined') { bento$(function() { bento.trackSubdomains(['hub.wafris.org']); bento.view(); }); } }) </script> <script> !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug getPageViewId".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); posthog.init('phc_28ySp3yz9XsWMJEmnT2ar0FdaDx5M3UDrf7XP90rZdW', { api_host:'https://us.i.posthog.com', person_profiles: 'always' // or 'always' to create profiles for anonymous users as well }) </script> <script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script> <script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.4.0/dist/confetti.browser.min.js"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10