断开特定客户端的TCP连接
当需要终止某个远程客户端(如SSH用户或异常访问IP)的活跃连接时:
-
定位目标连接
使用ss
或netstat
命令查看活跃连接:sudo ss -tunp | grep <客户端IP或端口> # 示例:sudo ss -tunp | grep 192.168.1.100
输出示例:
tcp ESTAB 0 0 192.168.1.10:22 192.168.1.100:54321 users:(("sshd",pid=1234,fd=3))
-
终止连接
- 方法1:通过进程ID(PID)终止
找到输出中的pid
值(如1234
),执行:sudo kill -9 1234 # 强制结束进程
- 方法2:使用
ss
直接断开(需内核≥4.9)sudo ss -K dst 192.168.1.100 dport = 54321 # 指定目标IP和端口
- 方法1:通过进程ID(PID)终止
通过防火墙禁止客户端访问
使用防火墙永久阻止特定IP的网络访问:
-
iptables(传统方案)
sudo iptables -A INPUT -s <客户端IP> -j DROP # 禁止该IP所有入站流量 sudo iptables -A OUTPUT -d <客户端IP> -j DROP # 禁止出站流量 sudo iptables-save > /etc/iptables/rules.v4 # 永久保存规则
-
firewalld(推荐,适用于CentOS/RHEL)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<客户端IP>" reject' # 拒绝IP sudo firewall-cmd --reload # 生效配置
-
UFW(Ubuntu/Debian)
sudo ufw deny from <客户端IP> to any # 禁止IP访问
完全关闭网络接口
临时禁用整张网卡(如eth0):
sudo ip link set eth0 down # 关闭接口 sudo ifconfig eth0 down # 传统命令(部分系统兼容)
恢复网络:
sudo ip link set eth0 up # 重新启用
关键注意事项
-
风险预防
- 避免在生产环境直接
kill
关键服务(如数据库连接)。 - 防火墙规则错误可能导致自身被锁,操作前确保留有本地控制台访问权限。
- 避免在生产环境直接
-
连接状态验证
- 断开后检查效果:
sudo ss -tunp | grep <客户端IP> # 确认连接消失 ping <客户端IP> # 验证防火墙阻断(应无响应)
- 断开后检查效果:
-
持久化配置
- 防火墙规则需
--permanent
(firewalld)或iptables-save
保存,否则重启失效。 - 禁用网卡重启后自动恢复,需编辑配置文件(如
/etc/network/interfaces
)实现永久关闭。
- 防火墙规则需
适用场景总结
场景 | 推荐方法 |
---|---|
踢出单个异常用户(如SSH) | 终止TCP连接(kill /ss -K ) |
永久封禁恶意IP | 防火墙规则(iptables/firewalld) |
临时断网维护 | 关闭网络接口(ip link down ) |
引用说明基于Linux内核文档、iptables官方手册及firewalld Wiki,命令兼容主流发行版(Ubuntu 20.04+/CentOS 7+),操作前建议查阅
man
手册(如man ss
、man iptables
)获取系统特定说明。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5410.html