diff --git a/_config.yml b/_config.yml index 6151b53..58c48bd 100644 --- a/_config.yml +++ b/_config.yml @@ -33,3 +33,5 @@ source: source collections: projects: output: true + guides: + output: true diff --git a/source/_data/navigation.yml b/source/_data/navigation.yml index 0c92da3..b6e45d8 100644 --- a/source/_data/navigation.yml +++ b/source/_data/navigation.yml @@ -7,5 +7,9 @@ header: link: /about - name: Projects link: /projects + directory: true + - name: Guides + link: /guides + directory: true - name: Contact link: /contact \ No newline at end of file diff --git a/source/_data/social-media.yml b/source/_data/social-media.yml index 592448a..698e7e2 100644 --- a/source/_data/social-media.yml +++ b/source/_data/social-media.yml @@ -17,10 +17,9 @@ links: style: fa-classes: [ fa-brands, fa-linkedin ] color-primary: 0077B5 - - name: LeetCode - url: https://leetcode.com/owenryan/ + # No clue what to put here to I'm linking to my doom page lmao + - name: DOOM + url: https://owenryan.us/doom style: - # Leetcode's logo is not in fontawesome so just using this generic one - fa-classes: [ fa-solid, fa-laptop-code ] - # Leetcode does not have a press kit, and does not publish their brand colors. Hopefully this is close enough. - color-primary: FFA116 + fa-classes: [ fa-solid, fa-spaghetti-monster-flying ] + color-primary: A72626 diff --git a/source/_guides/pfsense.md b/source/_guides/pfsense.md new file mode 100644 index 0000000..895f516 --- /dev/null +++ b/source/_guides/pfsense.md @@ -0,0 +1,306 @@ +--- +layout: guide +title: "pfSense Guide" +description: How to convert an old desktop PC into a router/firewall combo +carousels: + installing: + title: Navigating the Install Wizard + steps: + - text: Wait for the installer to boot + image: /assets/images/guides/pfsense/setup-boot.png + - text: Accept the copyright agreement + image: /assets/images/guides/pfsense/setup-copyright.png + - text: Select `Install` on the welcome screen + image: /assets/images/guides/pfsense/setup-welcome.png + - text: For partitioning, select `Auto (ZFS)` + image: /assets/images/guides/pfsense/setup-partitioning.png + - text: Wait for the installer to probe for devices + image: /assets/images/guides/pfsense/setup-probe.png + - text: On the ZFS Configuration menu, select `Pool Type/Disks` and press enter + image: /assets/images/guides/pfsense/setup-zfs-menu-pool.png + - text: When asked for device type, choose `Striped`. Then press enter + image: /assets/images/guides/pfsense/setup-zfs-type.png + - text: Select your hard drive and press space to add it to the pool, then press enter + image: /assets/images/guides/pfsense/setup-zfs-drives.png + - text: You should now be back on the main ZFS configuration window. Select `Install` and press enter + image: /assets/images/guides/pfsense/setup-zfs-menu-install.png + - text: Confirm you would like to wipe the drive + image: /assets/images/guides/pfsense/setup-confirm.png + - text: Wait for it to install the Operating System + image: /assets/images/guides/pfsense/setup-installing.png + - text: When the installation completes, select `Restart` + image: /assets/images/guides/pfsense/setup-complete.png + - text: After the screen goes black, remove your USB drive + image: /assets/images/guides/pfsense/black.png +--- + +**NOTE: This article is still under development. Some sections are incomplete or need clarification** + +# Goals / Who this is for + +This guide is targeted at people who already understand the basics of computer networking (IP Addresses, DHCP, etc.), +and want to dive further down the discovery rabbithole, while also building a functioning firewall that can be +configured to help network security. + +**Note:** pfSense requires a bit of time messing around in the web UI until you get the hang of it, so get ready to +spend +some time to get acquainted to the interface. + +# Hardware + +Pretty much any old desktop computer from the last ~15 years should be more than enough as long as it has: + +- An x86-64 CPU (As long it's a consumer PC or server made in the last 15 years it should be fine) +- Two RJ45 Ethernet ports + - Most computers only have one, but one can be added through USB or PCIe + - I would recommend the [TP-Link TG-3468](https://www.tp-link.com/us/home-networking/pci-adapter/tg-3468/) as a + budget-friendly PCIe expansion card. +- At least 2GB of System Memory (RAM) + - pfSense requires 1GB, but more is needed when there are many connected devices. +- A USB drive to hold the installer (Must have > 1GB capacity) + +pfSense is based on the FreeBSD operating system. A full list of supported hardware can be found +[on the FreeBSD website](https://www.freebsd.org/releases/13.0R/hardware/). + +# Example network topology + +In this guide, we will assume that this firewall is between your ISP-provided modem and your wireless router. If your +ISP only provided a modem/router combo box, contact support to ask about using your own router. + +TODO + +# pfSense CE vs pfSense Plus + +The pfSense branding applies to two different operating systems, pfSense CE (Community Edition) and pfSense Plus. +pfSense CE is Free and Open Source, meaning that the source code is freely available to view, modify, and redistribute. +pfSense Plus is a closed-source version maintained by Netgate. + +For more information on the differences between pfSense CE and pfSense Plus, view the +[official FAQ](https://www.netgate.com/support/frequently-asked-questions-pfsense-plus) + +**Note:** pfSense Plus used to be free for non-commercial use, but Netgate has removed that subscription tier. The +cheapest subscription plan is $129 per year. + +# Installing the OS + +Note: This guide assumes that your firewall has a video output. If you are using serial, please follow the +[official documentation](https://docs.netgate.com/pfsense/en/latest/install/download-installer-image.html) + +## Downloading the OS + +The pfSense CE download image can be obtained from [the pfSense website](https://www.pfsense.org/download/). + +Architecture should be set to **AMD64**, and installer can be set to USB Memstick or DVD Image. Both can be flashed onto +a USB stick. [Here is a full comparison](https://en.wikipedia.org/wiki/IMG_(file_format)#Comparison_to_ISO_images) + +If you have chosen to use pfSense plus, you can update from pfSense CE to pfSense Plus after installation. + +## Flashing the Image onto a USB Stick + +Once the file has downloaded, open the usb-flasher of your choice (I recommend +[Balena Etcher](https://etcher.balena.io/)), and flash the file. + +**Note: This will wipe the contents of the USB stick, so make sure there's nothing important on it.** + +# Booting into the installer + +1. Insert the USB device into a USB port on the back of the motherboard (Front of the case should be fine but don't use + a USB hub) +2. Shut down the device +3. Start the device +4. Open the boot selection screen + - This is different for every computer, but normally holding down `DELETE` works. + - You can also try `F2` or `F12` + - If those don't work, consult your motherboard or computer's manual. +5. Select to boot from the USB drive +6. You should now see a pfSense boot screen. Press `Enter` or wait a few seconds for the installer to start booting + +TODO + +# Installing + +{% include guide-carousel.html id="installing" %} + +# Configuring pfSense + +## Getting the router's IP address + +After the system boot process completes, you should see a screen that looks like this. + +TODO + +The router displays its WAN address (public IP address), and LAN address (local IP address) + +in my case, the local IP address is `192.168.1.1` + +## Accessing the Web Dashboard + +Going to `http://ROUTER_LOCAL_IP_ADDRESS` in your browser should bring you to a login screen + +TODO + +The default username is `admin`, and the default password is `pfsense` + +You should now be prompted with a setup wizard. + +Skip step 1 since it's just an ad for paid support + +TODO + +On step 2: + +- Set the hostname of the firewall (or leave it as pfSense) +- Give it a subdomain if you have one (TODO) +- Set DNS servers (1.1.1.1 and 1.0.0.1 are maintained by Cloudflare) + +TODO + +On step 3: + +- Set the timezone +- Change the network timeserver if you are into that + +TODO + +On step 4, this is where the magic happens. +If this firewall is between your ISP provided modem, there is a good chance using DHCP will work completely fine, but it +depends on your specific ISP. + +TODO + +On step 5, you can set your local IP Address range. The default is `192.168.1.1/16` but if you need more addresses, you +can use `10.0.0.0/8` + +TODO + +On step 6, set the password for the webGUI. Make sure to use a secure password + +TODO + +On step 7, and 8: reload the system + +The firewall will now restart, if you changed the IP address, you need to change the address in your browser + +## Configuration + +Note: This list is not comprehensive. + +- Enable dark mode + - System > General Setup > webConfigurator section > Theme + - Set to pfSense-Dark +- Remove "Netgate Services and Support tab from dashboard" + - Press the X in the top-right corner of the window +- Add the traffic graph to the dashboard + - Press the plus in the top right corner of the dashboard and select "Traffic Graph" +- Upgrade to PFSense Plus if you are willing to pay at least $129/year + - Purchase a license from + the [PFSense Plus store page](https://shop.netgate.com/products/pfsense-software-subscription) + - Insert the code provided in System > Register + +# Setting up IPv6 + +## What is IPv6 + +IPv6 is a newer implementation of the Internet Protocol than the classic IPv4 and was mainly created to add more IP +addresses. IPv4 supports a maximum of 2^32 (`4,294,967,296`) addresses, while IPv6 has a maximum of 2^128 +(340,282,366,920,938,463,463,374,607,431,768,211,456) addresses. + +## Do I need one? + +IPv4 addresses are now a commodity, and thus some people (including me) have moved to hosting exclusively* using IPv6. + +*My website is still accessible over the IPv4 internet through a network translation service, but I will probably pull +the plug when IPv6 becomes more widely adopted. + +Your ISP might have already rolled out IPv6 to your area. You can check your IPv6 status using +[this website](https://test-ipv6.com/). + +## Obtaining an IPv6 address block with TunnelBroker + +Netgate provides an [official tutorial](https://docs.netgate.com/pfsense/en/latest/recipes/ipv6-tunnel-broker.html) on +how to get a block of IPv6 addresses with TunnelBroker and how to configure pfSense to use them. + +# Installing and configuring Snort + +Snort is a rule-based firewall software that blocks incoming and outgoing network packets based on user-configured +rules. + +Another issue caused by the IPv4 address space being completely full is that people run bots that ping random addresses +for both research and malicious reasons. + +## Installing the Snort package + +1. Open the Package Manager's Available Package view (System > Package Manager > Available Packages) + TODO +2. Install the Snort Package + TODO +3. Wait for the installation to complete + TODO + +## Configuring Snort + +1. First, go to the snort configuration menu (Services > Snort), and click on the `Interfaces` tab if it does not send + you to that page. + TODO +2. Add the WAN interface to be filtered by pressing the `Add` button in the bottom right + TODO +3. Select the WAN interface +4. By default, snort will only save alerts of offences. For extra security, you can enable the `Block Offenders` option, + but ensure that it will only block the source address, and be aware that on rare occasion you might accidentally + block yourself. +5. Press save at the bottom of the page to save interface settings +6. Going back to the `Snort Interfaces` tab should show the WAN interface + TODO +7. Enable scanning by pressing the Play button and waiting for it to start + TODO + +### Adding rules + +Snort blocks connections based on rulesets that can be obtained from multiple sources: + +- Snort VRT (Requires account, has free and paid tiers) +- Snort GPL (Free without account) +- ET Open (Free without account) +- ET Pro (Targeted at large companies; does not publicly list prices) + +To Add rules: + +1. Go to `Global Settings` + TODO +2. Enable the rule sources you desire +3. Set the update interval to 1 Day + TODO +4. Press `Save` + +### Downloading Rules + +Go to Updates and press the `Update Rules` button. This will fetch all rules you enabled in the previous step + +### Configuring rules + +1. Go to the `Snort Interfaces` tab +2. Click on the pencil icon associated with the WAN interface +3. Go to the `WAN Categories` tab +4. Choose the rule sets you would like to use + +You can either cherry-pick which rules you would like to apply, or you can press `Select All` at the top, and manually +whitelist proper traffic that gets blocked. + +### Viewing alerts in real time + +In the `Alerts` tab, you can view IP addresses that have been blocked by the selected rules + +TODO + +This image is from an actual pfSense deployment, so many fields have been blurred + +# Conclusion + +Congratulations! You now have an open-source* firewall protecting your network! Here are some links to other guides on +setting up specific packages/programs on pfSense: + +- [Creating a Virtual Private Network with Tailscale](https://www.wundertech.net/how-to-set-up-tailscale-on-pfsense/) +- [Forwarding ports through your firewall](https://www.wundertech.net/pfsense-port-forwarding-setup-guide/) +- [Configuring VLANS, DHCP, and other stuff](https://itigic.com/how-to-configure-pfsense-internet-vlans-dhcp-dns-and-nat/) + +*If you have chosen to stick with pfSense CE over pfSense+ diff --git a/source/_includes/guide-carousel.html b/source/_includes/guide-carousel.html new file mode 100644 index 0000000..2115a84 --- /dev/null +++ b/source/_includes/guide-carousel.html @@ -0,0 +1,38 @@ +{% assign carousel = page.carousels[include.id] %} + +
+ +
diff --git a/source/_includes/head.html b/source/_includes/head.html index 3823b0d..0648485 100644 --- a/source/_includes/head.html +++ b/source/_includes/head.html @@ -23,8 +23,10 @@ {% endcomment %} - + {% comment %} + Load fontawesome here for faster loadtimes: https://stackoverflow.com/a/35880730/9523246 + {% endcomment %} \ No newline at end of file diff --git a/source/_includes/header.html b/source/_includes/header.html index 9ba3457..fa4cb51 100644 --- a/source/_includes/header.html +++ b/source/_includes/header.html @@ -8,10 +8,10 @@ diff --git a/source/_layouts/guide.html b/source/_layouts/guide.html new file mode 100644 index 0000000..6c8e19c --- /dev/null +++ b/source/_layouts/guide.html @@ -0,0 +1,7 @@ +--- +layout: main +--- + +
+ {{ content }} +
\ No newline at end of file diff --git a/source/_layouts/project.html b/source/_layouts/project.html index 250efef..d56892c 100644 --- a/source/_layouts/project.html +++ b/source/_layouts/project.html @@ -7,21 +7,21 @@ layout: main
{% if page.thumbnail_url %} - {{ page.title }} thumbnail + {{ page.title }} thumbnail {% endif %}

{{ page.description }}

{% if page.project_url %} - - - Project - + + + Project + {% endif %} {% if page.source_url %} - - - Source Code - + + + Source Code + {% endif %}
diff --git a/source/_posts/2023-5-6-informinator.md b/source/_posts/2023-5-6-informinator.md deleted file mode 100644 index c49b818..0000000 --- a/source/_posts/2023-5-6-informinator.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: project -title: "Informinator" -description: News aggregator built with Python, AioHTTP, and Jinja -thumbnail_url: /assets/images/informinator.webp -project_url: https://informinator.owenryan.us/ -# TODO: Uncomment this when source code is published -# source_url: https://code.owenryan.us/owenryan/informinator -SEO_tags: [Python, aiohttp, News] ---- - -Informinator is the one-stop site for all of your news needs! It aims to be a central hub that delivers the stories you -need to know while also funneling you to the proper news sources to get more information. Informinator is currently in -a very early beta and only sources news from Al Jazeera, BBC News, The Associated Press, and editorials from The -Guardian. - -**Note: Informinator will be open-sourced in the next few weeks when the server is stable** - -## Origins - -During the spring 2023 semester, two separate classes I was taking had weekly news quizzes that checked that you had -been following current events. I decided that the best way to study for these quizzes was to create a news aggregator -to simplify the process of looking at several news outlets per day. - -## Current issues - -The first version of Informinator was hacked together over a weekend, so some design choices are suboptimal. Some of these include: - -- All articles are loaded on page-load, even though most are hidden behind the carousel. -- Informinator's RSS parsing code only supports feeds from [RSSHub](https://docs.rsshub.app/en/). - - RSSHub's New York Times English feed is currently unusable due to [a parsing error](https://github.com/DIYgod/RSSHub/issues/12371). -- All articles are cached in Python when an in-memory database such as Redis would greatly improve performance. - -## Roadmap - -Informinator's public roadmap can be found [here](https://informinator.owenryan.us/roadmap). diff --git a/source/_posts/2023-5-6-calculators.md b/source/_projects/calculators.md similarity index 98% rename from source/_posts/2023-5-6-calculators.md rename to source/_projects/calculators.md index 3e694bf..17d9094 100644 --- a/source/_posts/2023-5-6-calculators.md +++ b/source/_projects/calculators.md @@ -2,6 +2,8 @@ layout: project title: Adventures with old calculators description: Shenanigans with graphing calculators my school was throwing away +year: current +permalink: /projects/calculators thumbnail_url: /assets/images/calculators.webp SEO_tags: [Calculator, Texas Instruments, TI82, Z80, Assembly, MS-DOS, Overclocking] --- diff --git a/source/_projects/informinator.md b/source/_projects/informinator.md new file mode 100644 index 0000000..53b9a41 --- /dev/null +++ b/source/_projects/informinator.md @@ -0,0 +1,53 @@ +--- +layout: project +title: "Informinator" +description: News aggregator built with React and TypeScript +year: current +permalink: /projects/informinator +thumbnail_url: /assets/images/informinator.webp +project_url: https://informinator.owenryan.us/ +source_url: https://code.owenryan.us/owenryan/informinator +SEO_tags: [News, FOSS, React, RSS, TypeScript] +--- + +**Note: Informinator will be open-sourced in the near future when the site leaves the testing stage** + +Informinator is a web-based news aggregator that acts as a central place to catch up on current events. + +## Origins + +During the spring 2023 semester, two separate classes I was taking had weekly news quizzes that checked that you had +been following current events. I decided that the best way to study for these quizzes was to create a news aggregator +to simplify the process of looking at several news outlets per day. + +The original version of Informinator was hacked together in a weekend and worked much differently than the current +version. It was written entirely in Python using Aiohttp as the webserver and jinja as the template engine. The server +did everything from Parse RSS to render HTML, which led to 5+ second load times as every RSS feed had to be fetched +before HTML was returned. It also only pulled feeds from RSSHub, and thus only featured stories from BBC News, +Al jazeera, The Associated Press, and Op-eds from The Guardian. + +## Privacy + +Informinator aims to be a privacy-friendly solution for news aggregation. Some information is inadvertently collected to +prevent spam, but it can be entirely avoided by self-holding your own instance of Informinator. + +The official Informinator instance collects the following information + +- IP address when you load the page - This is logged by the webserver and used to identify Denial-Of-Service (DOS) and + similar attacks. +- IP address and RSS feed URL when using the official informinator proxy to load articles - Again used for detecting + abuse. + +## Current issues + +The first version of Informinator was hacked together over a weekend, so some design choices are suboptimal. Some of these include: + +- All articles are loaded on page-load, even though most are hidden behind the carousel. +- Informinator's RSS parsing code only supports feeds from [RSSHub](https://docs.rsshub.app/en/). + - RSSHub's New York Times English feed is currently unusable due + to [a parsing error](https://github.com/DIYgod/RSSHub/issues/12371). +- All articles are cached in Python when an in-memory database such as Redis would greatly improve performance. + +## Roadmap + +Informinator's public roadmap can be found [here](https://informinator.owenryan.us/roadmap). diff --git a/source/_projects/jambox.md b/source/_projects/jambox.md index 6e89dfd..bf9edee 100644 --- a/source/_projects/jambox.md +++ b/source/_projects/jambox.md @@ -2,9 +2,11 @@ layout: project title: "Jambox" description: "Discord music bot built with Hikari and Lavalink" +year: current +permalink: /projects/jambox project_url: https://discord.com/api/oauth2/authorize?client_id=1102705272805404722&permissions=4298394880&scope=applications.commands%20bot thumbnail_url: /assets/images/jambox.webp -SEO_tags: [Discord, Python, Hikari, Lavalink] +SEO_tags: [ Discord, Python, Hikari, Lavalink ] --- **Note:** This project is currently on haitus due to a core Python library becoming deprecated. diff --git a/source/_posts/2023-5-6-website.md b/source/_projects/website.md similarity index 66% rename from source/_posts/2023-5-6-website.md rename to source/_projects/website.md index 555e8bc..3cfb5a4 100644 --- a/source/_posts/2023-5-6-website.md +++ b/source/_projects/website.md @@ -2,10 +2,12 @@ layout: project title: This website description: The self-built site using Jekyll, Bootstrap, TypeScript, and more! +year: current +permalink: /projects/website thumbnail_url: /assets/images/website.webp project_url: https://owenryan.us/ source_url: https://code.owenryan.us/owenryan/owenryan.us -SEO_tags: [web, html, css, jekyll] +SEO_tags: [Website, HTML, CSS, Jekyll] --- After squatting on this domain for 7 years, I finally stopped procrastinating and decided to create a website. @@ -14,8 +16,9 @@ Here is everything I used to turn my visions into reality. ## Structure This website was created using the [Jekyll](https://jekyllrb.com/) static site generator, which runs on the -[Liquid](https://shopify.github.io/liquid/) template engine. Jekyll supports writing posts in [Markdown](https://en.wikipedia.org/wiki/Markdown), which makes writing simple pages -like this one much easier. On the other hand, using plain markdown makes embedding videos and icons much more difficult. +[Liquid](https://shopify.github.io/liquid/) template engine. Jekyll supports writing posts in +[Markdown](https://en.wikipedia.org/wiki/Markdown), which makes writing simple pages like this one much easier. On the +other hand, using plain markdown makes embedding videos and icons much more difficult. ## Theme @@ -38,4 +41,12 @@ so compiling to JavaScript has to be done manually. ## Hosting Jekyll produces static HTML and CSS files, meaning that they can be hosted anywhere. I chose to host this website using -the [Apache webserver](https://httpd.apache.org/) because it's reliable and has better documentation than NGINX. \ No newline at end of file +the [Apache webserver](https://httpd.apache.org/) because it's reliable and has better documentation than NGINX. + +## DOOM Easter Egg + +You might have noticed the spaghetti monster on the social media panel on the front page. I had no idea what to put +there, so I linked to a page with a built-in x86 emulator ([v86](https://github.com/copy/v86)), that runs a super +lightweight Linux image built with Buildroot that boots straight into the original DOOM via [Chocolate +Doom](https://www.chocolate-doom.org/wiki/index.php/Chocolate_Doom). [Feel free to check out the buildroot +configuration](https://code.owenryan.us/owenryan/buildroot-doom) diff --git a/source/_sass/style.sass b/source/_sass/style.sass index 1c2df03..20c3d60 100644 --- a/source/_sass/style.sass +++ b/source/_sass/style.sass @@ -21,7 +21,7 @@ // Remove bullet points from the about page // https://stackoverflow.com/questions/1027354/i-need-an-unordered-list-without-any-bullets -main li +.remove-bullet-points li list-style-type: none padding-left: 2em - text-indent: -2em \ No newline at end of file + text-indent: -1.25em diff --git a/source/about.md b/source/about.md index 96deeef..ecd8c2d 100644 --- a/source/about.md +++ b/source/about.md @@ -32,10 +32,12 @@ so [contact me](/contact) if you are interested! Skills that I am still working on improving - Building Docker containers for Python projects -- C -- C++ +- C/C++ +- Java + - Don't worry, I read Design Patterns - Metrics aggregation using Prometheus and Grafana - JavaScript/TypeScript + - Experience with React & Next.js - Frontend programming & Design - HTML - CSS/SASS diff --git a/source/assets/email.js b/source/assets/email.js index 9c2b7c6..90007c7 100644 --- a/source/assets/email.js +++ b/source/assets/email.js @@ -1,14 +1,14 @@ // This code de-obfuscates my email and displays it on screen when the button is clicked // It's not a perfect solution, but it should stop be enough to stop email scraping // Email encoded in base64. This might be changed in the future to prevent scraping targeting base64 strings -const email = "Y29udGFjdEBvd2Vucnlhbi51cwo="; +var email = "Y29udGFjdEBvd2Vucnlhbi51cwo="; document.addEventListener("DOMContentLoaded", function () { // Get document elements - const button = document.querySelector("#emailButton"); - const emailDiv = document.querySelector("#email"); + var button = document.querySelector("#emailButton"); + var emailDiv = document.querySelector("#email"); // Decode the email string and insert a mailto link into the DOM, then disable the button button.addEventListener("click", function () { - const decodedEmail = atob(email); + var decodedEmail = atob(email); emailDiv.insertAdjacentHTML("beforeend", "
").concat(decodedEmail, "
")); button.disabled = true; }); diff --git a/source/assets/images/guides/pfsense/black.png b/source/assets/images/guides/pfsense/black.png new file mode 100644 index 0000000..de82be6 Binary files /dev/null and b/source/assets/images/guides/pfsense/black.png differ diff --git a/source/assets/images/guides/pfsense/cli-menu.png b/source/assets/images/guides/pfsense/cli-menu.png new file mode 100644 index 0000000..79d98f4 Binary files /dev/null and b/source/assets/images/guides/pfsense/cli-menu.png differ diff --git a/source/assets/images/guides/pfsense/pfsense-login.png b/source/assets/images/guides/pfsense/pfsense-login.png new file mode 100644 index 0000000..fc4dc9b Binary files /dev/null and b/source/assets/images/guides/pfsense/pfsense-login.png differ diff --git a/source/assets/images/guides/pfsense/pfsense-package-confirm.png b/source/assets/images/guides/pfsense/pfsense-package-confirm.png new file mode 100644 index 0000000..309f8a7 Binary files /dev/null and b/source/assets/images/guides/pfsense/pfsense-package-confirm.png differ diff --git a/source/assets/images/guides/pfsense/pfsense-package-install.png b/source/assets/images/guides/pfsense/pfsense-package-install.png new file mode 100644 index 0000000..faf844d Binary files /dev/null and b/source/assets/images/guides/pfsense/pfsense-package-install.png differ diff --git a/source/assets/images/guides/pfsense/pfsense-packages.png b/source/assets/images/guides/pfsense/pfsense-packages.png new file mode 100644 index 0000000..00bd568 Binary files /dev/null and b/source/assets/images/guides/pfsense/pfsense-packages.png differ diff --git a/source/assets/images/guides/pfsense/setup-boot.png b/source/assets/images/guides/pfsense/setup-boot.png new file mode 100644 index 0000000..d456175 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-boot.png differ diff --git a/source/assets/images/guides/pfsense/setup-bootloader.png b/source/assets/images/guides/pfsense/setup-bootloader.png new file mode 100644 index 0000000..9499c55 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-bootloader.png differ diff --git a/source/assets/images/guides/pfsense/setup-complete.png b/source/assets/images/guides/pfsense/setup-complete.png new file mode 100644 index 0000000..65a2f5c Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-complete.png differ diff --git a/source/assets/images/guides/pfsense/setup-confirm.png b/source/assets/images/guides/pfsense/setup-confirm.png new file mode 100644 index 0000000..7a5941a Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-confirm.png differ diff --git a/source/assets/images/guides/pfsense/setup-copyright.png b/source/assets/images/guides/pfsense/setup-copyright.png new file mode 100644 index 0000000..5ca65f8 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-copyright.png differ diff --git a/source/assets/images/guides/pfsense/setup-installing.png b/source/assets/images/guides/pfsense/setup-installing.png new file mode 100644 index 0000000..5b72f4a Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-installing.png differ diff --git a/source/assets/images/guides/pfsense/setup-partitioning.png b/source/assets/images/guides/pfsense/setup-partitioning.png new file mode 100644 index 0000000..d9240ab Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-partitioning.png differ diff --git a/source/assets/images/guides/pfsense/setup-probe.png b/source/assets/images/guides/pfsense/setup-probe.png new file mode 100644 index 0000000..df0c7f9 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-probe.png differ diff --git a/source/assets/images/guides/pfsense/setup-welcome.png b/source/assets/images/guides/pfsense/setup-welcome.png new file mode 100644 index 0000000..7d5bde3 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-welcome.png differ diff --git a/source/assets/images/guides/pfsense/setup-zfs-drives.png b/source/assets/images/guides/pfsense/setup-zfs-drives.png new file mode 100644 index 0000000..1d26a6a Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-zfs-drives.png differ diff --git a/source/assets/images/guides/pfsense/setup-zfs-menu-install.png b/source/assets/images/guides/pfsense/setup-zfs-menu-install.png new file mode 100644 index 0000000..fc40949 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-zfs-menu-install.png differ diff --git a/source/assets/images/guides/pfsense/setup-zfs-menu-pool.png b/source/assets/images/guides/pfsense/setup-zfs-menu-pool.png new file mode 100644 index 0000000..ac96798 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-zfs-menu-pool.png differ diff --git a/source/assets/images/guides/pfsense/setup-zfs-type.png b/source/assets/images/guides/pfsense/setup-zfs-type.png new file mode 100644 index 0000000..e934ea9 Binary files /dev/null and b/source/assets/images/guides/pfsense/setup-zfs-type.png differ diff --git a/source/assets/images/guides/pfsense/snort-alerts.png b/source/assets/images/guides/pfsense/snort-alerts.png new file mode 100644 index 0000000..f9e4d96 Binary files /dev/null and b/source/assets/images/guides/pfsense/snort-alerts.png differ diff --git a/source/assets/images/guides/pfsense/snort-globalconfig1.png b/source/assets/images/guides/pfsense/snort-globalconfig1.png new file mode 100644 index 0000000..c2cb39a Binary files /dev/null and b/source/assets/images/guides/pfsense/snort-globalconfig1.png differ diff --git a/source/assets/images/guides/pfsense/snort-globalconfig2.png b/source/assets/images/guides/pfsense/snort-globalconfig2.png new file mode 100644 index 0000000..c7d2d57 Binary files /dev/null and b/source/assets/images/guides/pfsense/snort-globalconfig2.png differ diff --git a/source/assets/images/guides/pfsense/snort-interfaces-empty.png b/source/assets/images/guides/pfsense/snort-interfaces-empty.png new file mode 100644 index 0000000..40a35da Binary files /dev/null and b/source/assets/images/guides/pfsense/snort-interfaces-empty.png differ diff --git a/source/assets/images/guides/pfsense/snort-interfaces-off.png b/source/assets/images/guides/pfsense/snort-interfaces-off.png new file mode 100644 index 0000000..a3b36b4 Binary files /dev/null and b/source/assets/images/guides/pfsense/snort-interfaces-off.png differ diff --git a/source/assets/images/guides/pfsense/snort-interfaces-on.png b/source/assets/images/guides/pfsense/snort-interfaces-on.png new file mode 100644 index 0000000..d93ee44 Binary files /dev/null and b/source/assets/images/guides/pfsense/snort-interfaces-on.png differ diff --git a/source/assets/images/guides/pfsense/topology.png b/source/assets/images/guides/pfsense/topology.png new file mode 100644 index 0000000..09ef634 Binary files /dev/null and b/source/assets/images/guides/pfsense/topology.png differ diff --git a/source/assets/images/guides/pfsense/webp-to-png.sh b/source/assets/images/guides/pfsense/webp-to-png.sh new file mode 100644 index 0000000..70a381a --- /dev/null +++ b/source/assets/images/guides/pfsense/webp-to-png.sh @@ -0,0 +1 @@ +find "." -type f -name "*.png" -exec sh -c 'convert "$0" "${0%.png}.webp"' {} \; \ No newline at end of file diff --git a/source/assets/images/guides/pfsense/wizard-general.png b/source/assets/images/guides/pfsense/wizard-general.png new file mode 100644 index 0000000..dbb9494 Binary files /dev/null and b/source/assets/images/guides/pfsense/wizard-general.png differ diff --git a/source/assets/images/guides/pfsense/wizard-lan.png b/source/assets/images/guides/pfsense/wizard-lan.png new file mode 100644 index 0000000..444e3a2 Binary files /dev/null and b/source/assets/images/guides/pfsense/wizard-lan.png differ diff --git a/source/assets/images/guides/pfsense/wizard-password.png b/source/assets/images/guides/pfsense/wizard-password.png new file mode 100644 index 0000000..2df039e Binary files /dev/null and b/source/assets/images/guides/pfsense/wizard-password.png differ diff --git a/source/assets/images/guides/pfsense/wizard-timezone.png b/source/assets/images/guides/pfsense/wizard-timezone.png new file mode 100644 index 0000000..2470c2c Binary files /dev/null and b/source/assets/images/guides/pfsense/wizard-timezone.png differ diff --git a/source/assets/images/guides/pfsense/wizard-wan.png b/source/assets/images/guides/pfsense/wizard-wan.png new file mode 100644 index 0000000..752ac21 Binary files /dev/null and b/source/assets/images/guides/pfsense/wizard-wan.png differ diff --git a/source/assets/images/guides/pfsense/wizard-welcome.png b/source/assets/images/guides/pfsense/wizard-welcome.png new file mode 100644 index 0000000..af924d0 Binary files /dev/null and b/source/assets/images/guides/pfsense/wizard-welcome.png differ diff --git a/source/assets/landingpage.js b/source/assets/landingpage.js index 236c12b..7436fe5 100644 --- a/source/assets/landingpage.js +++ b/source/assets/landingpage.js @@ -1,11 +1,10 @@ // JS Code that rotates the gradient on the content box on the front page document.addEventListener("DOMContentLoaded", function () { - const mainBox = document.querySelector("#rotating-gradient"); - let angle = 0; + var mainBox = document.querySelector("#rotating-gradient"); + var angle = 0; // Rotate the gradient 1 degree every 100ms setInterval(function () { - const gradient = "linear-gradient(".concat(angle, "deg, #1E1F46, #404040)"); - mainBox.style["background"] = gradient; + mainBox.style.background = "linear-gradient(".concat(angle, "deg, #1E1F46, #404040)"); angle += 1; if (angle >= 360) { angle = 0; diff --git a/source/assets/landingpage.ts b/source/assets/landingpage.ts index 56e4cfb..b37ffe6 100644 --- a/source/assets/landingpage.ts +++ b/source/assets/landingpage.ts @@ -6,8 +6,7 @@ document.addEventListener("DOMContentLoaded", (): void => { // Rotate the gradient 1 degree every 100ms setInterval((): void => { - const gradient: string = `linear-gradient(${angle}deg, #1E1F46, #404040)`; - mainBox.style["background"] = gradient; + mainBox.style.background = `linear-gradient(${angle}deg, #1E1F46, #404040)`; angle += 1; if (angle >= 360) { angle = 0 diff --git a/source/assets/utils.js b/source/assets/utils.js index 46ec29c..b67268f 100644 --- a/source/assets/utils.js +++ b/source/assets/utils.js @@ -1,7 +1,7 @@ // Some useful functions used throughout my code // Based on this SO answer https://stackoverflow.com/a/35880730/9523246 function lazyLoadCSS(url) { - const css = document.createElement('link'); + var css = document.createElement('link'); css.href = url; css.rel = 'stylesheet'; css.type = 'text/css'; diff --git a/source/contact.html b/source/contact.html index a9d949e..afd6fdc 100644 --- a/source/contact.html +++ b/source/contact.html @@ -11,6 +11,11 @@ permalink: /contact
+
diff --git a/source/guides.html b/source/guides.html new file mode 100644 index 0000000..2ea67f8 --- /dev/null +++ b/source/guides.html @@ -0,0 +1,22 @@ +--- +layout: main +permalink: /guides/index.html +--- + +
+
+ {%- for guide in site.guides -%} + + {%- endfor -%} +
+
\ No newline at end of file diff --git a/source/index.html b/source/index.html index 41d49f5..eff5bf6 100644 --- a/source/index.html +++ b/source/index.html @@ -3,7 +3,8 @@ layout: main ---
-
+

Hello there!

Welcome to my website!

diff --git a/source/projects.html b/source/projects.html index c7616a6..432ae06 100644 --- a/source/projects.html +++ b/source/projects.html @@ -1,22 +1,22 @@ --- layout: main -permalink: /projects +permalink: /projects/index.html ---