Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a few ip ranges to which I want my server to able to connect and users to connect from. Everything else should be blocked.

How should I do that with iptables?

My OS is Debian based linux distribution.

share|improve this question

I'd suggest grabbing a firewall configuration tool, such a Firestarter, and going from there. Here are some basics for you, though.

#Flush existing rules
iptables -F
# Set up default DROP rule for eth0
iptables -P INPUT DROP
# Allow existing connections to continue
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accept everything from the 192.168.1.x network
iptables -A INPUT -i eth0 -s -j ACCEPT
# Allow connections from this host to
iptables -A OUTPUT -o eth0 -d -j ACCEPT
share|improve this answer
You know you can format your code in serverfault posts, using the 101010 button. That way your comments won't come out as shouting. Just select (drag your mouse over) the code and then click the 101010 button above the text field. – Jason Tan Jun 23 '09 at 16:22
Ahhh thank you, I didn't realize that. Now I know :) – Zenham Jun 24 '09 at 15:45
+1 for EXISTING,RELATED - too many people don't do this. – Alnitak Jun 24 '09 at 15:49
+1, how do you indicate allowed port as well? Is that the part that has "iptables -A INPUT -i eth0 -s -j ACCEPT" the /24? Thanks! – Jason Sebring Apr 1 '14 at 15:52
I think the /24 is the network mask – just a random guy yesterday
iptables -I INPUT -s <allowed_ip> -j ACCEPT #(repeat this line as needed)
iptables -P INPUT DROP

This will turn your system into a non-existent system for non-allowed computers.

share|improve this answer

If you want to allow arbitrary ranges rather than entire subnets, you can use the 'iprange' iptables module:

iptables -P INPUT DROP

iptables -A INPUT -m iprange --src-range -j ACCEPT

for example, will allow traffic coming from all machines with addressess between and

If you want to allow incoming and outgoing traffic to the same range of IP's, I'd suggest that you create a specific chain allowing that IPs and targeting all the input and output target to it:

--define the default policies to drop everithing:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

--create the new chain:

iptables -N allowed_ips

--if the source is part of the allowed range, accept

iptables -A allowed_ips -m iprange --src-range -j ACCEPT

--if not, return to the caller chain to continue processing

iptables -A allowed_ips -j RETURN

--make all traffic entering and leaving the machine go through our new chain

iptables -A INPUT -j allowed_ips

iptables -A OUTPUT -j allowed_ips

and that's it! of course you may need aditional rules, such as one allowing all traffic from/to the lo interface, etc.

share|improve this answer

Once you are happy with your rules, you probably want to save them. The comments in this link have several options on how to do that.

An easy to use iptables rules generator for simple needs is ufw. The package is available in debian unstable.

Also try Firestarter. Available in lenny.

share|improve this answer

You may also use ferm which i also use for the past year and has helped me a lot with cases such as conditional firewall rules.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.