使用iptables将白名单允许的IP(输入/输出)


21

我有一些IP范围,我希望服务器可以连接到该IP范围,并且用户可以从中连接。其他所有内容都应被阻止。

我应该如何用iptables做到这一点?

我的操作系统是基于Debian的Linux发行版。

Answers:


27

我建议抓住一个防火墙配置工具,例如Firestarter,然后从那里开始。不过,这里有一些基础知识。

#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 192.168.1.0/24 -j ACCEPT
# Allow connections from this host to 192.168.2.10
iptables -A OUTPUT -o eth0 -d 192.168.2.10 -j ACCEPT

3
您知道可以使用101010按钮在serverfault帖子中设置代码格式。这样,您的评论就不会大声疾呼。只需选择代码(将鼠标悬停在上面),然后单击文本字段上方的101010按钮。
詹森(Jason Tan)

2
谢谢,我没有意识到。现在我知道了:)
Zenham 2009年

1
与现有的+1相关-太多人不这样做。
阿尼塔克

1
为了爱上帝,请设置默认的DROP规则LAST!我按照以下操作顺序将自己(以及其他所有东西)锁定在机器之外。
本多

1
糟糕的答案。OP对于删除所有当前连接一无所知。现在我被锁定了,因为我认为最佳答案是合理的。
略过

14
iptables -I INPUT -s <allowed_ip> -j ACCEPT #(repeat this line as needed)
iptables -P INPUT DROP

这会将您的系统变成不允许的计算机使用的不存在的系统。


7

如果要允许任意范围而不是整个子网,则可以使用“ iprange” iptables模块:

iptables -P INPUT DROP

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

例如,将允许来自所有地址在192.168.1.30和192.168.1.50之间的计算机的流量。

如果要允许传入和传出流量到相同的IP范围,建议您创建一个特定的链,以允许该IP并将所有输入和输出目标定位到该IP:

-定义默认策略以删除:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

-创建新链:

iptables -N allowed_ips

-如果来源是允许范围的一部分,请接受

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

-如果没有,返回到调用者链以继续处理

iptables -A allowed_ips -j RETURN

-使进入和离开机器的所有流量都经过我们的新链条

iptables -A INPUT -j allowed_ips

iptables -A OUTPUT -j allowed_ips

就是这样!当然,您可能需要其他规则,例如允许从/到lo接口的所有流量的规则等。


1

一旦您对自己的规则感到满意, 您可能想要保存它们。该链接中的注释提供了有关如何执行此操作的多个选项。

满足简单需求的易于使用的iptables规则生成器是ufw。该软件包在debian不稳定版本中可用。

也可以尝试Firestarter。可用莱尼。


0

您可能还使用了ferm,我在过去一年中也使用了ferm,并且在条件防火墙规则等情况下对我有很大帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.