防火墙相关
# Linux 虚拟机防火墙配置与管理
在现代的 IT 环境中,虚拟机(VM)已成为资源管理和分配的重要手段。Linux 虚拟机因其开源、灵活和高效的特点而广受欢迎。然而,随着虚拟机的增多,确保它们的安全性变得尤为重要。Linux 虚拟机的防火墙是保护系统不受未授权访问和网络攻击的第一道防线。
本文将探讨 Linux 虚拟机防火墙的配置与管理,以确保您的虚拟环境安全无虞。
# 理解 Linux 防火墙
Linux 系统中有多种防火墙工具可供选择,最常用的是 iptables 和 firewalld。
- iptables 是一个传统的、功能强大的包过滤框架,
- 而 firewalld 则是一个较新的动态管理防火墙,用户友好性更高。
# iptables
iptables 是 Linux 内核中的一个网络包过滤框架,它可以控制进出 Linux 系统的网络流量。
iptables 使用表(tables)和规则(rules)来定义如何处理网络包。
主要的表有:filter(默认,用于过滤流量)、nat(网络地址转换)、mangle(数据包修改)和 raw(原始包处理)。
# 基本 iptables 命令
service iptables status #查看iptable防火墙状态
iptables -L -n -v #查看iptable防火墙规则
systemctl start iptables #打开iptable防火墙
service iptables stop #关闭iptable防火墙
yum install iptables -y #安装iptable防火墙
systemctl enable iptables #开机自启iptable防火墙
systemctl disable firewalld #开机自动关闭iptable防火墙
iptables -F #清空iptable的规则
service iptables save #保存iptable防火墙规则
iptables -A INPUT -p tcp --dport 80 -j REJECT #禁止来自80端口访问的数据包
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许来自80端口访问的数据包
iptables -A OUTPUT -p tcp --sport 80 -j REJECT #禁止从80端口出去的数据包
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT #允许从80端口出去的数据包
iptables -A INPUT -p tcp -s 192.168.1.100 -j DROP #阻止所有来自特定 IP 的流量
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# firewalld
firewalld 是一个动态管理防火墙的守护进程,它使用 D-Bus 来与前端应用程序通信。firewalld 提供了更易于管理和配置的接口,支持区域和区域的概念,可以更细致地控制网络流量。
# 基本 firewalld 命令
查看 firewalld 状态:
systemctl status firewalld
1启动 firewalld 服务:
systemctl start firewalld
1开放端口:
firewall-cmd --permanent --zone=public --add-port=22/tcp
1停止:
systemctl stop firewalld
1禁用:
systemctl disable firewalld
1重新加载 firewalld 配置:
firewall-cmd --reload
1
以下是一些额外的 firewalld
命令,用于管理 Linux 防火墙的规则和配置:
# 添加和删除服务
添加服务到防火墙(例如,添加一个名为
example-service
的服务):sudo firewall-cmd --permanent --add-service=example-service
1删除服务从防火墙:
sudo firewall-cmd --permanent --remove-service=example-service
1
# 管理区域和区域规则
添加一个新的区域(例如,添加一个名为
example-zone
的区域):sudo firewall-cmd --permanent --new-zone=example-zone
1删除一个区域:
sudo firewall-cmd --permanent --delete-zone=example-zone
1将端口添加到特定区域:
sudo firewall-cmd --permanent --zone=example-zone --add-port=8080/tcp
1从区域移除端口:
sudo firewall-cmd --permanent --zone=example-zone --remove-port=8080/tcp
1
# 管理防火墙规则
添加允许规则,允许来自特定 IP 地址的流量:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
1添加拒绝规则,拒绝来自特定 IP 地址的流量:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
1添加转发规则,允许从外部接口转发到内部网络:
sudo firewall-cmd --permanent --add-forward-chain=forward-chain-name
1
# 管理直接规则
添加直接规则,允许从外部接口到内部设备:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" destination address="10.0.0.1" accept'
1删除直接规则:
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" destination address="10.0.0.1" accept'
1
# 查看和导出配置
列出所有永久性和临时规则:
sudo firewall-cmd --list-all
1导出当前的
firewalld
配置到一个文件:sudo firewall-cmd --runtime-to-permanent
1
请注意,使用 --permanent
选项的命令将更改防火墙的永久配置,这些更改在重启后仍然有效。如果您只想临时更改防火墙配置,可以省略 --permanent
选项,但请注意,这些更改在重启后将丢失。
在执行任何防火墙操作之前,请确保您了解这些命令的影响,并在必要时备份您的防火墙配置。
# 虚拟机防火墙配置
在虚拟化环境中,防火墙配置需要考虑宿主机和虚拟机之间的交互。通常,虚拟机会桥接到宿主机的网络,这样虚拟机就可以像物理机一样接入网络。
# 宿主机防火墙配置
宿主机的防火墙配置应允许虚拟机的网络流量通过。例如,如果您使用 NAT,需要设置端口转发规则。
# 虚拟机防火墙配置
虚拟机内部的防火墙配置应基于虚拟机的角色和需要。例如,Web 服务器可能需要开放 80 和 443 端口,而数据库服务器可能只需要开放默认的数据库端口。
# 虚拟机网络隔离
为了防止虚拟机之间的不必要通信,可以使用虚拟网络编辑器创建独立的虚拟网络。这样,每个虚拟机都可以连接到不同的网络,从而实现网络隔离。
# 监控和维护
定期监控和维护防火墙规则是确保虚拟机安全的关键。使用工具如 firewalld 的图形界面或命令行工具可以帮助您跟踪和更新防火墙规则。
# 结论
- Linux 虚拟机的防火墙是保护系统不受网络威胁的重要工具。
- 通过合理配置 iptables 或 firewalld,您可以有效地控制进出虚拟机的网络流量。
- 防火墙规则应根据虚拟机的用途和安全需求进行定制,并定期进行审查和更新。
- firewall 和 iptable 都是 Linux 的防火墙,firewall 调用了 iptable 的 command 去执行内核的 netfilter,也就是底层还是使用 iptables 对内核命令动态通信包过滤,firewall 是 Centos7 里的新防火墙命令,相当于 iptables 的孩子。
# 学习参考
Linux防火墙开启、查看端口等常用命令_linux查看防火墙开放端口命令-CSDN博客 (opens new window)