我的网络中有一台本地机器,并且192.168.0.30
我在我的文件中进行了设置。ssh
port 12121
sshd_config
我做了以下更改iptables
:
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 12121 -j ACCEPT
/sbin/iptables -P INPUT DROP
所以我的机器现在只接受输入port 12121
,这有效,我可以通过 ssh 进入它
在这台机器上,我运行一个autossh script
,service
以便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
每次只能固定到一个端口号。
它并没有按照你想要的方式工作。