centos7下的防火墙工具使用

在 CentOS 中,firewalld、iptables 和 SELinux 是三种关键的安全组件,它们提供了不同层次的访问控制和防护机制

Firewalld

firewalld 是 CentOS 7 中默认的防火墙管理工具,用于动态管理网络端口和服务的访问权限。

功能和特点

  • 动态规则管理:可以在不重新加载整个防火墙的情况下,添加、修改或删除规则。
  • 区域(Zone)概念:根据网络信任级别,firewalld 将网络接口分配到不同的区域,每个区域有不同的防护级别。
  • 服务管理:可以根据服务名称(如http, mysql)而不是端口号来配置防火墙规则。

基本操作

启动、停止、重启 firewalld:

sudo systemctl start firewalld      # 启动 firewalld
sudo systemctl stop firewalld       # 停止 firewalld
sudo systemctl restart firewalld    # 重启 firewalld
sudo systemctl reload firewalld     # 重新加载配置

启用或禁用 firewalld 开机启动:

sudo systemctl enable firewalld     # 开机时启用 firewalld
sudo systemctl disable firewalld    # 开机时禁用 firewalld

查看 firewalld 状态:

sudo systemctl status firewalld     # 查看 firewalld 服务状态
sudo firewall-cmd --state           # 查看 firewalld 是否在运行
  1. 区域管理
    firewalld 使用区域(Zone)来管理不同信任级别的网络接口。

查看所有区域:

sudo firewall-cmd --get-zones

查看当前活动区域:

sudo firewall-cmd --get-active-zones

查看某个区域的详细信息:

sudo firewall-cmd --zone=public --list-all

更改默认区域:

sudo firewall-cmd --set-default-zone=public

将网络接口分配到某个区域:

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload   # 重载配置使更改生效
  1. 端口管理
    开放端口:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

移除已开放的端口:

sudo firewall-cmd --zone=public --remove-port=3306/tcp --permanent
sudo firewall-cmd --reload

查看已开放的端口:

sudo firewall-cmd --zone=public --list-ports
  1. 服务管理
    允许某服务通过防火墙:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

移除某服务的访问权限:

sudo firewall-cmd --zone=public --remove-service=http --permanent
sudo firewall-cmd --reload

查看某区域已允许的服务:

sudo firewall-cmd --zone=public --list-services
  1. Rich Rules(高级规则)
    firewalld 支持使用 Rich Rules 来创建更加复杂的防火墙规则。

添加 Rich Rule:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.10" port port=22 protocol=tcp accept' --permanent
sudo firewall-cmd --reload

删除 Rich Rule:

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.10" port port=22 protocol=tcp accept' --permanent
sudo firewall-cmd --reload
  1. 伪装、转发、源地址规则
    启用 IP 伪装(NAT):
sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --reload

禁用 IP 伪装:

sudo firewall-cmd --zone=public --remove-masquerade --permanent
sudo firewall-cmd --reload

启用端口转发:

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reload

添加源地址:

sudo firewall-cmd --zone=public --add-source=192.168.0.0/24 --permanent
sudo firewall-cmd --reload
  1. 其他实用命令
    查看 firewalld 版本:
sudo firewall-cmd --version

查看当前运行时配置:

sudo firewall-cmd --runtime-to-permanent

重置 firewalld 配置:

sudo firewall-cmd --complete-reload

查询指定端口是否允许:

sudo firewall-cmd --zone=public --query-port=8080/tcp

查询指定服务是否允许:

sudo firewall-cmd --zone=public --query-service=http

Iptables

iptables 是 Linux 系统中的数据包过滤工具,它是防火墙的核心部分,允许用户定义复杂的规则来控制数据包的处理方式。

功能和特点

  • 手动配置:iptables 提供了对网络流量的精细控制,但配置更加手动和底层。
  • 链和规则:iptables 使用链(chain)和规则(rule)来处理数据包流。
  • 表(table):包含不同的表,如filter(默认表)、nat(用于网络地址转换)、mangle(用于修改数据包内容)。
  1. 基本操作
    查看当前的规则:
sudo iptables -L             # 列出所有规则
sudo iptables -L -v          # 显示详细信息
sudo iptables -L -v -n       # 显示详细信息,并使用数字表示IP和端口
sudo iptables -S             # 以命令格式列出所有规则

清空所有规则:

sudo iptables -F             # 清空所有规则
sudo iptables -X             # 删除所有自定义链
sudo iptables -Z             # 将所有计数器置零

保存规则(不同系统可能使用不同命令):

sudo service iptables save   # 保存当前规则到配置文件
sudo iptables-save > /etc/sysconfig/iptables  # 手动保存

恢复规则:

sudo service iptables restart  # 重启iptables并加载保存的规则
sudo iptables-restore < /etc/sysconfig/iptables  # 手动恢复
  1. 链与表的操作
    表(Table):
  • filter:默认表,用于过滤数据包。
  • nat:用于网络地址转换(NAT)。
  • mangle:用于修改数据包内容。
  • raw:用于在连接跟踪之前处理数据包。

链(Chain):

  • INPUT:处理进入系统的数据包。
  • OUTPUT:处理离开系统的数据包。
  • FORWARD:处理转发的数据包。
  • PREROUTING:数据包到达前处理(用于 nat 表)。
  • POSTROUTING:数据包离开前处理(用于 nat 表)。

创建自定义链:

sudo iptables -N custom_chain  # 创建名为 custom_chain 的新链

删除自定义链:

sudo iptables -X custom_chain  # 删除名为 custom_chain 的链
  1. 规则管理
    添加规则:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # 允许 SSH 连接
sudo iptables -A INPUT -p tcp --dport 80 -j DROP    # 拒绝 HTTP 连接

插入规则:

sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT  # 在链的顶部插入规则

删除规则:

sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT  # 删除匹配的规则
sudo iptables -D INPUT 1                            # 删除 INPUT 链中的第一条规则

替换规则:

sudo iptables -R INPUT 1 -p tcp --dport 22 -j DROP  # 替换 INPUT 链中的第一条规则
  1. 规则条件
    协议:
-p tcp   # TCP协议
-p udp   # UDP协议
-p icmp  # ICMP协议

端口:

--sport 22  # 源端口
--dport 80  # 目标端口

源和目标地址:

-s 192.168.1.1    # 源IP地址
-d 192.168.1.2    # 目标IP地址

接口:

-i eth0  # 输入接口
-o eth1  # 输出接口
  1. NAT 和端口转发
    源地址伪装(SNAT):
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 1.2.3.4

目标地址转换(DNAT):

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080

启用 IP 伪装(Masquerade):

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  1. 状态检查
    查看连接跟踪:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  # 允许已建立和相关连接的数据包

限制连接速率:

sudo iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min -j ACCEPT  # 每分钟限制为5个连接
  1. 记录与日志
    记录数据包日志:
sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "

设置规则不进行连接跟踪:

sudo iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
  1. 其他操作
    阻止 Ping:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

允许所有环回接口流量:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

允许特定网络段的访问:

sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT

启用/禁用 IP 转发:

echo 1 > /proc/sys/net/ipv4/ip_forward  # 启用
echo 0 > /proc/sys/net/ipv4/ip_forward  # 禁用

SELinux

SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块,提供了基于强制访问控制(MAC)的安全策略。

功能和特点
强制访问控制:SELinux 强制执行策略以控制系统中各个进程和用户之间的交互,即使是 root 用户也必须遵守。

三种模式:

  • Enforcing:启用并强制执行 SELinux 安全策略,阻止未授权操作。
  • Permissive:启用 SELinux,但不会强制执行策略,仅记录警告。
  • Disabled:禁用 SELinux。
  • 上下文(Context):每个文件、进程、端口等都有一个安全上下文,用于确定访问权限。

常用命令
查看 SELinux 状态:

sestatus

临时禁用 SELinux:将 SELinux 设为 Permissive 模式

setenforce 0  

永久禁用 SELinux:

vi /etc/selinux/config

修改以下内容

SELINUX=disabled

查看sellinux当前默认模式

getenforce 0

防火墙管理:一般情况下,使用 firewalld 来管理防火墙规则,因为它更加灵活和易用。如果需要更复杂和细粒度的控制,可以在 firewalld 的基础上使用 iptables。

SELinux:应根据系统安全需求决定是否启用 SELinux。如果启用,确保相应的策略和上下文已正确配置,避免阻止合法操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huhy~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值