我有一个 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 规则。