knockd 有什么问题?

knockd 有什么问题?

我正在尝试在我的个人服务器上为 ssh 服务实现端口敲击。我还有另外两个始终开放的公共服务。我的 iptables 规则如下所示:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source         destination         
 7229  545K ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:4352
0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:25565

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4 packets, 448 bytes)
 pkts bytes target     prot opt in     out     source               destination

我的 knockd.conf 文件位于 /etc/knockd.conf,如下所示:

[options]
 logfile = /var/log/knockd.log

[SSH]
sequence = 7000,8000,9000
seq_timeout = 15
tcpflags = syn
start_command = /sbin/iptables -D INPUT 1 -s %IP% -p tcp --dport ssh -j ACCEPT
cmd_timeout = 10
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

我还有文件 /etc/default/knockd

################################################
#
# knockd's default file, for generic sys config
#
################################################

# control if we start knockd at init or not
# 1 = start
# anything else = don't start
#
# PLEASE EDIT /etc/knockd.conf BEFORE ENABLING
START_KNOCKD=1

# command line options
#KNOCKD_OPTS="-i eth1"

跑步sudo /etc/init.d/knockd 重启运行正常。日志文件只是说 knockd 已启动。

在客户端,我运行敲入-v $地址 7000 8000 9000.输出内容为:

hitting tcp x.x.x.x:7000
hitting tcp x.x.x.x:8000
hitting tcp x.x.x.x:9000

但是,尝试连接没有结果,并且 iptables 规则没有改变。我做错了什么?

编辑

当然,我一发布这个问题,我的 ssh 终端就死机了,现在我被锁定在服务器之外两周,直到我真正能够访问它。慢慢来,我不可能很快就能用这些信息做任何事情。

答案1

我认为您发布的任何内容都没有问题,因此您可能需要进行故障排除(在验证ps -aux|grep knockd或跟踪服务器上的 knockd 日志后证明 knockd 正在运行):

  • 我会在 iptables 中输入一个命令,记录来自敲击 PC 的传入信息,然后对 /var/log/kern.log 文件使用 tail -f 来查看您选择的端口是否被允许端到端通过。请注意,您的系统可能不使用 /var/log/kern.log 文件,但我的系统使用该文件。

示例 - (使用 su 权限在 knockd 服务器上输入此内容,cxx.xxx.xxx.xxx 是客户端 knocker 的 IP 地址) iptables -w -I INPUT 1 -s cxx.xxx.xxx.xxx -j LOG; tail -n-0 -f /var/log/kern.log|stdbuf -o0 grep cxx.xxx.xxx.xxx

然后从客户端发送敲击,观察上述命令的输出。如果敲击没有被记录,则在客户端命令行上通过 sleep 1 分隔每个端口敲击。该命令行看起来像knock sxx.xxx.xxx.xxx nnnn1;sleep1;knock sxx.xxx.xxx.xxx nnnn2;sleep 1;knock sxx.xxx.xxx.xxx nnnn3;sleep 1...其中 sxx.xxx.xxx.xxx 是服务器的 IP,nnnn1、2、3、4 是敲击序列中的端口。如果这仍然不起作用,请在您的客户端上使用日志记录技术(安装 iptables/netfilter 并在 OUTPUT 链中放置一个 LOG 规则,其中 -d sxx.xxx.xxx.xxx;tail -f 客户端日志文件)

如果您发现所有敲门声都正常记录在客户端敲门器上,则需要采取额外的故障排除步骤。(第一步 - 确保您的 knockd.conf 在启动时被 knockd 找到。)发布您的结果以帮助进一步排除故障。一端或另一端的 ISP 或您的 [wifi] 路由器可能阻止了编号较高的端口。我发现我的手机提供商的网络似乎阻止了来自智能手机的敲门声。

答案2

我知道这已经很老了,但我想我明白你的问题了

您的启动命令是start_command = /sbin/iptables -D

那不-A应该-D

答案3

与其添加,不如插入;尝试-I

一些改进被标记:*** ***

[options]
***UseSyslog***
logfile = /var/log/knockd.log

[SSH]
sequence = 7000,8000,9000
seq_timeout = 15
tcpflags = syn
start_command = /sbin/iptables ***-I***  INPUT 1 -s %IP% -p tcp --dport ssh -j ACCEPT
cmd_timeout = 10
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

相关内容