Skip to content

防火墙

webdes
防火墙

firewalled

在CentOS 7中,默认使用的是firewalld作为防火墙管理工具

置默认区域

CentOS 7中的firewalld将网络接口分配到不同的区域。下面是一些常见的区域及其用途:

bash
public:用于公共网络,通常是不受信任的网络
trusted:用于受信任的网络,例如内部网络
home:用于家庭网络
work:用于工作网络

查看当前的默认区域:

bash
sudo firewall-cmd --get-default-zone

设置默认区域:将 <zone> 替换为希望设置为默认的区域。

bash
sudo firewall-cmd --set-default-zone=<zone>

查看防火墙状态和规则

查看防火墙状态

bash
sudo firewall-cmd --state

使用firewall-config图形界面(可选)

检查开放的端口

要检查哪些端口已经被开放,可以使用以下命令:

bash
sudo firewall-cmd --zone=public --list-ports

查看特定区域的规则:将 <zone> 替换为要查看的区域名称。

bash
sudo firewall-cmd --zone=<zone> --list-all

添加和删除规则

添加开放端口规则:

将在公共区域添加一个开放的TCP端口规则。将<zone>替换为要添加规则的区域名称,将<port>替换为实际的端口号。

sh
sudo firewall-cmd --zone=<zone> --add-port=<port>/tcp --permanent

sudo firewall-cmd --zone=public --add-port=80/tcp --permanent

sudo firewall-cmd --reload

添加允许指定服务的规则:

将在公共区域添加一个允许指定服务的规则。将<zone>替换为要添加规则的区域名称,将 <service> 替换为实际的服务名称,例如 http。

sh
sudo firewall-cmd --zone=<zone> --add-service=<service> --permanent

sudo firewall-cmd --zone=public --add-service=redis --permanent

sudo firewall-cmd --reload

删除规则:

将从公共区域永久删除指定的规则。将<zone>替换为要添加规则的区域名称,将<rule>替换为实际要删除的规则。

sh
sudo firewall-cmd --zone=<zone> --remove-rule=<rule> --permanent

重新加载和永久生效配置

重新加载防火墙配置:

bash
sudo firewall-cmd --reload

永久生效配置:

bash
sudo firewall-cmd --runtime-to-permanent

iptables

centos和Ubuntu都有的防火墙规则

使用 iptables

  1. 安装 iptables 服务(如果尚未安装)

    通常CentOS 7及以下版本默认安装了iptables服务,但在CentOS 8中默认使用firewalld。如果你确实需要使用iptables,可以尝试以下命令:

    bash
    sudo yum install iptables-services
  2. 启动 iptables 服务

    bash
    sudo systemctl start iptables
  3. 设置 iptables 开机自启

    bash
    sudo systemctl enable iptables
  4. 查看当前 iptables 规则

    bash
    sudo iptables -L -v -n
  5. 开放端口

    例如,开放端口 80:

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

    保存规则(取决于你的系统版本,可能需要额外的步骤):

    bash
    sudo service iptables save  # CentOS 6 或较老版本的系统可能需要此命令保存规则,CentOS 7 使用 firewalld。在 CentOS 8 中通常不需要这一步,因为规则会持久化。
  6. 重新加载 iptables 以应用更改(在某些系统上不需要此步骤):

    bash
    sudo systemctl restart iptables  # 在 CentOS 7 或 CentOS 8 使用 firewalld 时,这一步通常不需要。在 CentOS 6 或较老版本中可能需要。