当前位置:网站首页>【iptables&icmp】iptables默认策略中关于icmp协议的说明
【iptables&icmp】iptables默认策略中关于icmp协议的说明
2022-06-28 01:38:00 【HunterMichaelG】
一、 默认iptables策略
Linux内核集成的IP信息包过滤系统,linux的包过滤功能,即linux防火墙,它由netfilter和iptables两个组件组成。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。
netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
netfilter组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
CentOS7没有iptables,默认使用firewalld 。
iptables默认无法被systemctl控制,需要安装iptables-services、iptables-devel这两个依赖包。

# yum -y install iptables iptables-services
# yum info iptables-services
# systemctl status iptables
# cat /usr/lib/systemd/system/iptables.service
# rpm -qf /usr/lib/systemd/system/iptables.service
# cat /etc/sysconfig/iptables



# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
iptables 默认策略解读
:INPUT ACCEPT [0:0]
# 该规则表示INPUT表默认策略是ACCEPT
:FORWARD ACCEPT [0:0]
# 该规则表示FORWARD表默认策略是ACCEPT
:OUTPUT ACCEPT [0:0]
# 该规则表示OUTPUT表默认策略是ACCEPT
-A INPUT -p icmp -j ACCEPT
# 该规则表示 OUTPUT表对 icmp协议的默认测试是 ACCEPT
-A INPUT -i lo -j ACCEPT
# -i 参数是指定接口,这里的接口是lo ,lo就是loopback(本地环回接口),意思就允许本地环回接口在INPUT表的所有数据通信。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许进入的数据包只能是刚刚我发出去的数据包的回应
# ESTABLISHED:已建立的链接状态
# RELATED:该数据包与本机发出的数据包有关
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 根据 iptables 策略匹配即停止原则
# 这两条表示在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包,并且发送一条host prohibited的消息给被拒绝的主机
配置文件 /etc/sysconfig/iptables 中的iptables的默认策略,你也可以删除这些,另外建立符合自己需求的策略。
二、 ICMP 协议
协议背景
ICMP,全称是 Internet Control Message Protocol,即互联网控制报文协议,所谓控制,就是通过下发指令来感知和控制网络环境,所以它一定是配合一个无法感知网络环境的协议来工作的,这个协议就是 IP(包括 IPv4 和 IPv6)。
ICMP 通常被认为是 IP 协议的一部分,它封装在 IP 层中,使用 IP 协议进行传输。因此,严格来说,ICMP 既不是一个网络层协议,也不是一个传输层协议,而是介于两者之间的一个协议。
它的主要功能是传输网络诊断信息,信息主要包括两类:
一类是 查询类报文 :主要用于信息的查询和采集,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等等。
另一类是 差错诊断类报文 :主要用于诊断网络故障,比如传输报文被丢弃的原因是什么等等。
我们都知道,IP 协议是一个不可靠协议,如果 IP 包在传输过程中出现错误,比如 checksum 对不上,拥塞,超时等等,那么 IP 包是会直接被丢弃的,之后也不会有进一步的努力来修正。
这是 IP 协议的一个设计准则决定的,也就是 best effort,尽力而为,这样的好处是让 IP 协议尽量保持简单的形态,只负责有效率的数据传输,而更多的质量控制交给高层的协议去处理(比如 TCP)。
但高层能提供质量控制的协议毕竟在少数,所以就需要在下层有协议来辅助 IP 完成必要的网络质量管理,ICMP 协议自然就被提出来了。
通过 ICMP 协议,当 IP 包发生错误的时候,上层发送 IP 包的主机或路由器并不知道下层发生了错误,这个时候,下层的主机或路由器就可以通过发送 ICMP 包,将错误信息汇报给上层,从而让上层的主机或路由器进行调整。
不过需要注意的是,ICMP 仅仅只能提供某些特定类型的错误信息汇报,并不能帮助 IP 协议成为可靠的协议,它能做的事还是有限,但用于基本的网络质量管理是足够了。
ICMP 报文格式格式
如下图所示,ICMP 报文是被封装在 IP 数据报中传输的。
IP 报头中的 Protocol 字段为 1 即表示该报文携带的是 ICMP 报文。
(此处只是为了说明问题,因此 IP 报头是简化了的)

进一步看,ICMP 报头为 4 个字节:
类型 type:占 1 个字节,表示较大范围类型分类的 ICMP 报文
代码 code:占 1 个字节,表示较小范围类型分类的 ICMP 报文(type的细分)
校验和 checksum:占 2 个字节,ICMP checksum 的计算方法类似于 IP checksum,但是不同的是 IP 只校验头部,ICMP 校验头部+数据部分
后面紧接的 ICMP 数据部分,根据前面的类型和代码字段的不同,具有不同的内容。
ICMP报文类型
ICMP 支持的报文类型非常多,详细看下表:
类型字段(type)指代了一大类,代码字段(code)又细分了几大小类。
上面可能不够明确,我们通过下面这两张表来列举一下,由于类型太多了,而且有些平时非常少见,因此,这里我们只列举常见的一些类型。
第一张表:类型表
注:R表示查询报文,E表示差错报文
进一步,对于每种类型,又可以根据代码字段细分多种子类型。
第二张表:类型细分表
通过这两张表,每一种类型的 ICMP 包的意思应该都比较清楚了。
ICMP 相关内核参数
ICMP 相关内核参数,常用的是 net.ipv4.icmp_echo_ignore_all,这是禁 ping 的一个参数,禁 ping 有几种方法。
其他的参数大家有兴趣也可以看看,遇到不懂的直接查这个图即可。
三、参考
对于 ICMP 协议,你想知道的都在这里了
https://mp.weixin.qq.com/s/Su2M5aQ2GXsbrgpVcX3kpQ
ping容易忽略的10点用法和排查问题技巧
https://mp.weixin.qq.com/s/ajE0yJfZo02Mkjmpy27SgA
Linux禁止ping以及开启ping的方法
https://mp.weixin.qq.com/s/5nPbvQeAxfOl-li_oMMdDw
边栏推荐
- 云成本优化有哪些优秀实践?
- [today in history] June 18: JD was born; The online store platform Etsy was established; Facebook releases Libra white paper
- 无代码软件发展简史及未来趋势
- Gateway microservice routing failed to load microservice static resources
- [today in history] June 1: Napster was founded; MS-DOS original author was born; Google sells Google SketchUp
- 将PCAP转换为Json文件的神器:joy(安装篇)
- 抓包整理外篇fiddler————了解工具栏[一]
- [today in history] June 10: Apple II came out; Microsoft acquires gecad; The scientific and technological pioneer who invented the word "software engineering" was born
- ByteDance Interviewer: how to calculate the memory size occupied by a picture
- Interview: how do lists duplicate objects according to their attributes?
猜你喜欢

2-5基础配置-Win2003增加攻击面

Intel Ruixuan A380 graphics card will be launched in China

【插件-statistic】统计代码行数和相关数据
![[today in history] June 25: the father of notebook was born; Windows 98 release; First commercial use of generic product code](/img/ef/a26127284fe57ac049a4313d89cf97.png)
[today in history] June 25: the father of notebook was born; Windows 98 release; First commercial use of generic product code

The graduation season is coming, and the number of college graduates in 2022 has exceeded 10 million for the first time

Usage details of staticlayout

基于STM32的编写

be fond of the new and tired of the old? Why do it companies prefer to spend 20K on recruiting rather than raise salaries to retain old employees

音视频技术开发周刊 | 251

Gateway微服務路由使微服務靜態資源加載失敗
随机推荐
PSM总结
[today in history] June 17: the creator of the term "hypertext" was born; The birth of Novell's chief scientist; Discovery channel on
ADB double click the power key command
字节跳动面试官:一张图片占据的内存大小是如何计算
RichView TRVStyle ParaStyles
Simple file transfer protocol TFTP
第三批入围企业公示!年度TOP100智能网联供应商评选
Unity WebGL打包后怎么运行(火狐配置)
MFC CString to LPVOID
基于STM32的编写
R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化
转载文章:数字经济催生强劲算力需求 英特尔发布多项创新技术挖掘算力潜能
Livedata interview question bank and answers -- 7 consecutive questions for livedata interview~
TensorRT 模型推理优化实现
2-5基础配置-Win2003增加攻击面
[elevator control system] design of elevator control system based on VHDL language and state machine, using state machine
英特尔锐炫A380显卡即将在中国面市
榜单首发——前装搭载率站上10%大关,数字钥匙方案供应商TOP10
[today in history] June 10: Apple II came out; Microsoft acquires gecad; The scientific and technological pioneer who invented the word "software engineering" was born
[today in history] June 13: parent-child disputes in packet switched networks; The founder of game theory was born; The embryonic form of interactive television