IPTABLES
Iptables is an extremely flexible firewall utility built for Linux operating systems. Whether you’re a novice Linux geek or a system administrator, there’s probably some way that iptables can be a great use to you. Read on as we show you how to configure the most versatile Linux firewall.
About iptables
iptables is a command-line firewall utility that uses policy chains to allow or block traffic. When a connection tries to establish itself on your system, iptables looks for a rule in its list to match it to. If it doesn’t find one, it resorts to the default action.
iptables almost always comes pre-installed on any Linux distribution. To update/install it, just retrieve the iptables package:
sudo apt-get install iptables
There are GUI alternatives to iptables like Firestarter, but iptables isn’t really that hard once you have a few commands down. You want to be extremely careful when configuring iptables rules, particularly if you’re SSH’d into a server, because one wrong command can permanently lock you out until it’s manually fixed at the physical machine.
sudo apt-get install iptables
Types of Chains
iptables uses three different chains: input, forward, and output.
Input – This chain is used to control the behavior for incoming connections. For example, if a user attempts to SSH into your PC/server, iptables will attempt to match the IP address and port to a rule in the input chain.
Forward – This chain is used for incoming connections that aren’t actually being delivered locally. Think of a router – data is always being sent to it but rarely actually destined for the router itself; the data is just forwarded to its target. Unless you’re doing some kind of routing, NATing, or something else on your system that requires forwarding, you won’t even use this chain.
There’s one sure-fire way to check whether or not your system uses/needs the forward chain.
iptables -L -v
The screenshot above is of a server that’s been running for a few weeks and has no restrictions on incoming or outgoing connections. As you can see, the input chain has processed 11GB of packets and the output chain has processed 17GB. The forward chain, on the other hand, has not needed to process a single packet. This is because the server isn’t doing any kind of forwarding or being used as a pass-through device.
Output – This chain is used for outgoing connections. For example, if you try to ping howtogeek.com, iptables will check its output chain to see what the rules are regarding ping and howtogeek.com before making a decision to allow or deny the connection attempt.
The caveat
Even though pinging an external host seems like something that would only need to traverse the output chain, keep in mind that to return the data, the input chain will be used as well. When using iptables to lock down your system, remember that a lot of protocols will require two-way communication, so both the input and output chains will need to be configured properly. SSH is a common protocol that people forget to allow on both chains.
iptables -L -v
Policy Chain Default Behavior
Before going in and configuring specific rules, you’ll want to decide what you want the default behavior of the three chains to be. In other words, what do you want iptables to do if the connection doesn’t match any existing rules?
To see what your policy chains are currently configured to do with unmatched traffic, run the iptables -L
command.
As you can see, we also used the grep command to give us cleaner output. In that screenshot, our chains are currently figured to accept traffic.
More times than not, you’ll want your system to accept connections by default. Unless you’ve changed the policy chain rules previously, this setting should already be configured. Either way, here’s the command to accept connections by default:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
By defaulting to the accept rule, you can then use iptables to deny specific IP addresses or port numbers, while continuing to accept all other connections. We’ll get to those commands in a minute.
If you would rather deny all connections and manually specify which ones you want to allow to connect, you should change the default policy of your chains to drop. Doing this would probably only be useful for servers that contain sensitive information and only ever have the same IP addresses connect to them.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
iptables -L
command.iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Connection-specific Responses
With your default chain policies configured, you can start adding rules to iptables so it knows what to do when it encounters a connection from or to a particular IP address or port. In this guide, we’re going to go over the three most basic and commonly used “responses”.
Accept – Allow the connection.
Drop – Drop the connection, act like it never happened. This is best if you don’t want the source to realize your system exists.
Reject – Don’t allow the connection, but send back an error. This is best if you don’t want a particular source to connect to your system, but you want them to know that your firewall blocked them.
The best way to show the difference between these three rules is to show what it looks like when a PC tries to ping a Linux machine with iptables configured for each one of these settings.
Allowing the connection:
Dropping the connection:
Rejecting the connection:
Allowing or Blocking Specific Connections
With your policy chains configured, you can now configure iptables to allow or block specific addresses, address ranges, and ports. In these examples, we’ll set the connections to DROP
, but you can switch them to ACCEPT
or REJECT
, depending on your needs and how you configured your policy chains.
Note: In these examples, we’re going to use iptables -A
to append rules to the existing chain. iptables starts at the top of its list and goes through each rule until it finds one that it matches. If you need to insert a rule above another, you can use iptables -I [chain] [number]
to specify the number it should be in the list.
Connections from a single IP address
This example shows how to block all connections from the IP address 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Connections from a range of IP addresses
This example shows how to block all of the IP addresses in the 10.10.10.0/24 network range. You can use a netmask or standard slash notation to specify the range of IP addresses.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
or
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Connections to a specific port
This example shows how to block SSH connections from 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
You can replace “ssh” with any protocol or port number. The -p tcp
part of the code tells iptables what kind of connection the protocol uses. If you were blocking a protocol that uses UDP rather than TCP, then -p udp
would be necessary instead.
This example shows how to block SSH connections from any IP address.
iptables -A INPUT -p tcp --dport ssh -j DROP
DROP
, but you can switch them to ACCEPT
or REJECT
, depending on your needs and how you configured your policy chains.iptables -A
to append rules to the existing chain. iptables starts at the top of its list and goes through each rule until it finds one that it matches. If you need to insert a rule above another, you can use iptables -I [chain] [number]
to specify the number it should be in the list.iptables -A INPUT -s 10.10.10.10 -j DROP
iptables -A INPUT -s 10.10.10.0/24 -j DROP
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
-p tcp
part of the code tells iptables what kind of connection the protocol uses. If you were blocking a protocol that uses UDP rather than TCP, then -p udp
would be necessary instead.iptables -A INPUT -p tcp --dport ssh -j DROP
Connection States
As we mentioned earlier, a lot of protocols are going to require two-way communication. For example, if you want to allow SSH connections to your system, the input and output chains are going to need a rule added to them. But, what if you only want SSH coming into your system to be allowed? Won’t adding a rule to the output chain also allow outgoing SSH attempts?
That’s where connection states come in, which give you the capability you’d need to allow two way communication but only allow one way connections to be established. Take a look at this example, where SSH connections FROM 10.10.10.10 are permitted, but SSH connections TO 10.10.10.10 are not. However, the system is permitted to send back information over SSH as long as the session has already been established, which makes SSH communication possible between these two hosts.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Saving Changes
The changes that you make to your iptables rules will be scrapped the next time that the iptables service gets restarted unless you execute a command to save the changes. This command can differ depending on your distribution:
Ubuntu:
sudo /sbin/iptables-save
Red Hat / CentOS:
/sbin/service iptables save
Or
/etc/init.d/iptables save
sudo /sbin/iptables-save
/sbin/service iptables save
/etc/init.d/iptables save
Other Commands
List the currently configured iptables rules:
iptables -L
Adding the -v
option will give you packet and byte information, and adding -n
will list everything numerically. In other words – hostnames, protocols, and networks are listed as numbers.
To clear all the currently configured rules, you can issue the flush command.
iptables -F
iptables -L
-v
option will give you packet and byte information, and adding -n
will list everything numerically. In other words – hostnames, protocols, and networks are listed as numbers.iptables -F
Courtesy:https://www.howtogeek.com/177621/the-beginners-guide-to-iptables-the-linux-firewall/
Iptables Essentials: Common Firewall Rules and Commands
Introduction
Iptables
is the software firewall that is included with most Linux distributions
by default. This cheat sheet-style guide provides a quick reference to
iptables commands that will create firewall rules are useful in common,
everyday scenarios. This includes iptables examples of allowing and
blocking various services by port, network interface, and source IP
address.
How To Use This Guide
- If you are just getting started with configuring your iptables firewall, check out our introduction to iptables
- Most of the rules that are described here assume that your iptables is set to DROP incoming traffic, through the default input policy, and you want to selectively allow traffic in
- Use whichever subsequent sections are applicable to what you are trying to achieve. Most sections are not predicated on any other, so you can use the examples below independently
- Use the Contents menu on the right side of this page (at wide page widths) or your browser's find function to locate the sections you need
- Copy and paste the command-line examples given, substituting the values in red with your own values
Keep in mind that the order of your rules matter. All of these
iptables
commands use the -A
option to append the new rule to the end of a chain. If you want to put it somewhere else in the chain, you can use the -I
option
which allows you to specify the position of the new rule (or simply
place it at the beginning of the chain by not specifying a rule number).
Note: When
working with firewalls, take care not to lock yourself out of your own
server by blocking SSH traffic (port 22, by default). If you lose access
due to your firewall settings, you may need to connect to it via the console to
fix your access. Once you are connected via the console, you can change
your firewall rules to allow SSH access (or allow all traffic). If your
saved firewall rules allow SSH access, another method is to reboot your
server.
Remember that you can check your current iptables ruleset with
sudo iptables -S
and sudo iptables -L
.
Let's take a look at the iptables commands!
Saving Rules
Iptables rules are ephemeral, which means they need to be manually saved for them to persist after a reboot.
Ubuntu
On Ubuntu, the easiest way to save iptables rules, so they will survive a reboot, is to use the
iptables-persistent
package. Install it with apt-get like this:
- sudo apt-get install iptables-persistent
During the installation, you will asked if you want to save your current firewall rules.
If you update your firewall rules and want to save the changes, run this command:
- sudo netfilter-persistent save
On versions of Ubuntu prior to 16.04, run this command instead:
- sudo invoke-rc.d iptables-persistent save
CentOS 6 and Older
On CentOS 6 and older—CentOS 7 uses FirewallD by default—you can use the
iptables
init script to save your iptables rules:
- sudo service iptables save
This will save your current iptables rules to the
/etc/sysconfig/iptables
file.Listing and Deleting Rules
If you want to learn how to list and delete iptables rules, check out this tutorial: How To List and Delete Iptables Firewall Rules.
Generally Useful Rules
This section includes a variety of iptables commands that will create rules that are generally useful on most servers.
Allow Loopback Connections
The loopback interface, also referred to as
lo
, is what a computer uses to forward network connections to itself. For example, if you run ping localhost
or ping 127.0.0.1
,
your server will ping itself using the loopback. The loopback interface
is also used if you configure your application server to connect to a
database server with a "localhost" address. As such, you will want to be
sure that your firewall is allowing these connections.
To accept all traffic on your loopback interface, run these commands:
- sudo iptables -A INPUT -i lo -j ACCEPT
- sudo iptables -A OUTPUT -o lo -j ACCEPT
Allow Established and Related Incoming Connections
As
network traffic generally needs to be two-way—incoming and outgoing—to
work properly, it is typical to create a firewall rule that allows established and related incoming
traffic, so that the server will allow return traffic to outgoing
connections initiated by the server itself. This command will allow
that:
- sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
This may look incredibly complicated, but most of it will make sense when we go over the components:
- -A INPUT: The
-A
flag appends a rule to the end of a chain. This is the portion of the command that tells iptables that we wish to add a new rule, that we want that rule added to the end of the chain, and that the chain we want to operate on is the INPUT chain. - -m conntrack: iptables has a set of core functionality, but also has a set of extensions or modules that provide extra capabilities.
conntrack
module. This module gives access to commands that can be used to make
decisions based on the packet's relationship to previous connections.- --ctstate: This is one of the commands made available by calling the
conntrack
module. This command allows us to match packets based on how they are related to packets we've seen before.
ESTABLISHED
to allow packets that are part of an existing connection. We pass it the value of RELATED
to allow packets that are associated with an established connection.
This is the portion of the rule that matches our current SSH session.- -j ACCEPT: This specifies the target of matching packets. Here, we tell iptables that packets that match the preceding criteria should be accepted and allowed through.
Allow Established Outgoing Connections
You may want to allow outgoing traffic of all established connections, which are typically the response to legitimate incoming connections. This command will allow that:
- sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
Internal to External
Assuming
eth0
is your external network, and eth1
is your internal network, this will allow your internal to access the external:
- sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Drop Invalid Packets
Some network traffic packets get marked as invalid. Sometimes it can be useful to log this type of packet but often it is fine to drop them. Do so with this command:
- sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Block an IP Address
To block network connections that originate from a specific IP address,
15.15.15.51
for example, run this command:
- sudo iptables -A INPUT -s 15.15.15.51 -j DROP
In this example,
-s 15.15.15.51
specifies a source IP address of "15.15.15.51". The source IP address can be specified in any firewall rule, including an allow rule.
If you want to reject the
connection instead, which will respond to the connection request with a
"connection refused" error, replace "DROP" with "REJECT" like this:
- sudo iptables -A INPUT -s 15.15.15.51 -j REJECT
Block Connections to a Network Interface
To block connections from a specific IP address, e.g.
15.15.15.51
, to a specific network interface, e.g. eth0
, use this command:
- iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP
This is the same as the previous example, with the addition of
-i eth0
. The network interface can be specified in any firewall rule, and is a great way to limit the rule to a particular network.Service: SSH
If
you're using a cloud server, you will probably want to allow incoming
SSH connections (port 22) so you can connect to and manage your server.
This section covers how to configure your firewall with various
SSH-related rules.
Allow All Incoming SSH
To allow all incoming SSH connections run these commands:
- sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established SSH connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow Incoming SSH from Specific IP address or subnet
To
allow incoming SSH connections from a specific IP address or subnet,
specify the source. For example, if you want to allow the entire
15.15.15.0/24
subnet, run these commands:
- sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established SSH connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow Outgoing SSH
If your firewall
OUTPUT
policy is not set to ACCEPT
,
and you want to allow outgoing SSH connections—your server initiating
an SSH connection to another server—you can run these commands:
- sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Allow Incoming Rsync from Specific IP Address or Subnet
Rsync, which runs on port 873, can be used to transfer files from one computer to another.
To
allow incoming rsync connections from a specific IP address or subnet,
specify the source IP address and the destination port. For example, if
you want to allow the entire
15.15.15.0/24
subnet to be able to rsync to your server, run these commands:
- sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established rsync connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Service: Web Server
Web
servers, such as Apache and Nginx, typically listen for requests on
port 80 and 443 for HTTP and HTTPS connections, respectively. If your
default policy for incoming traffic is set to drop or deny, you will
want to create rules that will allow your server to respond to those
requests.
Allow All Incoming HTTP
To allow all incoming HTTP (port 80) connections run these commands:
- sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established HTTP connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow All Incoming HTTPS
To allow all incoming HTTPS (port 443) connections run these commands:
- sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established HTTP connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow All Incoming HTTP and HTTPS
If you want to allow both HTTP and HTTPS traffic, you can use the multiport module to create a rule that allows both ports. To allow all incoming HTTP and HTTPS (port 443) connections run these commands:
- sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established HTTP and HTTPS connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Service: MySQL
MySQL
listens for client connections on port 3306. If your MySQL database
server is being used by a client on a remote server, you need to be sure
to allow that traffic.
Allow MySQL from Specific IP Address or Subnet
To
allow incoming MySQL connections from a specific IP address or subnet,
specify the source. For example, if you want to allow the entire
15.15.15.0/24
subnet, run these commands:
- sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established MySQL connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow MySQL to Specific Network Interface
To allow MySQL connections to a specific network interface—say you have a private network interface
eth1
, for example—use these commands:
- sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established MySQL connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Service: PostgreSQL
PostgreSQL
listens for client connections on port 5432. If your PostgreSQL
database server is being used by a client on a remote server, you need
to be sure to allow that traffic.
PostgreSQL from Specific IP Address or Subnet
To
allow incoming PostgreSQL connections from a specific IP address or
subnet, specify the source. For example, if you want to allow the
entire
15.15.15.0/24
subnet, run these commands:
- sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established PostgreSQL connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow PostgreSQL to Specific Network Interface
To allow PostgreSQL connections to a specific network interface—say you have a private network interface
eth1
, for example—use these commands:
- sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established PostgreSQL connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Service: Mail
Mail
servers, such as Sendmail and Postfix, listen on a variety of ports
depending on the protocols being used for mail delivery. If you are
running a mail server, determine which protocols you are using and allow
the appropriate types of traffic. We will also show you how to create a
rule to block outgoing SMTP mail.
Block Outgoing SMTP Mail
If
your server shouldn't be sending outgoing mail, you may want to block
that kind of traffic. To block outgoing SMTP mail, which uses port 25,
run this command:
- sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT
This configures iptables to reject all
outgoing traffic on port 25. If you need to reject a different service
by its port number, instead of port 25, simply replace it.
Allow All Incoming SMTP
To allow your server to respond to SMTP connections, port 25, run these commands:
- sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established SMTP connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.
Note: It is common for SMTP servers to use port 587 for outbound mail.
Allow All Incoming IMAP
To allow your server to respond to IMAP connections, port 143, run these commands:
- sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established IMAP connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow All Incoming IMAPS
To allow your server to respond to IMAPS connections, port 993, run these commands:
- sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established IMAPS connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow All Incoming POP3
To allow your server to respond to POP3 connections, port 110, run these commands:
- sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established POP3 connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Allow All Incoming POP3S
To allow your server to respond to POP3S connections, port 995, run these commands:
- sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT
The second command, which allows the outgoing traffic of established POP3S connections, is only necessary if the
OUTPUT
policy is not set to ACCEPT
.Conclusion
That
should cover many of the commands that are commonly used when
configuring an iptables firewall. Of course, iptables is a very flexible
tool so feel free to mix and match the commands with different options
to match your specific needs if they aren't covered here.
Courtesy: https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands
Comments
Post a Comment