问题:怎么查看服务器开了哪些端口
处理步骤:
1、查找可疑的进程、端口ss命令查看所有本机监听的端口,如果有docker或隐藏的端口用 lsof命令具体查找
2、关闭进程、端口
3、设置黑白名单的放行和拦截规则(含解除规则)
步骤一、查找本机监听的端口(ss命令或者 lsof命令) 查看端口和对应的程序是否正确
ss -tlnp | grep LISTEN 一般工作中用这个比较多:ss -tlnp
或者 losf -i -p -n | grep LISTEN
参数解: -l 只看监听端口;-t 只看TCP;-n 不解析域名;-p 显示占用端口的进程PID/程序名
进一步过滤具体端口:
lsof -i: 8080 -p -n
查看指定进程打开的所有端口:
lsof -p
【查看具体哪个进程占用了端口】:
lsof -i:8080
步骤二、停止进程,关闭可疑的服务
systemctl stop <服务名>
systemctl disable <服务名>
步骤三、防火墙加入黑白名单
防火墙加上保险(拒绝其他IP访问该端口)
命令解释:阻止外部所有机器通过 TCP 协议访问本机指定端口
iptables -A INPUT -p tcp --dport <端口号> -j DROP
让别人IP访问本机指定端口(这是一组命令,都要执行)
命令解释:白名单:放行指定IP访问目标端口
iptables -A INPUT -p tcp --dport <端口号> -s <对方的IP> -j ACCEPT
iptables -A INPUT -p tcp --dport <端口号> -j DROP 注意:这条是兜底保险
答疑:为什么要执行两条命令?
系统 INPUT 链默认策略是 ACCEPT(绝大多数服务器默认配置),第二条命令是兜底用的,即使系统 INPUT 默认策略是 DROP,有第二条也不影响。
防火墙的规则是按顺序执行,放行的IP只要匹配到第一条,就不会执行下面这条了。
步骤四、解除某个端口的黑白名单 --本质就是删除上面设置的lan'jie
方式一、用 -D 删除完整匹配的 DROP 规则(不用记行号),本质是删除最底行的所有IP限行规则
iptables -D INPUT -p tcp --dport <端口号> -j DROP
如果设置的指定IP放行规则也要删除,则执行下面
iptables _-D INPUT -p tcp --dport <> -s <对方IP> -j ACCEPT
方式二、通过查找'底行的所有IP限行规则'的行号,删除行号的方式删除
先查看当前规则,确认规则在哪一条
iptables -L -n --line-number
参数解释:--line-number 会显示每条规则的序号,方便精准删除
假设看到 DROP 规则在第 10 行,执行删除:
iptables -D INPUT 10
删除后查看防火墙规则,验证没有之前设置的指定IP放行,所有IP限行的规则
iptables -L -n
看两点
1、有没有 --dport 端口 -j ACCEPT 放行规则
2、有没有 --dport 端口 -j DROP/REJECT 拦截规则
最后要保存规则(iptables是临时存储的,linux重启后会恢复旧的配置)
CentOS/RHEL:执行 bash:service iptables save 保存规则