Disable incoming requests on Public IP

July 6, 2014 2.3k views

Hi guys,

Set up a droplet having the private networking option enabled. My aim is to:
1) Keep internet available on the droplet (so killing eth0 interface is not an option).
2) Block all incoming traffic from the internet.
3) Communicate with the droplet using the private IP (from another droplet).

I tried both these iptables (flipped order between two options), to absolutely no avail:

:INPUT ACCEPT [3:180]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [255:30170]
-A FORWARD -i eth0 -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT

and

:INPUT ACCEPT [3:180]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [255:30170]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -j DROP
COMMIT

Testing the changes this way:
Go on another droplet, and ssh using both of these:
ssh username@targetpublicip
and
ssh username@targetprivateip

In both cases, both keep working fine.

When I tried just this in the iptables:
iptables -I INPUT -i eth0 -j DROP

I couldn't SSH using the private IP either.

I'm using the ams2 datacentre for both droplets.

Thanks and regards

1 Answer

First clear the existing iptables rules by running these commands

iptables -F
iptables -X

After you clean you can view the rules with

iptables -L

Then run in terminal the following rules

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
allow loopback device, some software requires it
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
allow ssh connection
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
replace x.x.x.x with the droplet ip you want to allow connections with, this is for ipv4
iptables -A INPUT -s x.x.x.x -j ACCEPT
iptables -A OUTPUT -d x.x.x.x -j ACCEPT

Note: Save the iptables rules before restarting your droplet so they don't get lost

Have another answer? Share your knowledge.