一些基本操作#
在配置 Linux 防火墙规则之前需要先了解一些常用的操作命令,这些命令有助于我们了解服务器当前端口的使用情况,我们在进行防火墙规则配置或者是在日常使用和维护的时候这些命令被使用频率也比较高,所以写在前面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 查看服务器网络占用情况
sudo nethogs -a
# 查看正在被监听的端口
sudo netstat -ntlp
# 扫描一定范围内所有已放行的端口
sudo nmap -p 1-65535 localhost
# 查看当前系统上正在使用(或监听)端口 80 的进程,没有输出则表示端口未被占用
sudo lsof -i:80
# 关闭 PID 为 8422 的进程
kill -9 8422
|
使用 ufw(ufw 是一个简化的防火墙管理工具)#
启用 ufw 或允许开机自启(执行前建议先配置好所需的规则)#
停止 ufw 或禁止开机自启#
查看防火墙状态#
如果没有安装,可以通过以下命令来安装#
1
2
3
|
sudo apt update
sudo apt install ufw
|
检查某一端口是否开启#
1
|
sudo ufw status | grep <端口号>
|
如果输出中包含相关信息,说明该端口被允许。
查看 ufw 所有规则#
1
2
3
4
5
|
# 不显示序号
sudo ufw status verbose
# 显示序号
sudo ufw status numbered
|
删除 ufw 某条规则#
1
2
3
4
5
|
# 删除第一条规则,这里的 1 就是上一步以带序号的方式查看规则时所对应的序号
sudo ufw delete 1
# 删除允许 789 端口使用 tcp 协议这条规则
sudo ufw delete allow 789/tcp
|
设置默认的入站流量规则为拒绝#
1
|
sudo ufw default deny incoming
|
设置默认的入站流量规则为允许#
1
|
sudo ufw default allow incoming
|
ufw 开启端口#
1
2
|
sudo ufw allow <端口号1>,<端口号2>,<端口号3>/tcp # 可以选择放行 tcp 或 udp
sudo ufw allow <端口号1>,<端口号2>,<端口号3> # 同时放行 tcp 和 udp
|
ufw 关闭端口#
1
2
3
4
5
|
# 关闭单个端口
sudo ufw deny <端口号>/tcp
# 阻止从 3300 到 3400 一系列端口使用 tcp 协议
sudo ufw deny 3300:3400/tcp
|
ufw 允许某 IP 地址的连接#
1
2
3
4
5
|
# 允许指定 IP 连接到本机
sudo ufw allow from 8.8.8.8
# 允许指定 IP 连接到本机的 3333 端口
sudo ufw allow from 8.8.8.8 to any port 3333
|
ufw 拒绝某 IP 地址的连接#
1
2
3
4
5
|
# 阻止指定 IP 连接到本机
sudo ufw deny from 8.8.8.8
# 阻止指定 IP 连接到本机的 3333 端口
sudo ufw deny from 8.8.8.8 to any port 3333
|
重新加载 ufw 规则#
重置 ufw 防火墙(慎用)#
1
2
|
# 重置 ufw 防火墙,删除所有规则
sudo ufw reset
|
更多 ufw 用法:
Debian/Ubuntu 系统中安装和配置 UFW -简单的防火墙
使用 nftables#
启动 nftables 服务#
1
|
sudo systemctl start nftables
|
停止 nftables 服务#
1
|
sudo systemctl stop nftables
|
重新启动 nftables 服务#
1
|
sudo systemctl restart nftables
|
查看 nftables 服务状态#
1
|
sudo systemctl status nftables
|
查看 nftables 规则#
如果没有安装 nftables,可以通过以下命令安装#
1
2
3
|
sudo apt update
sudo apt install nftables
|
nftables 开启端口示例#
1
2
3
4
5
|
sudo nft add table inet filter # 这里创建了一个名为 filter 的表格
sudo nft add chain inet filter input { type filter hook input priority 0 \; } # 在该表格上创建了一个名为 input 的链
sudo nft add rule inet filter input tcp dport <端口号> accept # 添加了一条规则以接受指定端口的 TCP 流量
|
nftables 关闭端口示例#
1
2
3
4
5
|
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; }
sudo nft add rule inet filter input tcp dport <端口号> drop
|
保存配置#
注意:上述的开启和关闭端口的规则是临时性的,它们在系统重启后将失效。如果想要让规则在系统重启后依然生效,则需要将规则保存到nftables的配置文件中。
1
|
sudo nft list ruleset > /etc/nftables.conf # 将当前的规则集输出到 /etc/nftables.conf 文件中。在系统启动时,nftables 将会读取这个文件并加载规则
|
设置 nftables 开机自启#
1
|
sudo systemctl enable nftables
|
关闭 nftables 开机自启#
1
|
sudo systemctl disable nftables
|
使用 iptables#
查看当前 iptables 规则#
查看 ptables 详细信息#
如果 iptables 规则比较复杂,你可能需要查看更详细的信息#
如果没有安装 iptables,可以通过以下命令安装#
1
2
3
|
sudo apt update
sudo apt install iptables
|
重新加载 iptables 规则并使其立即生效#
1
|
sudo systemctl restart iptables
|
停止 iptables 服务#
1
|
sudo systemctl stop iptables
|
使用 firewalld#
查看 firewalld 状态#
1
|
sudo firewall-cmd --state
|
查看防火墙规则#
1
|
sudo firewall-cmd --list-all
|
如果没有安装 firewalld,可以通过以下命令安装#
1
2
3
|
sudo apt update
sudo apt install firewalld
|
查看某个特定端口是否放行#
1
|
sudo firewall-cmd --query-port=80/tcp
|
开启 80 端口#
1
2
3
|
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
|
检查 Firewalld 状态#
1
|
sudo systemctl status firewalld
|
停止 Firewalld#
1
|
sudo systemctl stop firewalld
|
向防火墙添加允许 HTTP 和 HTTPS 流量的规则,并重新加载防火墙配置#
1
2
3
4
5
|
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
|