Administrator
发布于 2025-01-26 / 9 阅读
0

Ubuntu防火墙管理

关闭防火墙

在使用Ubuntu时,我们经常需要进行网络连接,但是防火墙却可能会阻碍我们的连接。一些应用程序需要特定的端口打开才能正常工作,如果防火墙阻止了这些端口,就会导致应用程序无法使用。

因此,在某些情况下,关闭Ubuntu的防火墙可能是有必要的。

# 关闭ubuntu的防火墙
ufw disable

# 输入以下命令以停止防火墙服务
sudo systemctl stop ufw.service

# 输入以下命令以禁用防火墙服务:

sudo systemctl disable ufw.service

# 最后,输入以下命令以确认防火墙服务已关闭:

sudo ufw status

iptables

iptablesLinux从2.4.x版本内核开始,系统自带的防火墙。随着Linux内核的不断更新,Linux的防火墙在iptables基础上泛生出UFW和Firewalld,并且在一些发行版中已经替代iptables。

禁用iptables防火墙

参考:https://linux.cn/article-9791-1.html

保存策略

临时禁用 iptables 防火墙的第一步是保存现有的防火墙规则/策略。iptables-save 命令列出你可以保存到服务器中的所有现有策略。

root@kerneltalks # # iptables-save
# Generated by iptables-save v1.4.21 on Tue Jun 19 09:54:36 2018
*nat
:PREROUTING ACCEPT [1:52]
:INPUT ACCEPT [1:52]
:OUTPUT ACCEPT [15:1140]
:POSTROUTING ACCEPT [15:1140]
:DOCKER - [0:0]
---- output trucated----
root@kerneltalks # iptables-save > /root/firewall_rules.backup

清除所有策略

对于较老的 Linux 内核,你可以选择使用 service iptables stop 停止 iptables 服务,但是如果你在用新内核,则只需清除所有策略并允许所有流量通过防火墙。这和你停止防火墙效果一样。

root@kerneltalks # iptables -F
root@kerneltalks # iptables -X
root@kerneltalks # iptables -P INPUT ACCEPT
root@kerneltalks # iptables -P OUTPUT ACCEPT
root@kerneltalks # iptables -P FORWARD ACCEPT
  • -F:删除所有策略链

  • -X:删除用户定义的链

  • -P INPUT/OUTPUT/FORWARD :接受指定的流量

完成后,检查当前的防火墙策略。它应该看起来像下面这样接受所有流量(和禁用/停止防火墙一样)

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

恢复策略

故障排除后,你想要重新打开 iptables 的所有配置。你需要先从我们在第一步中执行的备份中恢复策略。

root@kerneltalks # iptables-restore </root/firewall_rules.backup

开放指定端口

iptables -L

添加防火墙规则

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

这条命令的作用是通过 iptables 配置防火墙规则,允许接收目标端口为 80 的 TCP 数据包。具体解释如下:

  • sudo: 以管理员权限执行命令。

  • iptables: 用于配置 Linux 防火墙的命令工具。

  • -I INPUT: 将规则插入到 INPUT 链的最前面。INPUT 链用于处理进入本机的数据包,-I 表示插入规则,插入的位置在链的最前面(优先级较高)。

  • -p tcp: 指定协议为 TCP。

  • --dport 80: 匹配目标端口为 80 的数据包,80 端口通常用于 HTTP 服务,即 web 服务。

  • -j ACCEPT: 对匹配到的流量执行 ACCEPT 动作,允许这些数据包通过防火墙。

总结:这条命令允许通过 TCP 协议并且目标端口为 80(通常用于 HTTP 服务)的数据包进入本机。

端口配置持久化

安装工具

sudo apt-get install iptables-persistent

端口配置永久生效

sudo netfilter-persistent save
sudo netfilter-persistent reload

Bugs

会遇到error:

iptables v1.8.7 (nf_tables): unknown option “--dport“

解决方法:

切换iptables的版本为legacy!

$ sudo update-alternatives --config iptables
 
有 2 个候选项可用于替换 iptables (提供 /usr/sbin/iptables)。
 
  选择       路径                     优先级  状态
------------------------------------------------------------
* 0            /usr/sbin/iptables-nft      20        自动模式
  1            /usr/sbin/iptables-legacy   10        手动模式
  2            /usr/sbin/iptables-nft      20        手动模式
 
要维持当前值[*]请按<回车键>,或者键入选择的编号:1  

然后执行

$ iptables -A INPUT -p tcp -i eth0 --dport 5201 -j ACCEPT
 

这条命令的作用是通过 iptables 配置防火墙规则,允许接收来自接口 eth0 的目标端口为 5201 的 TCP 数据包。具体解释如下:

  • -A INPUT: 将规则添加到 INPUT 链中,INPUT 链用于处理进入本机的数据包。

  • -p tcp: 指定协议为 TCP。

  • -i eth0: 指定该规则仅适用于从网络接口 eth0 进入的流量。

  • --dport 5201: 仅匹配目标端口为 5201 的数据包。

  • -j ACCEPT: 对匹配到的流量执行 ACCEPT 动作,允许这些数据包通过防火墙。

简而言之,这条命令允许通过接口 eth0 进入的 TCP 数据包,且目标端口为 5201。