Ubuntu iptables 允许某些 IP 地址

Ubuntu iptables 允许某些 IP 地址

我有一个 riak 集群,我需要仅允许某些 IP 地址访问信息。我目前使用 来-A INPUT -s 192.168.10.200 -j ACCEPT允许此 IP 地址,并在我的规则底部使用-A INPUT -j REJECT-A FORWARD -j REJECT来拒绝其他流量。有人能告诉我哪里做错了吗?谢谢!

完整规则:

-A INPUT -s 192.168.1.181 -j ACCEPT
-I INPUT -p tcp --dport 8098 -j ACCEPT
-I INPUT -p tcp --dport 8099 -j ACCEPT
-I INPUT -p tcp --dport 4369 -j ACCEPT
-I INPUT -p tcp --dport 5678:5679 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT -A FORWARD -j REJECT

答案1

Netfilter 有 5 个主要链。您现在可以忽略 PREROUTING 和 POSTROUTING,因此您需要操作的 3 个是 INPUT、FORWARD 和 OUTPUT。

INPUT 和 OUTPUT 控制导向系统本身的流量,而 FORWARD 控制导向经过并定向到另一台机器(网关的情况)。

就您而言,如果您想允许外部用户连接到系统本身,则需要以下一组规则:

# Rule 1: accept packets from established connections to enter and leave the system
iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -m state --state ESTABLISHED -j ACCEPT

# Rule 2: accept new connections entering the system
iptables -A INPUT -i eth0 -p tcp -s 192.168.10.200 -m state --state NEW -j ACCEPT 



# Rule 3: block all connections entering and leaving the system (if not previously accepted)
iptables -A INPUT -i eth0 -j DROP

# note: only use the filtering on output if you want to control outgoing connection
# if you want to let all connections leave your system, just comment this out
iptables -A OUTPUT -o eth0 -j DROP 

规则 1 和 3 是通用的,规则 2 是特定于连接的。只需使用该示例并在需要新连接时添加新的规则 2。

如果你想要更可靠的东西,看看这个:http://1nw.eu/!MJ

答案2

仅使用以下方式允许传入流量:-A INPUT -s 192.168.10.200或使用以下方式允许转发流量:是不够的-A INPUT -s 192.168.10.200。您缺少相关流量。您需要添加:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

INPUT应用于发往防火墙本身的流量。FORWARD应用于发往其他机器的流量。 此外,请确保在这种情况下启用 IP 转发。

答案3

好的,我已阅读您的完整规则。

首先要说的是:混合 -A 与 -I。

  • -A 附加规则到链条末端
  • -I 插入规则放入链中(如果没有指定位置,则插入到第一名

因此,你的 iptables 规则实际上是:

-A INPUT -p tcp --dport 5678:5679 -j ACCEPT
-A INPUT -p tcp --dport 4369 -j ACCEPT
-A INPUT -p tcp --dport 8099 -j ACCEPT
-A INPUT -p tcp --dport 8098 -j ACCEPT
-A INPUT -s 192.168.1.181 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT

如您所见,INPUT 规则 #1 至 #4才不是限制任何源地址。

现在,如果您确实想将这些端口的访问限制为 192.168.1.181,则必须这样做:

# Established connections should just pass
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Loopbacks will not match 192.168.1.181, so we ACCEPT them here
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Other than 192.168.1.181, we reject
-A INPUT -s 192.168.1.181 -j in_allow
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
# Allow only the following ports
-A in_allow -p tcp --dport 5678:5679 -j ACCEPT
-A in_allow -p tcp --dport 4369 -j ACCEPT
-A in_allow -p tcp --dport 8099 -j ACCEPT
-A in_allow -p tcp --dport 8098 -j ACCEPT
-A in_allow -p tcp -m state --state NEW --dport 2500 -j ACCEPT
-A in_allow -p icmp -m icmp --icmp-type 8 -j ACCEPT
#
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT

只有一个问题:-m state --state NEW为什么--dport 2500

重要的提示:在应用上述操作之前,不要忘记先 FLUSH 和 ERASE 整个 iptables 规则。

相关内容