端口敲门(Port knocking)技术,即服务通过动态的添加 iptables 规则来隐藏系统开启的服务,使用自定义的一系列序列号来「敲门」,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来「关门」,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。
关闭SELinux
查看 SELinux 状态:
getenforce
临时关闭 SELinux(设为 Permissive 模式):
setenforce 0
永久关闭 SELinux(重启生效):
修改 /etc/selinux/config 文件
将 SELINUX=enforcing 改为 SELINUX=disabled
安装 ipset
CentOS 7 需要先关闭 Firewall 防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
创建规则
创建一个名为 allowlist 的规则并设置有效期为 30 秒
ipset create allowlist hash:ip timeout 30
设置IP白名单
# 放行IP规则
iptables -A INPUT -p tcp -m set --match-set allowlist src -j ACCEPT
# 关闭22端口
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables 是由上而下的进行规则匹配,放行规则需在禁行规则之前才能生效。
开放指定IP
# 将IP加入白名单
ipset -exist add allowlist 192.168.37.1 timeout 30
其他指令
# 查看白名单IP列表
ipset list allowlist
如果手工将其 timeout 值设置为 0 的话,即为存活时间无限久。