阅读量:215
一、如何安装
在开始之前,请确保您的服务器已经安装了标准存储库中的两个必备软件包:knockd 和 iptables-persistent。您可以通过在服务器上打开终端窗口并发出以下命令来安装这些包:
bash
sudo apt-get update
sudo apt-get install knockd iptables-persistent
安装完成后,您就可以在服务器上使用knockd了。
二、如何配置knockd
首先,备份原始的knockd配置文件:
bash
sudo mv /etc/knockd.conf /etc/knockd.conf.bak
然后,使用文本编辑器创建一个新的配置文件:
bash
sudo nano /etc/knockd.conf
将以下内容粘贴到新文件中:
plaintext
[options]
UseSyslog
Interface = IFACE
[SSH]
sequence = 1100,2200,3300
seq_timeout = 15
tcpflags = syn
start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 20
在这个配置中,IFACE 是服务器上网络接口的名称。保存并关闭文件。
接下来,我们需要启用knockd。打开终端并发出以下命令:
bash
sudo nano /etc/default/knockd
将 START_KNOCKD 的值从 0 更改为 1:
plaintext
START_KNOCKD=1
保存并关闭文件。
使用以下命令创建一个新的systemd服务文件:
bash
sudo nano /etc/systemd/system/knockd.service
将以下内容粘贴到文件中:
plaintext
[Unit]
Description=Port-Knock Daemon
After=network.target
Requires=network.target
Documentation=man:knockd(1)
[Service]
EnvironmentFile=-/etc/default/knockd
ExecStartPre=/usr/bin/sleep 1
ExecStart=/usr/sbin/knockd $KNOCKD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
Restart=always
SuccessExitStatus=0 2 15
ProtectSystem=full
CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN
[Install]
WantedBy=multi-user.target
保存并关闭文件。
使用以下命令启用并启动新服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable --now knockd
三、如何修改防火墙
现在,我们必须修改防火墙以拒绝对SSH端口22的访问。为此,请发出以下命令:
bash
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --destination-port 22 -j DROP
sudo ip6tables -A INPUT -p tcp --destination-port 22 -j DROP
使用以下命令使这些规则在重新引导之间保持不变:
bash
sudo -i
iptables-save \u003e /etc/iptables/rules.v4
ip6tables-save \u003e /etc/iptables/rules.v6
exit
四、如何测试
要在SSH到支持knockd的服务器,任何远程客户机都必须安装knockd。登录到第二台Linux机器并发出以下命令来安装knockd:
bash
sudo apt-get update