我想过滤往返于我计算机的所有流量。为此,我开发了一小段代码,python
它使用NetFilterQueue
( NFQueue
) 拦截数据包并选择是否必须丢弃这些数据包。非常简单。
我想在 NanoPi R2S 上运行此代码,这是一个带有 2 个以太网端口的 Linux 设备。一个端口将插入我的家用路由器,而第二个端口将连接到我的电脑。我不想更改我的电脑的 IP,因为它需要从我网络上的其他设备访问。
┌──────────────┐ ┌───────────────┐ ┌───────────────┐
│ │ │ │ │ │
│ Home router │◄──►│ 2 ethernets │◄──►│ My computer │
│ │eth0│ Gateway │eth1│ │
└──────────────┘ └───────────────┘ └───────────────┘
我想要做的是添加所需的iptables
规则来过滤所有数据包。
我已经应用了这些规则,但我不确定它们是否正确。计划是无缝转发所有数据包,就像网关不存在一样。
# Enable IP forwarding
echo '1' > /proc/sys/net/ipv4/ip_forward
echo '1' > /proc/sys/net/ipv6/conf/all/forwarding
# Add iptables rules
iptables -F # Delete all previous rules
iptables -X # Delete user-defined chains
iptables -F -t nat # Flush NAT table
iptables -X -t nat # Delete user-defined chains in NAT table
iptables -A INPUT -i lo -j ACCEPT # Allow loopback traffic
iptables -A OUTPUT -o lo -j ACCEPT # Allow loopback traffic
iptables -A INPUT -i eth0 -j NFQUEUE --queue-num 1 # Direct traffic to gateway device
iptables -A INPUT -i eth1 -j NFQUEUE --queue-num 1 # Direct traffic to gateway device
iptables -A OUTPUT -o eth0 -j NFQUEUE --queue-num 1 # Direct traffic from gateway device
iptables -A OUTPUT -o eth1 -j NFQUEUE --queue-num 1 # Direct traffic from gateway device
iptables -A FORWARD -i eth0 -o eth1 -j NFQUEUE --queue-num 1 # Traffic from left to right through gateway
iptables -A FORWARD -i eth1 -o eth0 -j NFQUEUE --queue-num 1 #Traffic from right to left through gateway
ip6tables -P INPUT DROP # Disallow all IPv6 traffic
ip6tables -P OUTPUT DROP # Disallow all IPv6 traffic
ip6tables -P FORWARD DROP # Disallow all IPv6 traffic
iptables-save > /etc/iptables/rules.v4 # Auto-reload on reboot
ip6tables-save > /etc/iptables/rules.v6 # Auto-reload on reboot
我不确定是否需要为家庭路由器设置新路由。也许是这样的:
ip route add default via <router_ip> dev eth0
您能否告诉我这种行为是否可行以及这些规则是否足以过滤我的整个流量?