跳到主要内容

linux防火墙规则


linux防火墙规则

iptables

这一部分主要保留传统 iptables 的使用记录。较新的 RHEL/CentOS 系统通常优先使用 firewalld 或 nftables;不要在同一台机器上混着维护多套防火墙规则。

1. 查看当前防火墙规则

使用 iptables 查看规则:

sudo iptables -L

这将列出所有的链和规则。-L 参数代表列出(List)。

查看详细信息:

sudo iptables -L -v -n

-v 参数代表详细(Verbose),-n 参数代表不解析服务名称(Numeric)。

查看特定链的规则:

sudo iptables -L INPUT -v

2. 配置防火墙规则

添加规则允许 SSH:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

这条命令将添加一条规则到 INPUT 链,允许所有进入的 TCP 流量到达端口 22(SSH)。

添加规则拒绝特定 IP:

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

这条命令将拒绝来自 IP 地址 192.168.1.100 的所有流量。

添加规则允许来自特定 IP 的 HTTP 访问:

sudo iptables -A INPUT -p tcp -s 192.168.1.101 --dport 80 -j ACCEPT

添加规则允许已建立的连接:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

旧教程常见的 -m state --state ... 仍可能可用,但新规则更常见的是 conntrack 写法。

添加规则允许出站流量:

sudo iptables -A OUTPUT -j ACCEPT

3. 删除防火墙规则

删除特定规则: 要删除规则,你需要知道规则的编号。使用 -L --line-numbers 查看规则编号:

sudo iptables -L --line-numbers

然后删除规则,例如删除编号为 3 的规则:

sudo iptables -D INPUT 3

4. 保存防火墙规则

保存 iptables 规则: 在 Debian/Ubuntu 上,可以使用 iptables-persistent / netfilter-persistent:

sudo apt install iptables-persistent
sudo netfilter-persistent save

在旧版 CentOS/RHEL 的 iptables-services 环境中,常见的是:

sudo service iptables save

现代 RHEL/CentOS 新部署更适合使用 firewalld 或 nftables,不要使用不存在的 systemctl save iptables。

5. 恢复防火墙规则

在系统启动时恢复 iptables 规则: Debian/Ubuntu 安装 iptables-persistent 后可由 netfilter-persistent 自动恢复。旧版 CentOS/RHEL 若使用 iptables-services,由对应服务负责加载保存的规则;不要再把恢复命令手工塞进 rc.local。

6. 重置防火墙规则

清空现有 iptables 规则:

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X

-F 代表清空规则,-X 代表删除用户自定义链。远程服务器上不要直接执行这组命令:如果当前 SSH 依赖已有放行规则,清空后可能立刻断开连接。

7. 防火墙规则的持久化

Ubuntu/Debian: 安装 iptables-persistent 包后,它会在 /etc/iptables/rules.v4 文件中保存规则。

CentOS/RHEL: 你可以使用 iptables-services 包来管理 iptables 的持久化:

sudo yum install iptables-services
sudo systemctl enable iptables
sudo service iptables save

8. 查看和管理系统服务

查看所有服务:

sudo systemctl list-units --type=service

启动/停止服务:

sudo systemctl start iptables
sudo systemctl stop iptables

设置服务开机启动:

sudo systemctl enable iptables

禁用服务开机启动:

sudo systemctl disable iptables

以上命令主要用于查看和维护已有 iptables 配置。新系统先确认当前实际使用的是 firewalld、nftables 还是 iptables,再按对应工具修改。

9. 停止使用 iptables 规则时

不要通过删除 /etc/iptables 目录来“关闭防火墙”。先确认当前规则由哪个服务管理,再停用或卸载对应的持久化服务;远程机器操作前要确认 SSH 不会因此被阻断。

firewalld

1. Firewalld 简介

Firewalld 是一个动态防火墙管理工具,它提供了基于区域(zone)和服务(service)的简化配置界面,使得管理防火墙规则更加容易。它支持动态更新防火墙规则,可以在运行时添加、删除、修改规则,而不需要重新加载整个防火墙配置。

2. 服务的启动、停止和状态查看

  • 启动防火墙:
    sudo systemctl start firewalld
  • 停止防火墙:
    sudo systemctl stop firewalld
  • 设置防火墙开机启动:
    sudo systemctl enable firewalld
  • 禁用防火墙开机启动:
    sudo systemctl disable firewalld
  • 查看防火墙状态:
    sudo systemctl status firewalld
    # 或者
    sudo firewall-cmd --state
  • 查看版本:
    sudo firewall-cmd --version

3. 查看和设置默认区域

  • 查看默认区域:
    sudo firewall-cmd --get-default-zone
  • 查看所有可用的区域:
    sudo firewall-cmd --get-zones
  • 查看当前活动区域:
    sudo firewall-cmd --get-active-zones
  • 设置默认区域:
    sudo firewall-cmd --set-default-zone=your_zone
    其中your_zone是你想要设置的默认区域的名称,比如public、internal、dmz等。

4. 使用 firewall-cmd 命令行工具进行规则配置

  • 添加规则开放端口:
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
  • 添加规则允许服务:
    sudo firewall-cmd --zone=public --add-service=http --permanent
  • 删除规则:
    sudo firewall-cmd --zone=public --remove-service=http --permanent

5. 重新加载防火墙配置

为了使永久配置生效,需要重新加载 firewalld:

sudo firewall-cmd --reload

6. 查询已开放的端口、已允许的服务

  • 查询特定区域支持的所有特性:
    sudo firewall-cmd --zone=zone_name --list-all
    其中,zone_name是你要查询的区域的名称。
  • 查询特定区域支持的所有服务:
    sudo firewall-cmd --zone=zone_name --list-services
  • 查询特定区域开放的端口:
    sudo firewall-cmd --zone=zone_name --list-ports

7. 绑定接口到特定区域

  • 永久更改接口的区域绑定:
    sudo firewall-cmd --zone=home --add-interface=eth0 --permanent
    为了使永久更改生效,需要重新加载firewalld
    sudo firewall-cmd --reload
    再次验证更改:
    sudo firewall-cmd --get-active-zones

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
赏
评论

评论将在接近此处时加载,也可点击立即加载。

  目录