是否可以使用 IPTABLES 通过 NAME (例如 ssh)或仅通过 PORT 来接受服务?

是否可以使用 IPTABLES 通过 NAME (例如 ssh)或仅通过 PORT 来接受服务?

我的网络中有一台本地机器,并且192.168.0.30我在我的文件中进行了设置。sshport 12121sshd_config

我做了以下更改iptables

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 12121 -j ACCEPT

/sbin/iptables -P INPUT DROP

所以我的机器现在只接受输入port 12121,这有效,我可以通过 ssh 进入它

在这台机器上,我运行一个autossh scriptservice以便remote port forwarding从外部获取访问权限。

我的脚本中的命令:

/usr/bin/autossh -f -NT -o "ExitOnForwardFailure=yes" -R 20000:localhost:12121 \
-l [REMOTE-USER] [REMOTE-IP] -p 11111 -i [REMOTE-KEY]

当我尝试连接时,它不起作用,正常情况下我只12121在 iptables 中接受

因此我将这个添加到我的 iptables 中:

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 20000 -j ACCEPT

即使我不需要这个,因为它是来自远程机器的输入端口:

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 11111 -j ACCEPT

本地 ssh 可以工作,远程 ssh 则不行。

当我使用以下命令检查我的服务时:

systemctl status mysshservice

我看到了全部exited status codes,以及restart来自服务的,我看到了我的autossh命令和我的选项,但我确实看到第二行-L选择了不同的端口,autossh就像48328我这样做一样。

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 48328 -j ACCEPT

现在我可以再次从外部进行 ssh 了。

我现在有 2 个问题iptables

是否可以通过名称接受服务,而无需给定端口 ACCEPT ALL SSH CONNECTIONS?因此只有 ssh 可以工作,而无需满足我的ACCEPT每一个PORT需要。

我的问题是远程端口每天都会变化,所以我必须生成新的ACCEPT RULES every day

当我使用 autossh 时do i need a script to grep/awk/sed-R and -L ports every day或者还有其他解决方案吗?

答案1

您可以使用来自的服务名称/etc/services,但在内部iptables使用port numbers,只能从此文件翻译,因为tcp/udp协议头使用数字而不是字符串作为端口。

此外,没有为所有端口号命名,因为服务名称只是惯例http://www.iana.org/assignments/port-numbers

并且service name每次只能固定到一个端口号。

它并没有按照你想要的方式工作。

相关内容