linux-网络管理-防火墙配置

Linux 网络管理:防火墙配置

1. 防火墙概述

防火墙是保护计算机系统和网络免受未经授权访问和网络攻击的安全机制。Linux 系统中,防火墙通过控制进入和离开网络的数据包,实现网络流量的过滤和管理。

Linux 上的防火墙配置工具有多种,其中最为常用的是 iptables 和现代 firewalld,以及一些其他如 ufw 这样的简化管理工具。

2. Linux 防火墙的基本原理

防火墙的基本工作原理是根据设定的规则对网络数据包进行过滤和处理,规则通常包括以下几部分:

  • 源地址:数据包的来源地址,可以是 IP 或网络段。
  • 目标地址:数据包的目的地址。
  • 协议类型:如 TCP、UDP、ICMP 等。
  • 源端口和目标端口:与传输协议相关联的端口号,如 HTTP 服务的 80 端口。

防火墙通过 (Chains)和规则(Rules)来定义如何处理数据包:

  • 链(Chains) :防火墙规则的处理路径,通常分为三类:
    • INPUT :进入系统的数据包(例如从外部网络到本地主机)。
    • FORWARD :转发通过本地系统的数据包(例如路由设备的功能)。
    • OUTPUT:从本地系统发送出去的数据包。
  • 规则(Rules) :每个链上可以设置多条规则,定义了如何处理特定的数据包。常见的动作包括:
    • ACCEPT :允许数据包通过。
    • DROP :丢弃数据包,不给出响应。
    • REJECT:拒绝数据包并返回错误信息。
3. iptables:经典的防火墙工具

iptables 是 Linux 内核中的网络数据包过滤框架,提供了强大的防火墙功能,主要管理 IPv4 的防火墙规则。

3.1 iptables 基本语法

iptables 命令的基本格式如下:

bash 复制代码
iptables [选项] 链名 [条件匹配] -j 动作
  • 链名:指定在哪个链上操作(如 INPUT、FORWARD、OUTPUT)。
  • 条件匹配:指定数据包匹配条件,如源地址、目标地址、协议等。
  • 动作:定义匹配规则后的处理动作,如 ACCEPT、DROP、REJECT。
3.2 常用 iptables 命令
  • 查看当前规则
bash 复制代码
iptables -L
  • 允许某个端口的流量

允许 80 端口的 HTTP 流量:

bash 复制代码
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • 拒绝特定 IP 地址

阻止来自 192.168.1.100 的所有流量:

bash 复制代码
iptables -A INPUT -s 192.168.1.100 -j DROP
  • 删除特定规则

假设想删除特定的规则,可以使用 -D 参数:

bash 复制代码
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
  • 保存规则

iptables 的规则默认在系统重启后会丢失,因此需要手动保存。根据不同的发行版,保存命令可能不同:

在基于 Debian 系列的系统中,可以通过 iptables-save 命令保存规则:

bash 复制代码
iptables-save > /etc/iptables/rules.v4

然后,通过 iptables-restore 恢复:

bash 复制代码
iptables-restore < /etc/iptables/rules.v4

在基于 CentOS 或 RHEL 的系统中,保存规则可以使用以下命令:

bash 复制代码
service iptables save
3.3 iptables 的表和链

iptables 使用不同的表来管理不同类型的防火墙规则,每个表包含多个链:

  • filter 表 :默认表,管理最常见的输入、输出和转发规则。常用链包括:

    • INPUT :处理进入本机的数据包。

    • FORWARD :处理通过本机转发的数据包。

    • OUTPUT:处理本机发送的数据包。

  • nat 表 :处理与网络地址转换相关的规则。常用链包括:

    • PREROUTING :在数据包进入路由前处理。

    • POSTROUTING :在数据包路由后处理。

    • OUTPUT:处理本地生成的需要 NAT 的数据包。

  • mangle 表:用于修改数据包的服务类型、TTL 等特性。

例如,配置 NAT 地址转换时:

bash 复制代码
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
4. firewalld:现代防火墙管理工具

firewalldiptables 的一个更高级的替代品,提供了动态防火墙管理。它简化了防火墙规则的管理,并支持区域概念,允许根据网络接口或源地址设置不同的防火墙策略。

4.1 firewalld 的基本概念
  • 区域(Zones) :每个网络接口或源地址可以分配到一个区域,区域定义了不同的信任级别。例如,public 区域默认会拒绝大部分的入站流量,而 trusted 区域则允许所有流量。
  • 服务(Services)firewalld 通过预定义的服务(如 HTTP、SSH)来简化规则管理。服务包含了默认端口、协议的定义,用户可以通过启用或禁用服务来管理网络访问。
  • 即时与永久规则firewalld 允许即时应用规则(不重启生效),并区分永久规则和即时规则。永久规则在重启系统后依然有效。
4.2 firewalld 基本操作
  • 查看防火墙状态
bash 复制代码
sudo firewall-cmd --state
  • 查看当前区域和规则
bash 复制代码
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all
  • 启用或禁用服务

例如,启用 HTTP 服务:

bash 复制代码
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

这里 --permanent 使规则永久生效,--reload 用于重新加载配置。

  • 添加端口规则

除了预定义的服务,用户也可以通过端口号直接添加规则。例如,允许 8080 端口的流量:

bash 复制代码
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
  • 删除规则

删除某个服务或端口规则:

bash 复制代码
sudo firewall-cmd --remove-service=http --permanent
sudo firewall-cmd --reload
4.3 区域配置

每个网络接口可以分配到不同的区域,默认情况下,所有接口分配到 public 区域。可以使用以下命令查看接口所属区域:

bash 复制代码
sudo firewall-cmd --get-active-zones

更改接口所属区域:

bash 复制代码
sudo firewall-cmd --zone=trusted --change-interface=eth0 --permanent
sudo firewall-cmd --reload
5. ufw:简化的防火墙管理工具

ufw(Uncomplicated Firewall)是 Ubuntu 系统上简化防火墙管理的工具,它是 iptables 的前端工具,旨在提供更加用户友好的命令来管理防火墙。

5.1 ufw 基本命令
  • 启用防火墙
bash 复制代码
sudo ufw enable
  • 查看防火墙状态
bash 复制代码
sudo ufw status
  • 允许某个服务或端口

允许 HTTP 服务:

bash 复制代码
sudo ufw allow http

允许 22 端口的 SSH 流量:

bash 复制代码
sudo ufw allow 22/tcp
  • 拒绝特定 IP 地址的连接
bash 复制代码
sudo ufw deny from 192.168.1.100
  • 禁用防火墙
bash 复制代码
sudo ufw disable
5.2 配置文件管理

ufw 的配置文件位于 /etc/ufw/ufw.conf,可以在这里启用或禁用防火墙启动时自动加载。

6. 防火墙策略配置示例

假设我们要为一台 Web 服务器配置防火墙,目标是允许 HTTP(80)和 HTTPS(443)流量,同时阻止其他所有入站流量。我们可以使用 iptablesfirewalld 配置如下:

使用 iptables 配置:
bash 复制代码
iptables -P INPUT DROP            # 默认丢弃所有入站流量
iptables -P FOR

WARD DROP
iptables -P OUTPUT ACCEPT         # 允许所有出站流量
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # 允许现有连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT   # 允许 HTTP 流量
iptables -A INPUT -p tcp --dport 443 -j ACCEPT  # 允许 HTTPS 流量
使用 firewalld 配置:
bash 复制代码
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
7. 总结

Linux 的防火墙工具如 iptablesfirewalldufw 提供了灵活强大的网络安全管理手段。通过配置和管理防火墙规则,可以有效控制网络流量,防止不必要的外部访问,同时保护系统免受潜在的网络攻击。不同工具适合不同场景,iptables 提供了细粒度的控制,firewalld 提供了动态防火墙管理,而 ufw 则简化了配置过程。

相关推荐
Tak1Na1 分钟前
2024.9.18
linux·运维·服务器
A^mber5 分钟前
828华为云征文|云服务器Flexus X实例|Ubunt部署Vue项目
运维·服务器·华为云
安得权10 分钟前
Ubuntu 20.04 部署 NET8 Web - Systemd 的方式 达到外网访问的目的
linux·前端·ubuntu
chnyi6_ya11 分钟前
深度学习的笔记
服务器·人工智能·pytorch
让学习成为一种生活方式16 分钟前
解析药用植物重楼甾体皂苷生物合成中的连续糖基化及其抗真菌作用-文献精读49
linux·数据库·算法·天然产物化学
凯哥是个大帅比1 小时前
ubuntu20.04 GLIBC从2.35降级到2.31
linux
iHero1 小时前
【Ubuntu】在 Ubuntu 22.04.3 LTS 安装 davfs2 通过 Nextcloud WebDAV 挂载到 Ubuntu 的目录上
linux·ubuntu·nextcloud
心勤则明1 小时前
Netty配置SSL证书加密
服务器·https·ssl
清园暖歌1 小时前
Ubuntu 不重装系统增加交换空间大小
linux·运维·ubuntu·交换空间
黎相思1 小时前
操作系统迁移(CentOs -> Ubuntu)
linux·ubuntu·gitee·centos