<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: rnppnr</title>
    <description>The latest articles on DEV Community by rnppnr (@rnppnr).</description>
    <link>https://dev.to/rnppnr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1093608%2F894adeec-6170-4d98-922b-d61f2ab70ff4.png</url>
      <title>DEV Community: rnppnr</title>
      <link>https://dev.to/rnppnr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rnppnr"/>
    <language>en</language>
    <item>
      <title>Securing a linux server.</title>
      <dc:creator>rnppnr</dc:creator>
      <pubDate>Mon, 28 Apr 2025 17:17:59 +0000</pubDate>
      <link>https://dev.to/rnppnr/securing-a-linux-server-2h7f</link>
      <guid>https://dev.to/rnppnr/securing-a-linux-server-2h7f</guid>
      <description>&lt;p&gt;Not long after finishing setting up a new server you see from the logs that it is constantly being attacked. If you are not convinced of, or wish to see, how frequent these attacks are take a look at the auth.log file that is usually located in /var/log. There are several very simple steps that can make it almost impossible for the server to be compromised. Once you complete the following steps you will have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;   Created a user account that has sudo privileges. This account will be then used to do any further server maintenance&lt;/li&gt;
&lt;li&gt;   Installed Fail2ban to limit malicious server attacks&lt;/li&gt;
&lt;li&gt;   Prevented the root user from logging in&lt;/li&gt;
&lt;li&gt;   Changed the port ssh listens on&lt;/li&gt;
&lt;li&gt;   Installed ufw a simple command line tool to manage iptables&lt;/li&gt;
&lt;li&gt;   Created a ssh key and set the server up to only allow logins with ssh keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;While securing the server leave the first terminal you connected to open.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our first step is to create a user that will have sudo privileges. It is this user that will be used to login to the server to do any maintenance. Later the root user will be prevented from logging in. To do this we run the following command as the root user to create a new user and give them a password.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useradd -m -d /home/USERNAME -s /bin/bash USERNAME
passwd USERNAME
usermod -aG sudo USERNAME
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can now logout of the server and log in with the user you created in the previous step. To make sure all is working as it should you can now run an update and upgrade on the server to make sure the latest patches are applied. When you hit return for the first command you should get a &lt;br&gt;
password prompt type in the password you used previously when setting up the account.    &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get update
sudo apt-get upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As you’ll be using nano you can run the following command to check and install it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install nano
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.fail2ban.org/wiki/index.php/Main_Page" rel="noopener noreferrer"&gt;Fail2ban&lt;/a&gt; scans the logs files and bans any ip address that appears to be acting maliciously. The next step is to install fail2ban.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install fail2ban
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The default settings will protect the ssh port and ban what it considers malicious attackes for 10 minutes after 6 tries in the last 10 minutes. If you want to check that Fail2ban is doing it’s job leave the server for thirty minutes or so that should be enough time for an ip address to be &lt;br&gt;
banned. If you are satisfied that fail2ban is working you can now disable the root user from logging into the server. &lt;/p&gt;

&lt;p&gt;Run the following command.    &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Change PermitRootLogin yes to PermitRootLogin no. Save the file then run the following command&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service ssh restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Leave the current terminal open and open a new one. If you try logging in as root you should get an error and cannot log in. Checking the /var/log/auth.log file should show that the root user was refused a login.&lt;/p&gt;

&lt;p&gt;You will now install &lt;a href="https://launchpad.net/ufw" rel="noopener noreferrer"&gt;Uncomplicated Firewall.&lt;/a&gt;. If you don't want ot add ufw you could follow this post and use &lt;a href="https://dev.to/rnppnr/using-iptables-to-secure-your-server-1oee"&gt;IPTables&lt;/a&gt; This will only allow traffic on the ports you open. In your original terminal run the following commands.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install ufw
sudo ufw –help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The help screen shows how to use the program. You now need to allow some ports before enabling the firewall or you will get locked out of the server.&lt;/p&gt;

&lt;p&gt;You will now change the port that ssh is listening on.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There will be a setting for the Port. If you have not changed this it should be 22.  You can change this to something like 2222. Save the file and run the following command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service ssh restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Again check you can log in using a new terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DO NOT DO THIS UNTIL YOU KNOW WHAT PORT SSH IS LISTENING ON&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo ufw allow 2222 (or whatever port you used in the sshd_config file)
sudo ufw allow http (port 80 by default)
sudo ufw allow https (port 443 by default)
sudo ufw enable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You will need to update the Fail2ban config file to match the port you are using for ssh.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/fail2ban/jail.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Change the ssh port to the port you put in the sshd_config file. Then run the following command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo fail2ban-client reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Following these steps has made your server more secure.&lt;/p&gt;

&lt;p&gt;The next step will make it impossible for anyone to logon without a ssh key installed on the server. For this you will need to download &lt;a href="https://putty.org/" rel="noopener noreferrer"&gt;PuTTY&lt;/a&gt; and create your ssh key. There is a tutorial for doing this &lt;a href="https://www.ssh.com/ssh/putty/windows/puttygen" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Once you have your ssh key you can install it on your server to do this you need to create a .ssh directory in the home directory of the user you created at the start.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir /home/USERNAME/.ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Upload the ssh key you created using PuTTY to this directory.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/ssh/sshd_config
PermitRootLogin no
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Make sure PasswordAuthentication is set to yes. This is so you can log in with a password while you are testing the setup of the ssh key. Once you have made these changes run the following command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service ssh restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now open a new terminal and login. If the password prompt appears then make sure you have Pageant running and your private keys loaded. Pageant will be in the same directory as PuTTY. Once you have logged in using &lt;br&gt;
your ssh key you can edit the sshd_config file and set PasswordAuthenticaiton to no.    &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Using IPTables to Secure Your Server.</title>
      <dc:creator>rnppnr</dc:creator>
      <pubDate>Mon, 28 Apr 2025 17:04:38 +0000</pubDate>
      <link>https://dev.to/rnppnr/using-iptables-to-secure-your-server-1oee</link>
      <guid>https://dev.to/rnppnr/using-iptables-to-secure-your-server-1oee</guid>
      <description>&lt;h3&gt;
  
  
  This rule set is designed for a Linux system that:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Allows SSH (port 22) as the primary remote access method.&lt;/li&gt;
&lt;li&gt;Supports basic system functionality (loopback, established/related connections, ICMP).&lt;/li&gt;
&lt;li&gt;Optionally allows common services (web, mail, file sharing, database) while blocking everything else by default.&lt;/li&gt;
&lt;li&gt;Assumes a typical server use case but can be trimmed or expanded based on your needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can remove or comment out rules for services you don’t need.&lt;/p&gt;




&lt;h3&gt;
  
  
  Full &lt;code&gt;iptables&lt;/code&gt; Rule Set
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# Flush existing rules to start fresh (use with caution on a live system)&lt;/span&gt;
iptables &lt;span class="nt"&gt;-F&lt;/span&gt;
iptables &lt;span class="nt"&gt;-X&lt;/span&gt;

&lt;span class="c"&gt;# Set default policies: DROP incoming, ALLOW outgoing&lt;/span&gt;
iptables &lt;span class="nt"&gt;-P&lt;/span&gt; INPUT DROP
iptables &lt;span class="nt"&gt;-P&lt;/span&gt; FORWARD DROP  &lt;span class="c"&gt;# If routing/NAT isn't needed, drop forwarded traffic&lt;/span&gt;
iptables &lt;span class="nt"&gt;-P&lt;/span&gt; OUTPUT ACCEPT &lt;span class="c"&gt;# Allow all outbound traffic (can be restricted if needed)&lt;/span&gt;

&lt;span class="c"&gt;# Allow loopback traffic (essential for local services)&lt;/span&gt;
iptables &lt;span class="nt"&gt;-A&lt;/span&gt; INPUT &lt;span class="nt"&gt;-i&lt;/span&gt; lo &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT

&lt;span class="c"&gt;# Allow established and related connections (keeps ongoing sessions alive)&lt;/span&gt;
iptables &lt;span class="nt"&gt;-A&lt;/span&gt; INPUT &lt;span class="nt"&gt;-m&lt;/span&gt; conntrack &lt;span class="nt"&gt;--ctstate&lt;/span&gt; ESTABLISHED,RELATED &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT

&lt;span class="c"&gt;# Allow ICMP (e.g., ping responses, network diagnostics)&lt;/span&gt;
iptables &lt;span class="nt"&gt;-A&lt;/span&gt; INPUT &lt;span class="nt"&gt;-p&lt;/span&gt; icmp &lt;span class="nt"&gt;--icmp-type&lt;/span&gt; echo-request &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT

&lt;span class="c"&gt;# Allow SSH (port 22/TCP) for remote access&lt;/span&gt;
iptables &lt;span class="nt"&gt;-A&lt;/span&gt; INPUT &lt;span class="nt"&gt;-p&lt;/span&gt; tcp &lt;span class="nt"&gt;--dport&lt;/span&gt; 22 &lt;span class="nt"&gt;-m&lt;/span&gt; conntrack &lt;span class="nt"&gt;--ctstate&lt;/span&gt; NEW &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT

&lt;span class="c"&gt;# --- Optional Service Rules (uncomment or remove as needed) ---&lt;/span&gt;

&lt;span class="c"&gt;# Web Server (HTTP and HTTPS)&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT&lt;/span&gt;

&lt;span class="c"&gt;# Mail Server (SMTP, Submission, IMAP, IMAPS, POP3, POP3S)&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW -j ACCEPT   # SMTP&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 587 -m conntrack --ctstate NEW -j ACCEPT  # Submission&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW -j ACCEPT  # IMAP&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW -j ACCEPT  # IMAPS&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW -j ACCEPT  # POP3&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW -j ACCEPT  # POP3S&lt;/span&gt;

&lt;span class="c"&gt;# File Sharing - Samba (SMB/CIFS)&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p udp --dport 137 -m conntrack --ctstate NEW -j ACCEPT  # NetBIOS Name Service&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p udp --dport 138 -m conntrack --ctstate NEW -j ACCEPT  # NetBIOS Datagram&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 139 -m conntrack --ctstate NEW -j ACCEPT  # NetBIOS Session&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 445 -m conntrack --ctstate NEW -j ACCEPT  # SMB over TCP&lt;/span&gt;

&lt;span class="c"&gt;# File Sharing - NFS (basic ports; dynamic ports may need rpcbind config)&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 2049 -m conntrack --ctstate NEW -j ACCEPT # NFS&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p udp --dport 2049 -m conntrack --ctstate NEW -j ACCEPT # NFS&lt;/span&gt;

&lt;span class="c"&gt;# Database Server (MySQL and PostgreSQL)&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 3306 -m conntrack --ctstate NEW -j ACCEPT # MySQL/MariaDB&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p tcp --dport 5432 -m conntrack --ctstate NEW -j ACCEPT # PostgreSQL&lt;/span&gt;

&lt;span class="c"&gt;# DHCP Server (if the system assigns IPs; rare for a typical server)&lt;/span&gt;
&lt;span class="c"&gt;#iptables -A INPUT -p udp --dport 67 -m conntrack --ctstate NEW -j ACCEPT   # DHCP Server&lt;/span&gt;

&lt;span class="c"&gt;# --- End of Rules ---&lt;/span&gt;
&lt;span class="c"&gt;# Default INPUT policy is DROP, so anything not explicitly allowed is blocked&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  What This Rule Set Does
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Core Functionality&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loopback&lt;/strong&gt;: Allows all traffic on &lt;code&gt;lo&lt;/code&gt; for local processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Established/Related&lt;/strong&gt;: Permits responses to outbound connections (e.g., updates, DNS, NTP) and ongoing sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ICMP&lt;/strong&gt;: Allows ping responses and basic network diagnostics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSH&lt;/strong&gt;: Opens port 22/TCP for remote access.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optional Services&lt;/strong&gt; (commented out by default):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web server (80, 443).&lt;/li&gt;
&lt;li&gt;Mail server (25, 587, 143, 993, 110, 995).&lt;/li&gt;
&lt;li&gt;File sharing (Samba: 137-139, 445; NFS: 2049).&lt;/li&gt;
&lt;li&gt;Databases (3306, 5432).&lt;/li&gt;
&lt;li&gt;DHCP server (67).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default &lt;code&gt;INPUT&lt;/code&gt; policy is &lt;code&gt;DROP&lt;/code&gt;, blocking all unlisted inbound traffic.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;OUTPUT&lt;/code&gt; is left open (common for servers; can be restricted if needed).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FORWARD&lt;/code&gt; is dropped (assuming no routing/NAT).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  How to Use This
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Save to a Script&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the code into a file (e.g., &lt;code&gt;firewall.sh&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Make it executable: &lt;code&gt;chmod +x firewall.sh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run it: &lt;code&gt;./firewall.sh&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Customize&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uncomment the optional service rules you need (e.g., web server ports).&lt;/li&gt;
&lt;li&gt;Remove rules for services you don’t use.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Persist Rules&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On Debian/Ubuntu: &lt;code&gt;iptables-save &amp;gt; /etc/iptables/rules.v4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On CentOS/RHEL: &lt;code&gt;service iptables save&lt;/code&gt; or integrate with &lt;code&gt;firewalld&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check rules: &lt;code&gt;iptables -L -v -n&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Test SSH: &lt;code&gt;ssh user@host&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Test blocked ports: Try connecting to unopened ports (e.g., &lt;code&gt;telnet host 80&lt;/code&gt; should fail).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outbound Traffic&lt;/strong&gt;: The &lt;code&gt;OUTPUT&lt;/code&gt; chain is &lt;code&gt;ACCEPT&lt;/code&gt; by default, allowing the system to initiate connections (e.g., for updates or DNS). If you want to lock this down, add specific &lt;code&gt;OUTPUT&lt;/code&gt; rules and set &lt;code&gt;-P OUTPUT DROP&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Protocols&lt;/strong&gt;: NFS and FTP may require additional &lt;code&gt;conntrack&lt;/code&gt; modules (e.g., &lt;code&gt;nf_conntrack_ftp&lt;/code&gt;) and port ranges for full functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal Setup&lt;/strong&gt;: If you only need SSH and basic system operation, use just the uncommented rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This rule set balances functionality and security for a typical Linux server.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
