![查看所有 Debian/Ubuntu Linux 相关常见问题解答](https://www.alaica.com/wp-content/uploads/linux-42.gif)
我的基于 iptables 的防火墙仅允许端口 TCP 80 和 443。我还需要 tcp 端口#22,但我家里没有静态 IP。如何在基于 Debian 或 Ubuntu Linux 的服务器系统下按需打开和关闭 TCP 端口 #22?如何安装名为 Knockd 的端口敲门服务器并使用 iptables 配置它以打开 tcp 端口 #22 或任何其他端口?
![查看所有与防火墙相关的常见问题解答](https://www.alaica.com/wp-content/uploads/linux-124.png)
Debian 或 Ubuntu Linux 附带了 knockd。它是一个端口敲门服务器。它侦听由 VPN/拨号 pppd 创建的以太网和/或 PPP 接口上的所有流量,寻找端口命中的特殊“敲击”序列。客户knock端通过向服务器上的端口发送 TCP 或 UDP 数据包来进行这些端口命中。这个端口不需要打开——因为 knockd 在链路层监听,它可以看到所有流量,即使它的目的地是一个关闭的端口。
教程详情 | |
---|---|
难度级别 | 先进的 |
根权限 | 是的 |
要求 | 敲+iptables |
美东时间。阅读时间 | 2分钟 |
当服务器检测到特定的端口命中序列时,它会运行其配置文件中定义的命令。这可用于在防火墙中打开漏洞以进行快速访问。
敲击安装
打开终端或使用 ssh 客户端登录远程服务器。以 root 用户身份键入以下apt-get 命令来安装 Knockd 服务器:
$ sudo apt-get install knockd
示例输出:
[sudo] vivek 的密码: 正在阅读包裹清单...完成 构建依赖树 读取状态信息...完成 将安装以下新软件包: 被敲击 0 已升级,1 已新安装,0 已删除,4 未升级。 需要获取 27.6 kB 的档案。 此操作后,将使用 168 kB 的额外磁盘空间。 获取:1 http://mirrors.kernel.org/debian/ stable/main Knockd amd64 0.5-3 [27.6 kB] 1 秒内获取 27.6 kB (19.5 kB/s) 选择先前取消选择的软件包。 (正在读取数据库...当前安装的 352407 个文件和目录。) 拆开 Knockd 的包装(来自 .../knockd_0.5-3_amd64.deb)... 处理 man-db 的触发器 ... 设置敲击 (0.5-3) ... Knockd 禁用:未启动。要启用它,请编辑 /etc/default/knockd ...(警告)。
配置
编辑文件/etc/knockd.conf,输入:
$ sudo vi /etc/knockd.conf
更新配置文件如下。请随意根据您的设置设置序列端口号 2022、3022、4022:
[选项] 使用系统日志 [ openSSH ] 序列 = 2022,3022,4022 seq_timeout = 5 命令 = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn [ closeSSH ] 序列 = 4022,3022,2022 seq_timeout = 5 命令 = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn
保存并关闭文件。编辑文件/etc/default/knockd,输入:
$ sudo vi /etc/default/knockd
查找:
START_KNOCKD=0
用。。。来代替:
START_KNOCKD=1
可选:根据您的设置设置接口名称,例如 eth0 或 ppp0:
KNOCKD_OPTS="-i eth0"
保存并关闭文件。
如何启动/停止/重新启动 kknockd?
键入以下命令:
sudo service Knockd Start #<-- 启动服务器 sudo service Knockd Stop #<-- 停止服务器 sudo Service Knockd restart #<-- 重新启动服务器 sudo Service Knockd Status #<-- 查看状态服务器
或者
sudo /etc/init.d/knockd start #< --启动服务器sudo /etc/init.d/knockd stop # < --停止服务器sudo /etc/init.d/knockd restart # < --重新启动服务器sudo / etc / init.d / knockd status #<--查看状态服务器
如何敲端口?
您需要使用敲击命令。它是一个端口敲门客户端。要在 203.1.2.3 IP 地址处为 sshd 打开 tcp 端口 #22,请输入:
$ knock -v 203.1.2.3 2022 3022 3022
示例输出:
命中 TCP 203.1.2.3:2022 命中 TCP 203.1.2.3:3022 命中 TCP 203.1.2.3:4022
如何关闭端口?
语法是:
$ knock -v 203.1.2.3 4022 3022 2022
如何打开UDP端口?
语法为:
$ knock -v -u 203.1.2.3 9090
您还可以组合 TCP 和 UDP 端口,如下所示:
$ knock server1.example.com 2022:tcp 9090:udp 4022:tcp
如何验证服务器上的端口已打开或关闭?
使用 ssh 客户端,如下所示:
$ ssh user@203.1.2.3
或
# iptables -L INPUT -v -n
# iptables -L INPUT -v -n | grep :22
请注意,端口敲门只不过是默默无闻的安全。我建议:
- 使用我们的“OpenSSH 服务器最佳安全实践”指南正确保护 OpenSSH。
- 使用更好的解决方案,例如fwknop,它实现了称为单包授权 (SPA) 的授权方案。
参考:
- 手册页——knockd、knock 和 iptables