How to Block an IP in Linux: A Simple Guide

by Praveen Diwakar

Blocking an IP address in Linux is an essential task for network security. Whether you are dealing with malicious traffic, preventing unauthorized access, or securing your system from brute force attacks, knowing how to block an IP address can help maintain your server’s integrity.

In this blog post, we’ll walk you through the steps on how to block an IP in Linux using various methods. We’ll cover different tools and approaches such as iptables, ufw, and firewalld that can help you achieve this task.


Why Block an IP in Linux?

Blocking an IP address on your Linux system can be useful for several reasons:

  1. Security Threat Prevention: Block malicious IPs that are trying to exploit vulnerabilities on your server.
  2. Mitigating Brute Force Attacks: When bots attempt to break into your server via SSH or other services, blocking their IP addresses will stop further attempts.
  3. Preventing Unwanted Traffic: Block traffic from unwanted sources, such as a competitor or a network that consumes your server’s resources.
  4. Protecting from DDoS Attacks: During Distributed Denial-of-Service (DDoS) attacks, blocking certain malicious IPs helps reduce the load on your server.

Methods to Block an IP in Linux

There are various ways to block an IP address in Linux, depending on the firewall or configuration tool you use. Let’s look at the most popular methods.


Method 1: Blocking an IP Using iptables

iptables is a powerful tool used to manage Linux firewall rules. It is versatile and allows administrators to block incoming or outgoing traffic from specific IP addresses.

1.1 Block a Specific IP

To block an IP address (e.g., 192.168.1.100) from accessing your server, run the following command:

sudo iptables -A INPUT -s 192.168.1.100 -j DROP
  • Explanation:
    • -A INPUT: Adds the rule to the INPUT chain (handles incoming traffic).
    • -s 192.168.1.100: Specifies the IP address to block.
    • -j DROP: Drops the packets coming from this IP address.

This will immediately block the IP address from accessing your server.

1.2 Block an IP from Specific Ports

If you want to block the IP address from accessing a specific port (for example, port 22 for SSH), you can use:

sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j DROP

This will block the IP from making SSH connections to your server.

1.3 Save the iptables Rules

To make sure the IP block persists after a system reboot, save your iptables rules.

On Debian/Ubuntu:

sudo iptables-save > /etc/iptables/rules.v4

On Red Hat/CentOS:

sudo service iptables save

1.4 Remove the Blocked IP

If you need to unblock the IP, simply delete the rule with:

sudo iptables -D INPUT -s 192.168.1.100 -j DROP

Method 2: Blocking an IP Using ufw (Uncomplicated Firewall)

ufw is an easier way to manage firewall rules on Debian-based systems like Ubuntu. It is user-friendly and works as a front-end to iptables.

2.1 Enable ufw

If ufw is not enabled on your system, enable it by running:

sudo ufw enable

2.2 Block an IP Address

To block an IP address, run:

sudo ufw deny from 192.168.1.100

This command blocks the IP 192.168.1.100 from accessing your server.

2.3 Check the ufw Status

To check the status and confirm if the IP block is in place, use:

sudo ufw status

2.4 Remove the Blocked IP

If you need to unblock the IP, simply run:

sudo ufw delete deny from 192.168.1.100

Method 3: Blocking an IP Using firewalld

firewalld is another firewall management tool used primarily in Red Hat-based distributions like CentOS, Fedora, and RHEL.

3.1 Block an IP Address

To block an IP using firewalld, run the following command:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'

3.2 Make the Block Permanent

To make the block permanent (i.e., persistent after a reboot), use the --permanent flag:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop' --permanent

Then, reload the firewall to apply the changes:

sudo firewall-cmd --reload

3.3 Remove the Blocked IP

If you wish to remove the block, use:

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" drop' --permanent

Method 4: Using /etc/hosts.deny

On Linux systems that support TCP Wrappers, you can block IP addresses for specific services like SSH, FTP, and more.

4.1 Edit /etc/hosts.deny

Open the /etc/hosts.deny file with a text editor:

sudo nano /etc/hosts.deny

4.2 Block the IP

Add the following line to block a specific IP (e.g., 192.168.1.100):

ALL: 192.168.1.100

This blocks the IP from accessing all services that use TCP Wrappers.

4.3 Save and Exit

Save the file (Ctrl + O) and exit (Ctrl + X).


Method 5: Blocking an IP with iptables for Specific Services

If you only want to block specific services or ports from an IP address, you can tailor your iptables rules accordingly. For example, to block an IP from accessing HTTP (port 80) and HTTPS (port 443), use:

sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.100 -j DROP
sudo iptables -A INPUT -p tcp --dport 443 -s 192.168.1.100 -j DROP

This blocks the IP from accessing the web server (HTTP/HTTPS).


Conclusion

Blocking an IP address on a Linux system is an essential part of managing your server’s security. Whether you’re using iptables, ufw, firewalld, or TCP Wrappers, Linux provides multiple ways to block an IP based on your server configuration and firewall preference.

Here’s a quick summary of the methods:

  • iptables: Offers full control over firewall rules and is suitable for advanced configurations.
  • ufw: An easier method for managing firewall rules on Ubuntu and Debian systems.
  • firewalld: A dynamic firewall manager for Red Hat-based systems.
  • /etc/hosts.deny: Blocks access to specific services using TCP Wrappers.

Whichever method you choose, be sure to test your configuration after blocking the IP to ensure that you haven’t unintentionally blocked legitimate traffic.


Related Posts

Leave a Comment