我正在尝试限制我的 Wireguard VPN 以仅允许客户端之间的 SSH 连接,并且我正在努力PostUp
为 wireguard 服务器设置适当的 iptables 规则。
我的界面有以下PostUp
规则:
PostUp = iptables -A FORWARD -i %i -p tcp --dport 22 -j ACCEPT; iptables -A FORWARD -o %i -p tcp --dport 22 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -p tcp --dport 22 -j ACCEPT; iptables -D FORWARD -o %i -p tcp --dport 22 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
由于某种原因,这允许访问所有端口。
我也尝试过将其用作iptables -A FORWARD -p tcp ! -dport 22 -j DROP
附加的第一条规则。但出于某种原因,我只能配置为阻止所有流量(包括 ssh)。
有什么办法可以让客户端只能访问端口 22?
答案1
我很想添加一个可能名为 wireguard 或其他名称的链,其中包含类似规则。这些规则将由 wireguard 之外的某些东西添加。
# create wireguard chain
iptables -t filter -N wireguard
# permit anything coming from or going to port 22
iptables -t filter -A wireguard -p tcp --dport 1024:65535 --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -A wireguard -p tcp --sport 1024:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
# drop everything else
iptables -t filter -A wireguard -j DROP
然后在你的 wireguard PostUp 中,只需添加这样的规则。
iptables -t filter -I FORWARD -i %i -j wireguard
iptables -t filter -I FORWARD -o %i -j wireguard