+
ubuntu
marko
java
bsd
+
+
flask
gentoo
pnpm
hapi
+
+
[]
dart
+
โˆš
+
ts
+
symfony
raspbian
nim
f#
+
+
โŠ‚
fortran
โŠ‚
echo
yarn
+
+
+
sinatra
+
+
echo
+
+
+
+
+
axum
+
+
php
laravel
+
+
elementary
+
+
+
+
+
+
lua
pip
+
ฯ€
+
+
bun
+
jest
r
bash
tcl
mongo
%
fauna
+
xgboost
ada
+
+
influxdb
+
+
nomad
prometheus
โˆช
solid
+
aurelia
tls
+
+
Back to Blog
๐Ÿ›ก๏ธ AlmaLinux Firewall Configuration: Complete Security & Protection Guide
AlmaLinux Firewall Security

๐Ÿ›ก๏ธ AlmaLinux Firewall Configuration: Complete Security & Protection Guide

Published Sep 17, 2025

Master firewall configuration on AlmaLinux! Learn firewalld, iptables, security zones, and network protection. Complete beginner-friendly guide with real examples and best practices.

32 min read
0 views
Table of Contents

๐Ÿ›ก๏ธ AlmaLinux Firewall Configuration: Complete Security & Protection Guide

Welcome to the essential world of firewall configuration on AlmaLinux! ๐ŸŽ‰ Think of a firewall as the security guard at the gates of your digital fortress - it decides who gets in, who stays out, and what they can do once inside! Whether youโ€™re protecting a home server, securing a business network, or hardening a production system, mastering firewall configuration is absolutely crucial! ๐Ÿฐ

Firewalls might seem intimidating at first, but theyโ€™re actually your best friend for system security! ๐Ÿ’ช From understanding basic concepts to implementing advanced security policies, weโ€™ll learn everything step by step. Get ready to become a security expert and create impenetrable digital defenses that keep your systems safe! โœจ

๐Ÿค” Why is Firewall Configuration Important?

Firewall configuration is your first line of defense against cyber threats! Hereโ€™s why you should master it:

  • ๐Ÿ›ก๏ธ Network Protection: Block malicious traffic before it reaches your system
  • ๐ŸŽฏ Access Control: Control which services are accessible from which networks
  • ๐Ÿ” Attack Prevention: Stop common attacks like port scanning and brute force
  • ๐Ÿ‘ฅ Multi-Zone Security: Create different security levels for different network areas
  • ๐Ÿ“Š Traffic Monitoring: Monitor and log network traffic for security analysis
  • ๐Ÿšซ Service Isolation: Prevent unauthorized access to sensitive services
  • โšก Performance: Reduce system load by filtering unwanted traffic
  • ๐ŸŽญ Compliance: Meet security standards and regulatory requirements

๐ŸŽฏ What You Need

Before we start configuring firewalls, make sure you have:

โœ… AlmaLinux 8 or 9 installed and running โœ… Root or sudo access to configure firewall settings โœ… Basic networking knowledge (IP addresses, ports, protocols) โœ… Understanding of services (which services need network access) โœ… Terminal familiarity (basic command line usage) โœ… Network setup (know your network configuration) โœ… Backup plan (in case you lock yourself out!)

๐Ÿ“ Understanding AlmaLinux Firewall

Letโ€™s start by understanding how AlmaLinux handles firewalls! ๐ŸŽ“

FirewallD vs iptables

# Check if firewalld is running
systemctl status firewalld
# Output: Shows firewalld service status

# Check firewalld version
firewall-cmd --version
# Output: Shows firewalld version number

# Check current firewall backend
firewall-cmd --get-backend
# Output: Shows backend (usually nftables)

# View default zone
firewall-cmd --get-default-zone
# Output: Shows current default zone (usually public)

# List all zones
firewall-cmd --get-zones
# Output: Shows all available security zones

Current Firewall Status

# Check firewall state
firewall-cmd --state
# Output: running or not running

# Get complete firewall configuration
firewall-cmd --list-all
# Output: Shows current zone configuration

# List all active zones
firewall-cmd --get-active-zones
# Output: Shows zones with associated interfaces

# Check specific zone configuration
firewall-cmd --zone=public --list-all
# Output: Shows detailed public zone configuration

๐Ÿ”ง Basic Firewall Operations

Starting and Managing Firewall

# Start firewalld service
sudo systemctl start firewalld
# Output: No output if successful

# Enable firewalld at boot
sudo systemctl enable firewalld
# Output: Creates startup symlinks

# Stop firewalld (be careful!)
sudo systemctl stop firewalld
# Output: Disables firewall protection

# Restart firewalld
sudo systemctl restart firewalld
# Output: Restarts firewall service

# Reload firewall configuration
sudo firewall-cmd --reload
# Output: Reloads rules without losing connections

Managing Services and Ports

# Allow a service permanently
sudo firewall-cmd --permanent --add-service=http
# Output: No output if successful

# Allow a specific port
sudo firewall-cmd --permanent --add-port=8080/tcp
# Output: Allows TCP port 8080

# Allow a port range
sudo firewall-cmd --permanent --add-port=3000-3100/tcp
# Output: Allows TCP ports 3000-3100

# Remove a service
sudo firewall-cmd --permanent --remove-service=ftp
# Output: Blocks FTP service

# Remove a port
sudo firewall-cmd --permanent --remove-port=8080/tcp
# Output: Blocks TCP port 8080

# Apply changes (always needed after --permanent)
sudo firewall-cmd --reload
# Output: Activates the permanent changes

๐ŸŒŸ Working with Zones

Understanding Security Zones

# List all available zones
firewall-cmd --get-zones
# Output: block dmz drop external home internal public trusted work

# Get information about a specific zone
firewall-cmd --zone=public --list-all
# Output: Shows services, ports, and rules for public zone

# Get information about all zones
firewall-cmd --list-all-zones
# Output: Shows complete configuration for all zones

# Check which zone an interface belongs to
firewall-cmd --get-zone-of-interface=eth0
# Output: Shows zone for eth0 interface

Managing Zone Assignments

# Change interface to different zone
sudo firewall-cmd --zone=home --change-interface=eth0
# Output: Moves eth0 to home zone

# Set default zone
sudo firewall-cmd --set-default-zone=home
# Output: Changes default zone to home

# Add interface to zone permanently
sudo firewall-cmd --permanent --zone=home --add-interface=eth0
# Output: Permanently assigns eth0 to home zone

# Remove interface from zone
sudo firewall-cmd --permanent --zone=home --remove-interface=eth0
# Output: Removes interface from home zone

# Apply permanent changes
sudo firewall-cmd --reload
# Output: Activates permanent zone changes

โœ… Advanced Firewall Configuration

Creating Custom Rules

# Add rich rule for specific IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
# Output: Allows all traffic from specific IP

# Block specific IP address
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.50" drop'
# Output: Blocks all traffic from specific IP

# Allow specific service from specific network
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
# Output: Allows SSH only from local network

# Allow port with source restriction
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.0.0/16" port protocol="tcp" port="3306" accept'
# Output: Allows MySQL only from specific network

# Log dropped packets
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" log prefix="Dropped: " level="info" drop'
# Output: Logs all dropped packets

Port Forwarding and NAT

# Enable IP forwarding
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Output: Enables IP forwarding for NAT

# Add port forwarding rule
sudo firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
# Output: Forwards external port 80 to internal server port 8080

# Add masquerading for NAT
sudo firewall-cmd --permanent --zone=external --add-masquerade
# Output: Enables NAT for external zone

# Forward all traffic for specific protocol
sudo firewall-cmd --permanent --zone=public --add-forward-port=port=443:proto=tcp:toaddr=10.0.1.50
# Output: Forwards HTTPS traffic to internal server

# Check forwarding rules
firewall-cmd --zone=external --list-forward-ports
# Output: Shows all port forwarding rules

๐Ÿ”ง Service-Specific Configurations

Web Server Firewall Setup

# Configure firewall for web server
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Output: Allows HTTP and HTTPS traffic

# Allow custom web ports
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=8443/tcp
# Output: Allows custom web ports

# Restrict SSH to specific network
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
# Output: Allows SSH only from local network

# Apply web server firewall changes
sudo firewall-cmd --reload
# Output: Activates web server firewall rules

# Verify web server configuration
firewall-cmd --list-services
firewall-cmd --list-ports
# Output: Shows allowed services and ports

Database Server Security

# Create database server zone
sudo firewall-cmd --permanent --new-zone=database
# Output: Creates new zone for database servers

# Configure database zone
sudo firewall-cmd --permanent --zone=database --add-service=ssh
sudo firewall-cmd --permanent --zone=database --add-port=3306/tcp
sudo firewall-cmd --permanent --zone=database --add-port=5432/tcp
# Output: Allows SSH and database ports

# Restrict database access to specific servers
sudo firewall-cmd --permanent --zone=database --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="3306" accept'
sudo firewall-cmd --permanent --zone=database --add-rich-rule='rule family="ipv4" source address="192.168.1.11" port protocol="tcp" port="3306" accept'
# Output: Allows MySQL only from web servers

# Set interface to database zone
sudo firewall-cmd --permanent --zone=database --add-interface=eth0
# Output: Assigns interface to database zone

# Apply database server configuration
sudo firewall-cmd --reload
# Output: Activates database firewall rules

๐ŸŽฎ Quick Examples

Example 1: Secure Web Server Setup

# Install web server
sudo dnf install httpd -y
sudo systemctl enable --now httpd

# Configure firewall for web server
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Output: Allows web traffic

# Secure SSH access (admin network only)
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.1.0/24" service name="ssh" accept'
# Output: Restricts SSH to admin network

# Add custom application port
sudo firewall-cmd --permanent --add-port=8080/tcp
# Output: Allows custom application

# Block common attack ports
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="23" drop'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="135" drop'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="445" drop'
# Output: Blocks telnet, RPC, and SMB

# Enable logging for security monitoring
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" service name="ssh" log prefix="SSH-Access: " level="info" accept'
# Output: Logs SSH access attempts

# Apply all web server changes
sudo firewall-cmd --reload

# Verify web server firewall
firewall-cmd --list-all
curl -I http://localhost
# Output: Shows firewall config and tests web access

Example 2: Multi-Zone Network Setup

# Create custom zones for different network segments
sudo firewall-cmd --permanent --new-zone=dmz
sudo firewall-cmd --permanent --new-zone=internal
sudo firewall-cmd --permanent --new-zone=management

# Configure DMZ zone (web servers)
sudo firewall-cmd --permanent --zone=dmz --add-service=http
sudo firewall-cmd --permanent --zone=dmz --add-service=https
sudo firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="10.0.100.0/24" service name="ssh" accept'
# Output: DMZ allows web traffic and SSH from management

# Configure internal zone (application servers)
sudo firewall-cmd --permanent --zone=internal --add-port=8080/tcp
sudo firewall-cmd --permanent --zone=internal --add-port=8443/tcp
sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.0.1.0/24" accept'
sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.0.100.0/24" service name="ssh" accept'
# Output: Internal allows app ports and access from DMZ and management

# Configure management zone (admin access)
sudo firewall-cmd --permanent --zone=management --add-service=ssh
sudo firewall-cmd --permanent --zone=management --add-service=snmp
sudo firewall-cmd --permanent --zone=management --add-port=3389/tcp
# Output: Management allows admin protocols

# Assign interfaces to zones
sudo firewall-cmd --permanent --zone=dmz --add-interface=eth0
sudo firewall-cmd --permanent --zone=internal --add-interface=eth1
sudo firewall-cmd --permanent --zone=management --add-interface=eth2

# Apply multi-zone configuration
sudo firewall-cmd --reload

# Verify zone configuration
firewall-cmd --get-active-zones
firewall-cmd --zone=dmz --list-all
firewall-cmd --zone=internal --list-all
firewall-cmd --zone=management --list-all
# Output: Shows complete multi-zone setup

Example 3: Comprehensive Security Hardening

# Start with restrictive default zone
sudo firewall-cmd --set-default-zone=drop
# Output: Drops all traffic by default

# Create hardened zone for servers
sudo firewall-cmd --permanent --new-zone=hardened
sudo firewall-cmd --permanent --zone=hardened --set-target=DROP

# Allow only essential services
sudo firewall-cmd --permanent --zone=hardened --add-service=ssh
sudo firewall-cmd --permanent --zone=hardened --add-service=http
sudo firewall-cmd --permanent --zone=hardened --add-service=https

# Implement strict SSH access control
sudo firewall-cmd --permanent --zone=hardened --remove-service=ssh
sudo firewall-cmd --permanent --zone=hardened --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" service name="ssh" accept'
# Output: SSH only from specific public network

# Add fail2ban-style protection
sudo firewall-cmd --permanent --zone=hardened --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" service name="ssh" log prefix="SSH-Attempt: " level="warning" limit value="3/m" accept'
# Output: Logs and rate-limits SSH attempts

# Block known bad networks
sudo firewall-cmd --permanent --zone=hardened --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" drop'
sudo firewall-cmd --permanent --zone=hardened --add-rich-rule='rule family="ipv4" source address="203.0.113.0/29" drop'
# Output: Blocks example bad networks

# Enable connection tracking limits
sudo firewall-cmd --permanent --zone=hardened --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" service name="http" log prefix="HTTP-Flood: " level="warning" limit value="100/s" accept'
# Output: Rate limits and logs HTTP requests

# Add ICMP restrictions
sudo firewall-cmd --permanent --zone=hardened --add-icmp-block=echo-request
sudo firewall-cmd --permanent --zone=hardened --add-icmp-block=timestamp-request
# Output: Blocks ping and timestamp requests

# Set interface to hardened zone
sudo firewall-cmd --permanent --zone=hardened --add-interface=eth0

# Apply hardened configuration
sudo firewall-cmd --reload

# Create monitoring script
cat > /usr/local/bin/firewall-monitor.sh << 'EOF'
#!/bin/bash
echo "=== Firewall Status ==="
firewall-cmd --state
echo "=== Active Zones ==="
firewall-cmd --get-active-zones
echo "=== Recent Firewall Logs ==="
journalctl -u firewalld --since "1 hour ago" | tail -10
EOF

sudo chmod +x /usr/local/bin/firewall-monitor.sh
/usr/local/bin/firewall-monitor.sh
# Output: Shows comprehensive security status

๐Ÿšจ Fix Common Problems

Problem 1: Locked Out of System

Symptoms: Cannot connect via SSH after firewall changes

Solution:

# If you have physical/console access:
# 1. Access system console directly

# Check current firewall status
firewall-cmd --list-all

# Temporarily allow SSH from your IP
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="YOUR.IP.ADDRESS.HERE" service name="ssh" accept'
# Output: Temporarily allows SSH

# If that doesn't work, disable firewall temporarily
sudo systemctl stop firewalld
# Output: Disables firewall (use with caution!)

# Fix the configuration
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
sudo systemctl start firewalld
# Output: Adds SSH permanently and restarts firewall

# Prevention: Always test rules before making permanent
firewall-cmd --add-service=ssh  # Test first
firewall-cmd --permanent --add-service=ssh  # Make permanent
firewall-cmd --reload  # Apply changes

Problem 2: Service Not Accessible

Symptoms: Service running but not accessible from network

Solution:

# Check if service is running
systemctl status service-name
# Output: Shows service status

# Check which port service uses
sudo netstat -tlnp | grep service-name
sudo ss -tlnp | grep service-name
# Output: Shows listening ports

# Check current firewall rules
firewall-cmd --list-all
# Output: Shows allowed services and ports

# Add missing service or port
sudo firewall-cmd --permanent --add-service=service-name
# Or add specific port:
sudo firewall-cmd --permanent --add-port=PORT/tcp

# Apply changes
sudo firewall-cmd --reload

# Test connectivity
curl -v telnet://server-ip:port
nc -zv server-ip port
# Output: Tests if port is accessible

Problem 3: Complex Rules Not Working

Symptoms: Rich rules or custom configurations not functioning

Solution:

# Check rule syntax
sudo firewall-cmd --check-config
# Output: Validates firewall configuration

# Test rule temporarily first
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
# Output: Tests rule without making permanent

# Check firewall logs for rule matches
sudo journalctl -u firewalld | tail -20
# Output: Shows firewall service logs

# Enable debug logging
sudo firewall-cmd --set-log-denied=all
# Output: Logs all denied packets

# Check kernel messages for dropped packets
sudo dmesg | grep -i "dropped\|denied"
# Output: Shows kernel firewall messages

# Verify rule order (rules are processed in order)
firewall-cmd --zone=public --list-rich-rules
# Output: Shows rich rules in order

# Remove problematic rule and recreate
sudo firewall-cmd --permanent --remove-rich-rule='problematic rule'
sudo firewall-cmd --permanent --add-rich-rule='corrected rule'
sudo firewall-cmd --reload

๐Ÿ“‹ Simple Commands Summary

CommandPurposeExample
firewall-cmd --list-allShow current configfirewall-cmd --list-all
firewall-cmd --add-serviceAllow servicefirewall-cmd --permanent --add-service=http
firewall-cmd --add-portAllow portfirewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reloadApply changesfirewall-cmd --reload
firewall-cmd --get-zonesList zonesfirewall-cmd --get-zones
firewall-cmd --add-rich-ruleCustom rulefirewall-cmd --permanent --add-rich-rule='...'
systemctl status firewalldCheck firewallsystemctl status firewalld
firewall-cmd --stateFirewall statusfirewall-cmd --state

๐Ÿ’ก Tips for Success

Here are proven strategies to master firewall configuration! ๐ŸŒŸ

Best Practices

  • ๐ŸŽฏ Start Restrictive: Begin with minimal access and add only whatโ€™s needed
  • ๐Ÿ“ Document Rules: Keep records of why each rule exists
  • ๐Ÿงช Test First: Always test rules temporarily before making permanent
  • ๐Ÿ”„ Regular Reviews: Periodically audit and clean up firewall rules
  • ๐Ÿ“Š Monitor Logs: Watch firewall logs for unusual activity
  • ๐Ÿ›ก๏ธ Layer Security: Use firewall as part of comprehensive security strategy
  • ๐Ÿ’พ Backup Configs: Save firewall configurations before major changes
  • โšก Performance Impact: Monitor firewall performance on high-traffic systems

Security Guidelines

  • Never expose unnecessary services to the internet ๐ŸŒ
  • Use specific IP ranges instead of allowing all sources ๐ŸŽฏ
  • Implement rate limiting for public services ๐Ÿ“Š
  • Regularly update and patch firewall software ๐Ÿ”„
  • Monitor failed connection attempts for attack patterns ๐Ÿ”
  • Use VPN for administrative access when possible ๐Ÿ”’
  • Implement logging for security incident investigation ๐Ÿ“‹
  • Test firewall rules during maintenance windows ๐Ÿงช

๐Ÿ† What You Learned

Congratulations! Youโ€™ve mastered firewall configuration on AlmaLinux! ๐ŸŽ‰ Hereโ€™s what you can now do:

โœ… Basic Firewall Management: Start, stop, and configure firewalld service โœ… Service and Port Control: Allow and block specific services and ports โœ… Zone Management: Configure different security zones for network segments โœ… Advanced Rules: Create rich rules for complex access control โœ… Network Security: Implement comprehensive network protection strategies โœ… Troubleshooting: Diagnose and fix common firewall issues โœ… Security Hardening: Apply security best practices and hardening techniques โœ… Monitoring and Logging: Set up firewall monitoring and incident detection

๐ŸŽฏ Why This Matters

Mastering firewall configuration is essential for cybersecurity! ๐Ÿš€ With these skills, you can:

  • Prevent Cyber Attacks: Block malicious traffic before it reaches your services ๐Ÿ›ก๏ธ
  • Control Network Access: Implement precise access control policies ๐ŸŽฏ
  • Meet Compliance Requirements: Satisfy security audits and regulations ๐Ÿ“‹
  • Protect Sensitive Data: Keep confidential information secure from unauthorized access ๐Ÿ”’
  • Scale Security Operations: Manage firewalls efficiently across multiple systems ๐Ÿ“ˆ
  • Build Defense in Depth: Create layered security architectures ๐Ÿฐ

Firewall configuration is your digital fortress wall! Whether youโ€™re protecting a personal server or enterprise infrastructure, these skills are essential in todayโ€™s threat landscape. Remember, security is not a destination but a continuous journey of improvement and vigilance! โญ

Excellent work on mastering AlmaLinux firewall configuration! You now have the power to create secure, well-protected systems that defend against modern cyber threats! ๐Ÿ™Œ