我有一个大型的 OpenVPN 网络。大多数地址可以自由访问其他地址。但是,一些 IP 需要限制为仅与几个其他 IP 通信。
例如,10.8.0.6 只能允许与 10.8.0.10 通信。但 10.8.0.10 和子网中的所有其他地址可以不受限制地相互通信。以下 iptables 代码可以实现这一点吗?
# allow communication between 10.8.0.6 and 10.8.0.10, deny any additional
# access to 10.8.0.6
iptables -A FORWARD -s 10.180.0.6 -d 10.8.0.10 -j ACCEPT
iptables -A FORWARD -s 10.180.0.10 -d 10.8.0.6 -j ACCEPT
iptables -A FORWARD -s 10.180.0.6 -j DROP
# Begin required lines for server operation
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/16 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE
/etc/init.d/dnsmasq restart
# End required lines for server operation
谢谢
您说得对,应该是 10.8.xx,但是它仍然不起作用。我试图限制的地址仍然可以访问所有服务器。这是我当前的 rc.local
# Begin access restriction lines
# eg. allow communication between 10.8.0.122 and 10.8.0.58, deny any additional$
# client access only to certain systems
iptables -A FORWARD -s 10.8.0.122 -d 10.8.0.58 -j ACCEPT
iptables -A FORWARD -s 10.8.0.122 -d 10.8.0.66 -j ACCEPT
iptables -A FORWARD -s 10.8.0.122 -d 10.8.0.70 -j ACCEPT
iptables -A FORWARD -s 10.8.0.122 -d 10.8.0.62 -j ACCEPT
iptables -A FORWARD -s 10.8.0.122 -j DROP
# client access only to certain systems
iptables -A FORWARD -s 10.8.0.126 -d 10.8.0.58 -j ACCEPT
iptables -A FORWARD -s 10.8.0.126 -d 10.8.0.66 -j ACCEPT
iptables -A FORWARD -s 10.8.0.126 -d 10.8.0.70 -j ACCEPT
iptables -A FORWARD -s 10.8.0.126 -d 10.8.0.62 -j ACCEPT
iptables -A FORWARD -s 10.8.0.126 -j DROP
# End access restriction lines
# Begin required lines for server operation
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/16 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE
/etc/init.d/dnsmasq restart
# End required lines for server operation
exit 0
谢谢
更新:
iptables -L -v -n 的输出
root@li590-32:~# iptables -L -n -v
Chain INPUT (policy ACCEPT 2455K packets, 430M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4597K 2770M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
32180 1813K ACCEPT all -- * * 10.8.0.0/16 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- * * 10.8.0.0/16 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- * * 10.8.0.0/16 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 ACCEPT all -- * * 10.8.0.122 10.8.0.58
0 0 ACCEPT all -- * * 10.8.0.122 10.8.0.66
0 0 ACCEPT all -- * * 10.8.0.122 10.8.0.70
0 0 ACCEPT all -- * * 10.8.0.122 10.8.0.62
0 0 DROP all -- * * 10.8.0.122 0.0.0.0/0
0 0 ACCEPT all -- * * 10.8.0.126 10.8.0.58
0 0 ACCEPT all -- * * 10.8.0.126 10.8.0.66
0 0 ACCEPT all -- * * 10.8.0.126 10.8.0.70
0 0 ACCEPT all -- * * 10.8.0.126 10.8.0.62
0 0 DROP all -- * * 10.8.0.126 0.0.0.0/0
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- * * 10.8.0.0/16 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 3144K packets, 2737M bytes)
pkts bytes target prot opt in out source destination
答案1
前三行指的是 10.180.xx,但我认为您的意思是 10.8.xx?
如果是这样,那这一行iptables -A FORWARD -s 10.180.0.10 -d 10.8.0.6 -j ACCEPT
就没有必要了。
除此之外看起来不错。
答案2
iptables
以先决匹配获胜为基础,因此您发布的完整规则集使问题变得清晰:前两行之后设置的任何限制都不会看到任何流量,因为第一条和第二条规则匹配 - 并允许 - 您稍后尝试匹配和拒绝的所有流量。
任何一个你需要找出前两行的位置,并确保所有附加行都移到它们之前,或者您需要iptables -I FORWARD 1
在上面的脚本中使用前两行插入所有新行,以便在开始FORWARD
而不是将其添加到链的末尾。
前一种方法更受欢迎,因为它更容易维护;但你没有说你正在使用什么发行版,所以我无法说出规则是在哪里设置的。
无论哪种方式,您都需要确保在最终的链中,高度具体的规则位于任何与相同流量匹配(并因此允许)的DROP
不太具体的规则之前。ACCEPT