【内网】配置firewalld

给服务器配置firewalld服务,启动服务没有报错,但是查看服务状态是没拉起来的

报错: ERROR: Failed to read file "/proc/sys/net/netfilter/nf_conntrack_helper": [Errno 2] No such file or directory: '/proc/sys/net/netfilter/nf_conntrack_helper'

然后在

kernel - Centos 7 Firewall Defaultly Not Working - Unix & Linux Stack Exchange

 中找到了一个解决办法(我也不知道引起这个的原因是什么,用下面的指令可以解决该报错)

depmod
systemctl restart firewalld

防火墙策略配置

不知道为什么我的访问策略设置了之后,要么就所有的ip都可以访问,要么就大家都不可以访问

比如我本机ip是:192.168.0.1;服务器的ip是:192.168.0.100

我配置了的语句是

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.0.1' port port='22' protocol='tcp' accept"

单这一句的话,我自己的机器可以访问服务器,但是隔壁的 192.168.0.2机器也可以访问服务器

然后在网上看了之后又加了一句“拦截所有对22端口的访问”

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="22" protocol="tcp" reject

网上查到说:这句要放在放行那句的后面,因为防火墙的策略是从上往下的

但是添加了这条之后我的本机也不能访问服务器了…

于是弃用了这个方法,改用别的方法,见下文


Zone的概念

https://www.cnblogs.com/pixy/p/5156739.html

这篇文章中介绍了zone的概念(以下内容引用于上面的两篇文章) 

  • firewalld提供了9个zone:
    • drop        任何流入的包都被丢弃,不做任何响应。只允许流出的数据包。
    • block    任何流入的包都被拒绝,返回icmp-host-prohibited报文(ipv4)或icmp6-adm-prohibited报文(ipv6)。只允许由该系统初始化的网络连接
    • public     默认的zone。部分公开,不信任网络中其他计算机,只放行特定服务。 
    • external    只允许选中的服务通过,用在路由器等启用伪装的外部网络。认为网路中其他计算器不可信。
    • dmz         允许隔离区(dmz)中的电脑有限的被外界网络访问,只允许选中的服务通过。
    • work          用在工作网络。你信任网络中的大多数计算机不会影响你的计算机,只允许选中的服务通过。
    • home        用在家庭网络。信任网络中的大多数计算机,只允许选中的服务通过。
    • internal     用在内部网络。信任网络中的大多数计算机,只允许选中的服务通过。
    • trusted     允许所有网络连接,即使没有开放任何服务,那么使用此zone的流量照样通过(一路绿灯)。

 白名单配置

https://www.cnblogs.com/sangria/p/18176900

 1、配置信任源

# 添加 IP 地址范围到 "trusted" 的区域
# firewall-cmd --permanent --zone=trusted --add-source=10.60.22.0/24 这条的文章里的

firewall-cmd --permanent --zone=trusted --add-source=192.168.0.1

# 删除IP

firewall-cmd --permanent --zone=trusted --remove-source=192.168.0.1

2、配置默认拒绝

# 将默认的防火墙区域设置为 "drop",drop区域会把所有的包丢弃,但是trusted区域优先级会更高就不会被丢弃
firewall-cmd --set-default-zone=drop
# 将网络接口 eth0 分配给 "drop" 区域
firewall-cmd --permanent --zone=drop --change-interface=eth0 

3、重新加载防火墙配置

firewall-cmd --reload
firewall-cmd --get-active-zones 

配置成功应该得到如下结果

drop
  interfaces: eth0
trusted
  sources: 192.168.0.1

现在测试,就可以让白名单中的ip正常访问了 。

#!/bin/bash

# 定义一个数组,保存所有要放行的IP地址范围
trusted_sources=(
  "10.60.22.0/24"
  "10.60.23.0/24"
)

# 遍历数组,添加 IP 地址范围到 "trusted" 区域
for ip in "${trusted_sources[@]}"; do
  firewall-cmd --permanent --zone=trusted --add-source="$ip"
done

# 配置默认拒绝
firewall-cmd --set-default-zone=drop

# 将网络接口 eth0 分配给 "drop" 区域
firewall-cmd --permanent --zone=drop --change-interface=eth0

# Reload 防火墙
firewall-cmd --reload

# 显示当前活动的防火墙区域
firewall-cmd --get-active-zones

到这里我还不明白为什么一开始给public配置的策略不生效


下面是一个脚本,用来配置firewalld,放行指定ip访问指定端口(emmm不好用,建议不用)

#!/bin/bash

# 启动 firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 定义一个包含允许访问的IP地址的数组
ALLOWED_IPS=("192.168.1.1" "192.168.1.2" "192.168.1.3")  # 添加更多 IP 地址到数组中

# 遍历数组并为每个 IP 地址添加防火墙规则
for IP in "${ALLOWED_IPS[@]}"; do
    echo "Allowing access from $IP to ports 3306 and 22..."
    
    # 允许 IP 访问 3306 端口
    sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$IP' port port='3306' protocol='tcp' accept"
    
    # 允许 IP 访问 22 端口
    sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$IP' port port='22' protocol='tcp' accept"
done

# 拒绝所有其他 IP 对 3306 端口的访问
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="3306" protocol="tcp" reject'

# 拒绝所有其他 IP 对 22 端口的访问
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="22" protocol="tcp" reject'

# 重新加载 firewalld 以应用更改
sudo firewall-cmd --reload

# 显示当前配置以供验证
sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules

echo "Firewalld configuration completed."

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值