Iptables与Firewalld

news2024/12/26 3:07:09

Iptables防火墙

介绍

iptables和netfilter是一套Linux防火墙工具,共同合作完成系统防护工作。iptables 是一个包过滤防火墙,可以对包进行封装、过滤、重定向或者网络地址转换、地址伪装、透明代理、访问控制、连接跟踪等功能,iptables是一个免费开源的软件,工作在用户空间;底层是netfilter,工作在内核空间,是内核的一部分。iptables 在用户空间的插入、修改、删除等操作最终都会作用到netfilter,netfilter 触发相应的回调函数(hook 机制)执行相应的防护动作。

分类

iptables根据保护范围可分为主机防火墙(Filter)和网络防火墙(Nat)

四表(table)五链(chain)

四表:

  • Filter:iptables默认表;负责过滤数据包;内核模块iptable_filter
  • Nat:负责网络地址转换;内核模块iptable_nat
  • Mangle:负责修改数据包头部信息;内核模块iptables_mangle
  • Raw:负责对数据包进行状态跟踪;内核模块iptables_raw

五链:

  • INPUT:负责处理进来的数据包
  • OUTPUT:负责处理出去的数据包
  • FORWARD:负责转发数据包
  • PREROUTING:负责目标地址转换
  • POSTROUTING:负责源地址转换

表链关系

Filter:INPUT、FORWARD、OUTPUT

Nat:PREROUTING、POSTROUTING、OUTPUT

Mangle:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING、OUTPUT

Raw:PREROUTING、OUTPUT

表应用顺序

Raw>>>Mangle>>>Nat>>>Filter

链应用顺序

  • 入站数据

如访问自身Web服务流量。先经过PREROUTING链处理(是否修改数据包地址),再进行路由选择,接着经过INPUT链(是否允许通过)到达程序

  • 转发数据

如经过网关的流量。先经过PREROUTING链处理,再路由选择,接着经过FORWARD链(是否转发或丢弃),然后经过POSTROUTING链(是否修改数据包地址)

  • 出站数据

如自身访问外部的流量。先经过OUTPUT链处理,接着经过POSTROUTING链

规则

管理员预先设定的条件,iptables根据定义的条件来处理数据包

命令

iptable  -t  表名   选项   链名   匹配条件   -j 动作

表:即四表

选项

-P设置默认策略:iptables -P INPUT (DROP
-L查看规则链
-F清空规则链
-I在规则链的前面加入新规则
-A在规则链的末尾加入新规则
-D删除某一条规则
-R替换某条规则

匹配条件

-s IP/MASK匹配源地址
-d IP/MASK匹配目标地址
-i 网卡名匹配从指定网卡流入的数据
-o 网卡名匹配从指定网卡流出的数据
-p匹配协议,如TCP、UDP、ICMP
--dport 端口号匹配目标端口号
--sport 端口号匹配来源端口号

动作

ACCEPT放行数据包,进行完此处理动作后,不再对比其它规则,直接跳往下一个规则链
REJECT拦截数据包,并传送数据包通知对方可以传送的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。

DROP

丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT将包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。 这个功能可以用来实作通透式porxy 或用来保护 web 服务器。
MASQUERADE改写数据包来源 IP为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨号连接时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。
LOG将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动作后,将会继续比对其规则
SNAT改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则
DNAT改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规炼
MIRROR镜像数据包,也就是将来源 IP 与目的地 IP 对调后,将数据包送回,进行完此处理动作后,将会中断过滤程序
QUEUE中断过滤程序,将数据包放入队列,交给其它程序处理
RETURN结束在目前规则链中的过滤程序,返回主规则链继续过滤
MARK将数据包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则

配置

#安装iptables
[root@wenzi ~]#yum -y install iptables-services
[root@wenzi ~]#rpm -ql iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service
/usr/libexec/initscripts/legacy-actions/ip6tables
/usr/libexec/initscripts/legacy-actions/ip6tables/panic
/usr/libexec/initscripts/legacy-actions/ip6tables/save
/usr/libexec/initscripts/legacy-actions/iptables
/usr/libexec/initscripts/legacy-actions/iptables/panic
/usr/libexec/initscripts/legacy-actions/iptables/save
/usr/libexec/iptables
/usr/libexec/iptables/ip6tables.init
/usr/libexec/iptables/iptables.init

[root@m01 ~]# rpm -ql iptables 
/usr/sbin/iptables           
/usr/sbin/iptables-save      
/usr/sbin/iptables-restore

iptables配置文件:/etc/sysconfig/iptables

iptables服务配置文件:/usr/lib/systemd/system/iptables.service

iptables命令:/usr/sbin/iptables

iptables规则:/usr/sbin/iptables-save

恢复:/usr/sbin/iptables-restore

FIrewalld防火墙

内核模块:netfilter

RHEL6中是iptables,RHEL7中是firewalld

区域zone

介绍

过滤规则的集合。每个zone单独对应一个xml配置文件,位于/usr/lib/firewalld/services目录。自定义zone需要新建 zone名.xml文件,然后向其中添加规则。每个zone都有一个默认的处理行为,包括default、ACCEPT、REJECT、DROP

类型

firewalld 将网卡对应到不同的区域zone;最终一个区域的安全程度取决于管理员在此区域中设置的规则;可以根据网络规模,使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口

trusted(信任区域)允许所有网络流量连接,即使没有开放任何服务,那么使用此 zone 的流量照样通过
public(公共区域)默认的 zone,部分公开,不信任网络中其他计算机,只放行特定服务
external(外部区域)允许与 ssh 预定义的服务传入流量,其余均拒绝。默认将通过此区域转发的 IPv4 传出流量进行地址伪装,可用于为路由器启用了伪装功能的外部网络
home(家庭区域)允许与 ssh、ipp-client、mdns、samba-client 或 dhcpv6-client 预定义的服务传入流量,其余均拒绝
internal(内部区域)默认值时与 home 区域相同
work(工作区域)允许与 ssh、ipp-client、dhcpv6-client 预定义的服务传入流量,其余均拒绝
dmz(隔离区域也称为非军事区域)允许与 ssh 预定义的服务传入流量,其余均拒绝
block(限制区域)任何流入的包都被拒绝,返回 icmp-host-prohibited 报文(ipv4)或 icmp6-adm-prohibited 报文(ipv6)。只允许由该系统初始化的网络连接
drop(丢弃区域)任何流入的包都被丢弃,不做任何响应,只允许流出的数据包

常用的firewall-cmd命令选项

  • firewall-config    使用图形界面
  • --reload    重新加载配置,修改 firewalld 配置后需执行此命令
  • --get-default-zone    显示当前默认区域
  • --set-default-zone=    设置默认区域,= 后面跟区域
  • --get-active-zones    显示当前正在使用的区域及其对应的网卡接口
  • --get-zones    显示所有可用的区域
  • --get-zone-of-interface=    显示指定接口绑定的区域,= 后面跟网口
  • --zone= --add-interface=    为指定接口绑定区域
  • --zone= --change-interface=    为指定的区域更改绑定的网络接口
  • --zone= --remove-interface=    为指定的区域删除绑定的网络接口
  • --get-zone-of-source=[/]    显示指定源地址绑定的区域
  • --zone= --add-source=[/]    为指定源地址绑定区域
  • --zone= --change-source=[/]    为指定的区域更改绑定的源地址
  • --zone= --remove-source=[/]    为指定的区域删除绑定的源地址
  • --list-all-zones    显示所有区域及其规则
  • --zone= --list-all    显示所有指定区域的所有规则,省略 --zone= 时表示仅对默认区域操作
  • --zone= --list-services    显示指定区域内允许访问的所有服务
  • --zone= --add-service=    为指定区域设置允许访问的某项服务
  • --zone= --remove-service=    删除指定区域已设置的允许访问的某项服务
  • --zone= --list-ports    显示指定区域内允许访问的所有端口号
  • --zone= --add-port=[端口号]/[协议名]    为指定区域设置允许访问的某个或某段端口号(包括协议名)
  • --zone= --remove-port=[端口号]/[协议名]    删除指定区域已设置的允许访问的端口号(包括协议名)
  • --zone= --list-icmp-blocks    显示指定区域内拒绝访问的所有 ICMP 类型
  • --zone= --add-icmp-block=    为指定区域设置拒绝访问的某项 ICMP 类型
  • --zone= --remove-icmp-block=    删除指定区域已设置的拒绝访问的某项 ICMP 类型
  • firewall-cmd --get-icmptypes    显示所有 ICMP 类型

实验

web服务器 192.168.29.141     客户端 192.168.29.1

#检查firewalld是否开启
[root@wenzi ~]#systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2023-07-09 04:22:46 CST; 6s ago
     Docs: man:firewalld(1)
 Main PID: 1483 (firewalld)
    Tasks: 2 (limit: 4840)
   Memory: 30.0M
   CGroup: /system.slice/firewalld.service
           └─1483 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
#安装httpd
[root@wenzi ~]#yum -y install httpd
[root@wenzi ~]#systemctl start httpd.service 
[root@wenzi ~]#systemctl status httpd.service 
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2023-07-09 04:25:00 CST; 36s ago
     Docs: man:httpd.service(8)
 Main PID: 2076 (httpd)
   Status: "Running, listening on: port 80"
    Tasks: 213 (limit: 4840)
   Memory: 33.5M
   CGroup: /system.slice/httpd.service
           ├─2076 /usr/sbin/httpd -DFOREGROUND
           ├─2078 /usr/sbin/httpd -DFOREGROUND
           ├─2079 /usr/sbin/httpd -DFOREGROUND
           ├─2080 /usr/sbin/httpd -DFOREGROUND
           └─2081 /usr/sbin/httpd -DFOREGROUND

#查看当前默认区域
[root@wenzi ~]#firewall-cmd --get-default-zone 
public
#查看所有可用区域
[root@wenzi ~]#firewall-cmd --get-zones 
block dmz drop external home internal public trusted work
#查看当前正在使用的区域及对应的网卡接口
[root@wenzi ~]#firewall-cmd --get-active-zones 
public
  interfaces: ens160

使用客户端访问web服务,无法访问主页

方式一、将使用的区域设定为trusted

[root@wenzi ~]#firewall-cmd --set-default-zone=trusted 
success
[root@wenzi ~]#firewall-cmd --reload 
success
[root@wenzi ~]#firewall-cmd --get-active-zones 
trusted
  interfaces: ens160

客户端再次访问,访问成功 

方式二、放行80端口

#查看已放行端口
[root@wenzi ~]#firewall-cmd --list-ports 

#查看public中规则
[root@wenzi ~]#firewall-cmd --zone=public --list-all 
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
#放行80端口
[root@wenzi ~]#firewall-cmd --zone=public --add-port=80/tcp --permanent 
success
[root@wenzi ~]#firewall-cmd --reload 
success
[root@wenzi ~]#firewall-cmd --zone=public --list-all 
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

客户端再次访问,访问成功

三、放行http服务

[root@wenzi ~]#firewall-cmd --zone=public --add-service=http --permanent 
success
[root@wenzi ~]#firewall-cmd --reload 
success
[root@wenzi ~]#firewall-cmd --zone=public --list-all 
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: cockpit dhcpv6-client http ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

客户端再次访问,访问成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.6 x64dbg 内存扫描与查壳实现

LyScript 插件中默认提供了多种内存特征扫描函数,每一种扫描函数用法各不相同,在使用扫描函数时应首先搞清楚不同函数之间的差异,本章内容将分别详细介绍每一种内存扫描函数是如何灵活运用,并实现一种内存查壳脚本,可快…

Linux常用命令——exec命令

在线Linux命令查询工具 exec 调用并执行指定的命令 补充说明 exec命令用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。 语法 exec(选项)(参数…

计算机组成原理32位MIPS CPU设计实验(指令译码器电路设计 、时序发生器状态机设计、时序发生器输出函数、硬布线控制器)

实验四 32位MIPS CPU设计实验 这次实验是32位MIPS CPU设计实验(单总线CPU-定长指令周期-3级时序),在头歌当中一共需要我们进行六道题的测试,分别为MIPS指令译码器设计,定长指令周期(时序发生FSM设计,时序发…

数据结构05:树与二叉树[C++][哈夫曼树HuffmanTree]

图源:文心一言 考研笔记整理6k字,小白友好、代码可跑,请小伙伴放心食用~~🥝🥝 第1版:查资料、画导图、画配图~🧩🧩 参考用书:王道考研《2024年 数据结构考研复习指导》…

一纸文书之MySQL的回忆录

MySQL要点学习:你可以在简历上说熟悉MySQL 什么是数据库?什么是数据库管理系统?什么是MySQL?什么是SQL?数据库数据库管理系统:SQL:结构化查询语言三者之间的关系 安装MySQL数据库管理系统MySQL常…

数据增强之裁剪、翻转与旋转

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 数据增强 Data Augmentation裁剪Croptransforms.CenterCroptransforms.RandomCroptransforms.RandomResizedCroptra…

【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块7

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

TortoiseGit 入门指南02:创建和克隆仓库

图标 本节讲解如何使用 TortoiseGit 创建和克隆仓库。但在此之前,我们先来看下 TortoiseGit 软件的一个特色:图标。 TortoiseGit 会给 工作区 中的文件和文件夹叠加图标(Icon Overlays),图标反应的是这些文件和文件夹…

跳表很难吗?手把手教你如何跳跃它!

文章目录 Ⅰ. 前言Ⅱ. 跳表(skiplist)1、什么是跳表2、跳表的发明历程3、跳表的搜索方式 Ⅲ. skiplist的算法性能分析1、理论准备2、性能分析(了解即可,主要记结论) Ⅳ. skiplist与平衡树、哈希表的比较Ⅴ. skiplist的…

【数字信号处理】线性调频Z(Chirp-Z,CZT)算法详解

CZT变换算法的引入 CZT算法的基本原理 注意:这里所要分析的复频谱点数为 M M M,这也是CZT变换之后的点数。

MySQL之DML和DDL

1、显示所有职工的基本信息: 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。 …

CentOS环境下的MYSQL8安装

MySQL 安装 参考连接:https://www.cnblogs.com/jasonx1an/p/16690866.html 下载 下载网址:https://dev.mysql.com/downloads/mysql/ 卸载 mariadb 查看 mariadb rpm -qa|grep mariadb卸载 mariadb rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps再…

深度学习调参技巧

一、常用的网络模型训练技巧? 使用更大的 batch size。使用更大的 batch size 可以加快训练的进度。但是对于凸优化问题,收敛速度会随着 batch size 的增加而降低。所以在相同的 epoch 下,使用更大的 batch size 可能会导致验证集的 acc更低…

Unittest加载执行用例的方法总结

目录 前言 方式1 方式2 方式3 方式4 方式5 方式6 方式7 总结 前言 说到测试框架,unittest是我最先接触的自动化测试框架之一了, 而且也是用的时间最长的, unittest框架有很多方法加载用例,让我们针对不同的项目&#xff0…

23 | MySQL是怎么保证数据不丢的?

以下内容出自《MySQL 实战 45 讲》 23 | MySQL是怎么保证数据不丢的? binlog 的写入机制 1、事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。 2、一个事务的 binlog 是不能被…

rust学习-所有权

运行程序必须管理使用内存的方式 (1)一些语言中具有垃圾回收机制,程序运行时不断寻找不再使用的内存 (2)一些语言中,开发者必须亲自分配和释放内存 (3)Rust 通过所有权系统管理内存…

Windows操作系统安全加固

Windows操作系统安全加固 一、安全加固基本思路1.1、安全基线1.2、系统信息审查 二、Windows安全配置加固2.1、漏洞修复——补丁安装2.2、漏洞修复——端口封禁2.2.1、windows高危端口加固实践——封禁135端口对外开放 2.3、安全配置加固——账号口令 一、安全加固基本思路 1.…

10.20UEC++/代理,单播,多播

构建一个无参无返回值类型的函数(也可以有参有返回值类型) 相对应的构建一个无参无返回值类型的代理

【计算机组成与体系结构课程设计】上机考试

1 (1) 针对图中的MIPS处理器数据通路(不考虑I/O),用红色或蓝色描出执行sw指令时的数据通路。(将该图下载到电脑,并用画图完成描线) (2) 写出执行sw指令时,各个元件控制端信号应该置什么值? 2 基于Minisys处理…