我遇到了以下有关如何在 VPN 连接突然终止时使用 iptables 阻止互联网访问的示例:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT #allow loopback access
iptables -A OUTPUT -d 255.255.255.255 -j ACCEPT #make sure you can communicate with any DHCP server
iptables -A INPUT -s 255.255.255.255 -j ACCEPT #make sure you can communicate with any DHCP server
iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT #make sure that you can communicate within your own network
iptables -A OUTPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -i eth+ -o tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth+ -j ACCEPT # make sure that eth+ and tun+ can communicate
iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE # in the POSTROUTING chain of the NAT table, map the tun+ interface outgoing packet IP address, cease examining rules and let the header be modified, so that we don't have to worry about ports or any other issue - please check this rule with care if you have already a NAT table in your chain
iptables -A OUTPUT -o eth+ ! -d a.b.c.d -j DROP # if destination for outgoing packet on eth+ is NOT a.b.c.d, drop the packet, so that nothing leaks if VPN disconnects
我已经安装了 iptables-persistence,想知道如何使用上述内容与 iptables 协同工作。
任何帮助将非常感激。
PS:我对 IT 知识了解不多,对 Ubuntu 了解更少。有人能向我解释一下如何获取值 192.168.0.0/16 吗?
答案1
这称为 CIDR 表示法,请参阅:http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing
192.168.0.0/16 表示从 192.168.0.0 到 192.168.255.255 的所有地址,也就是私网 IP 范围内的所有地址。如果填 192.168.0.0/24,则只有 192.168.0.0 到 192.168.0.255 之间的地址。
/ 后面的数字对应于地址中的固定位数,每个数字有 8 位(2^8=256),或八位字节,因此每个地址有 32 位。其余 32 位对应于属于范围的位数。
对于 192.168.0.0/24, 表示24
此地址的前 24 位是固定的。这对应于前三个八位字节(每个八位字节 8 位),即192.168.0
。而 32-24=8,因此只有最后一个八位字节属于范围。这给出了 8 位范围,即 0-255。
在原始问题 192.168.0.0/16 中,这16
意味着地址的前 16 位是固定的,即192.168
(2 个八位字节,每个 8 位,8+8=16)。32-16=16 位,因此最后两个八位字节是范围。这给出了 16 位的范围,即 0-255 的两个八位字节(每个 8 位)。