我正在运行 Ubuntu 服务器版本 20.04。我已在 sshd_config 文件中将 ssh 服务器配置为侦听备用端口(端口 40001)。我想允许使用 TCP 端口 40001 从本地网络(192.168.1.0/24)上的任何位置传入流量,并阻止其他所有传入流量,尤其是广域网(互联网的其余部分)。我不想从本地网络之外通过 ssh 进入我的服务器。
编辑:我的设置如下...
- 主 ISP 路由器,具有公共 IP 地址,然后端口转发(80,443,40001)到
- 辅助路由器,然后端口转发(80,443,40001)到 Ubuntu 服务器。Ubuntu 服务器有一个 Wi-Fi 卡以及一个以太网适配器,但是,只使用 wifi。Ubunut 服务器不用作路由器,而只是用作 Web 服务器,使用端口 80,443 和 ssh 40001。
简而言之,这是我期望的规则:
允许本地网络 (192.168.1.0/24) 上的端口 40001/tcp。拒绝其他一切。
我想知道如何通过两种不同的方式从命令行执行此操作。
- 第一种方法是使用 UFW(简单防火墙)。
- 第二种方法是使用 iptables。
如果有人能帮忙回答这个问题,我将不胜感激!
答案1
我只能回答第二部分,即 iptables 方式:
您还没有向我们说明 WAN 源数据包如何首先到达您的服务器,而这些信息可能需要对此答案进行修改。此答案假设您的服务器只有一个 NIC,并且不充当路由器,这需要 2 个 NIC。
sudo iptables -A INPUT -i $EXTIF -m state --state NEW -p tcp -s 192.168.1.0/24 --dport 40001 -j ACCEPT
sudo iptables -A INPUT -i $EXTIF -m state --state NEW -p tcp -s 0.0.0.0/0 --dport 40001 -j DROP
这些规则假定在整个规则集中的某处存在一个前置的:
sudo iptables -A INPUT -i $EXTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
其中$EXTIF
用您的 NIC 名称替换。您实际上可以省略此应用程序的接口规范,但我没有测试过。