写点什么

iptables 与 firewalld 防火墙是怎么样工作的呢?

作者:阿柠xn
  • 2022 年 9 月 02 日
    陕西
  • 本文字数:2546 字

    阅读完需:约 8 分钟

iptables与firewalld防火墙是怎么样工作的呢?

防火墙管理工具

🏳️‍🌈首先防火墙是作为公网和内网之间的屏障,主要功能是依据策略对穿越防火墙自身的流量进行过滤。

防火墙的策略可以基于流量的源目地址,端口号,协议,应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略相匹配,则执行相应的处理,反之则丢弃。这样就可以保证仅有合法的流量在企业内网和外部公网之间流动了。

其实,iptables 和 firewalld 都不是真正的防火墙,他们都是用来定义防火墙策略的防火墙管理工具而已,或者说他们是一种服务,iptables 服务会把配置好的防火墙策略交由内核层面 netfilter 网络过滤器来处理。而 Firewalld 服务则是把配置好的防火墙策略交由内核层面的 nftables 包过滤框架来处理。

iptables

策略与规则链

防火墙会从上到下的顺序来读取配置的策略规则,在找到匹配项之后就立即结束匹配工作并去执行匹配项中定义的行为(放行或者阻止)。如果在读取完所有的策略规则之后没有匹配项就会执行默认的策略。一般而言,防火墙的默认策略规则设置有两种,一种是通,一种是堵。当防火墙的默认策略为拒绝时,就要设置允许规则,否则谁都进不来。如果防火墙的默认策略为允许,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用。

iptables 服务把用于处理或者过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同机型分类,具体如下:

  • 在进行路由选择前处理数据包(PREROUTING)

  • 处理流入的数据包(INPUT)

  • 处理流出的数据包(OUTPUT)

  • 处理转发的数据包(FORWARD)

  • 在进行路由选择后处理数据包(POSTROUTING)

一般来说,从内网想外网发送的流量一般是可控的良性的,因此我们使用最多的就是 INPUT 规则链,该规则链可以增大黑客入侵的难度。


🙃仅有策略还是不能保证安全的,我们还要对这些流量采取相应的动作来处理。

  • ACCEPT:允许流量通过

  • REJECT: 拒绝流量通过 (拒绝流量通过后,会给发送者回复一个我收到了,但是我丢掉了的信息)

  • LOG: 记录日志信息

  • DROP:拒绝流量通过(直接就丢了,不响应)

iptables 中的基本命令参数


iptables -L   #查看已有的防火墙规则链
复制代码

policy 后面写的那个就是对应操作的默认策略



iptables -F   #清空已有的防火墙规则链
复制代码


iptables -P INPUT DROP  #把INPUT的规则链默认设置为拒绝,#ps别随随便便执行这个呀,我傻乎乎的一执行,得,xshell直接连不上虚拟机,就很完蛋了。
复制代码

需要注意一点,规则链的默认拒绝动作只能是 DROP,而不能是 reject。

1️⃣向规则链中添加允许 ICMP 流量进入的策略规则。

iptables -I INPUT -p ICMP -j ACCEPT
复制代码



2️⃣删除 INPUT 规则链中刚刚加入的那条策略,并把默认策略设置为 ACCEPT

iptables -D INPUT 1iptables -P INPUT ACCEPT
复制代码

3️⃣将 INPUT 规则链设置为只允许指定网段的主机访问本机的 22 端口,拒绝来自其他所有主机的流量:

iptables -I INPUT -s 133.64.51.101/26 -p tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp --dport 22 -j REJECT
复制代码



4️⃣向 INPUT 规则链中添加拒绝所有人访问本机 12345 端口的策略

iptables -I INPUT -p tcp --dport 12345 -j REJECTiptables -I INPUT -p udp --dport 12345 -j REJECT
复制代码

5️⃣向 INPUT 规则链添加拒绝 192.168.10.5 主机访问 80 端口(web 服务)的策略规则:

iptables -I INPUT -s 192.168.10.5 -p tcp --dport 80 -j REJECT
复制代码

6️⃣向 INPUT 规则链中添加拒绝所有主句访问本机 1000-1024 端口的策略规则

iptables -A INPUT -p tcp --dport 1000:1024 -j REJECTiptables -A INPUT -p udp --dport 1000:1024 -j REJECT 
复制代码

❗️要特别注意一点,iptables 命令配置的防火墙规则默认会在系统下一次重启时失效,如果想让配置的防火墙策略永久生效,还要执行保存命令。

service iptables save
复制代码

firewalld

相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同选择合适的策略集合,从而实现防火墙策略之间的快速切换。

firewalld 中常用的区域名称及策略规则

终端管理工具

firewall-cmd 是 firewalld 的防火墙配置管理工具的 CLI(命令行)版本。他的参数一般是以长格式给出。

firewall-cmd 命令中使用的参数以及作用

⚠️使用 firewalld 配置的防火墙策略默认为运行时模式,又称当前生效模式,而随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久模式,方法就是添加 --permanent 参数。


例:1️⃣查看 firewalld 服务当前使用的区域

		firewall-cmd --get-default-zone
复制代码

2️⃣查询 enol6777728 网卡在 firewalld 服务中的区域:

firewall-cmd --get-zone-of-interface=enol6777728
复制代码

3️⃣把 firewalld 服务中 enol6777728 网卡的默认区域修改为 external,并在系统重启后生效。分别查看当前与永久模式下的区域名称:

firewall-cmd -permanent --zone=external --change-interface=enol6777728#successfirewall-cmd --get-zone-of-interface=enol6777728#publicfirewall-cmd --permanent --get-zone-of-interface=enol6777728#external
复制代码

4️⃣把 firewalld 服务的当前默认区域设置为 public

firewall-cmd --set-default-zone=public
复制代码

5️⃣启动 firewall 防火墙服务的应急状况模式,阻断一切网络连接

firewall-cmd --panic-on
复制代码

6️⃣查询 public 区域是否允许请求 ssh 和 https 协议的流量

firewall-cmd --zone=public --query-service=ssh#yes
复制代码

7️⃣把 firewalld 服务中请求 https 协议的流量设置为永久有效,并立即生效。

firewall-cmd  --zone=public --add-service=httpsfirewall-cdm  --permanent --zone=public --add-service=httpsfirewall-cmd  --reload
复制代码

8️⃣把 firewalld 服务中请求 http 协议的流量设置为永久拒绝,并立即生效

firewall-cmd --permanent  --zone=public --remove-service=http#successfirewall-cmd --reload
复制代码

9️⃣把在 firewalld 服务中访问 8080 和 8081 端口的流量策略设置为允许,但仅当前生效

firewall-cmd --zone=public --add-port=8080-8081/tcp#successfirewall-cmd --zone=public --list-ports#8080-8081/tcp
复制代码

🅰️把原本访问本机端口 888 端口的流量转发到 22 端口,当前和长期有效

firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=目标ip地址
复制代码


发布于: 刚刚阅读数: 3
用户头像

阿柠xn

关注

还未添加个人签名 2022.08.29 加入

还未添加个人简介

评论

发布
暂无评论
iptables与firewalld防火墙是怎么样工作的呢?_防火墙_阿柠xn_InfoQ写作社区