文章目录
1、引言
1.1 简介
对于云服务器来说,防火墙开启和设置安全组是对云服务器的双重保护,如果选择关闭防火墙,建议安全组谨慎开放端口。
Linux基于其内核拥有多种形式的发行版,其中Ubuntu 基于 Debian,CentOS 基于 RHEL;而这两者之间的防火墙操作也有差异,这里我简单记录一下两者的基本使用命令
最后也简单记录一下windows下的端口操作
1.2 Linux通用命令
lsof(list open files)是一个查看当前系统文件的工具,参考:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/lsof.html
# 下面的命令需要root权限,否则可能不会正常显示
# 查看某端口是否开放,如果没有信息出现则说明该端口还未开放
lsof -i:80
# 列出所有网络连接
lsof -i
# 累出所有tcp连接
lsof -i tcp
# 查看所有开放的端口
netstat -aptn
iptables -nL
1.3 docker注意项
默认情况下,Docker deamon会在启动container的时候向iptables中添加转发的规则。它会创建一个filter chain - DOCKER
。docke利用这个规则向外暴露container的端口,即无需配置防火墙即可外网即可访问,这个操作对于生产环境还是很危险的。
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
...
Chain DOCKER (1 references)
target prot opt source destination
解决方案
#第一种方案
#在宿主机docker容器启动过程中使用 --iptables=false
docker run -p 80:8080 ubuntu bash --iptables=false
#第二种方案
#将docker容器的8080端口绑定到local主机的80端口上
docker run -p 127.0.0.1:80:8080 ubuntu bash
2、Ubuntu 操作系统
2.1 简介
官方手册:http://manpages.ubuntu.com/manpages/focal/man8/ufw.8.html
与Debian相同,Ubuntu 里也自带了 iptables,不一样的地方是还内置了 Ubuntu 专属的 UFW 管理工具,UFW 是 Uncomplicated Firewall 的简称,UFW 默认是不开启的。
2.2 ufw防火墙操作
ufw的配置文件在/etc/default/ufw
,每次进行配置文件修改后需要重载reload一下;ufw 在 active的状态下,默认是deny all incoming connection, allow all outgoing connection.
# 查看防火墙状态,包括已开放端口
sudo ufw status
# 开启防火墙,如果已开启防火墙,忽略此步
sudo ufw enable
# 重载防火墙
sudo ufw reload
# 关闭防火墙
sudo ufw disable
# 设置防火墙默认权限
sudo ufw default deny
# 重置
sudo ufw reset
####################################
# 开放指定端口或者协议
sudo ufw allow 80
sudo ufw allow 80/tcp
sudo ufw allow https
sudo ufw allow 6000:7000/tcp
# 关闭普通端口,或者协议数字,需要先用status查看
sudo ufw delete allow 80
sudo ufw delete [num]
sudo ufw delete allow 80/tcp
# 开放指定IP地址
sudo ufw allow from 192.168.0.10
# 关闭指定IP地址
sudo ufw delete allow from 192.168.0.10
# 开放指定IP地址指定端口
sudo ufw allow from 192.168.0.10 to any port 3306
# 关闭指定IP地址指定端口
sudo ufw delete allow from 192.168.0.10 to any port 3306
2.3 ufw开启注意事项
⚠️ 我在没有配置过ufw allow端口前,直接开启了ufw防火墙,一段时间后发现ssh竟然无法连接,还好后面使用了云服务器的救援链接关闭ufw才可以重新进入。
在使用ufw前,请务必开启ssh协议或者22端口!
3、Centos操作系统
3.1 简介
CentOS 在 6 及之前的版本里只使用 iptables,从 7 开始其实和 Ubuntu 类似,提供了 firewalld 作为便捷配置防火墙的工具。与其他系统不同的是 firewalld 默认就是跟随系统启动的,并且规则默认是禁止所有端口进入(22 这种 SSH 必要端口除外)
对于firewalld 底层实际还是调用 iptables 来处理的,本身也是作为一个简化配置 iptables 的工具存在firewalld 的优点是规则即时生效,不用去手动刷新。但从 CentOS8 开始,nftables 作为新的防火墙后端开始替代 iptables,firewalld 也就变成了 nftables 的前端。
3.2 firewalld 防火墙
# 查看防火墙状态
sudo systemctl status firewalld.service
# 开启防火墙
sudo systemctl start firewalld.service
# 查看已开放端口
sudo firewall-cmd --list-ports
# 开放指定端口,或者协议
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --permanent --zone=public --add-port=100-500/udp
# 删除指定端口
sudo firewall-cmd --zone=public--remove-port=8080/tcp --permanent
# 重启防火墙
sudo systemctl reload firewalld.service
sudo systemctl restart firewalld.service
4、windows下端口检测
# 查找所有运行的端口
netstat -ano
# 查找指定端口
netstat -ano | finstr "4000"
# 查看占用端口的服务列表
tasklist|findstr "10972"
# 强制(/F参数)杀死 pid 为 9088 的所有进程包括子进程(/T参数)
askkill /T /F /PID 9088