我有一个riak集群,我只需要允许某些IP地址访问信息。 我目前正在使用-A INPUT -s 192.168.10.200 -j ACCEPT来允许这个IP地址,并且在我的规则底部我有-A INPUT -j REJECT和-A FORWARD -j REJECT ,拒绝其他stream量。 任何人都可以build议我去哪里错了? 谢谢!
完整的规则:
-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
使用以下方法允许传入stream量是不够的: -A INPUT -s 192.168.10.200 ,或者使用: -A INPUT -s 192.168.10.200转发stream量。 您错过了相关的stream量。 你需要添加:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
INPUT应该用于发往防火墙本身的stream量。 FORWARD应该用于发往其他机器的stream量。 此外,请确保在这种情况下启用IP转发。
Netfilter有5个主链。 你现在可以忽略PREROUTING和POSTROUTING,所以你需要操作的3是INPUT,FORWARD和OUTPUT。
INPUT和OUTPUT控制指向系统本身的stream量,而FORWARD则控制通过的stream量并被导向另一台机器(网关的情况)。
在你的情况下,如果你想允许外部用户连接到系统本身,你需要以下一组规则:
# 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
好的,我已经阅读完整的规则。
首先一件重要的事情:请不要把 -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 -m state --state NEW ?
重要提示:在应用上述之前,不要忘记首先刷新整个iptables规则。