iptables的一次修复日志

iptables的一次修复日志

搭建配置wireguard后,使用内网连接设备十分方便,我采用的是星型连接,即每个节点都连接到中心节点,但是突然发生了重启wg后中心节点不转发流量的问题,即每个接入的节点只能与中心节点连接,而节点与节点间无法连接。然而reboot重启中心节点机器后,wg内网却能正常工作。最后发现是iptables配置的问题。借此机会熟悉了iptables的逻辑。

1. 发现和解决问题

1.1 现象

当时中心节点上挂了 ipsec,wireguard,和docker等,当时也不知道是谁干的好事,我甚至不知道ipsec也写了这个表,最后锁定了问题出在FORWARD 链。具体是这样的
重启wireguard,复现了问题后,使用

sudo iptables -nvL

查看这个表,最后观察到这个表是这样的。

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     195K   51M DOCKER-USER  0    --  *      *       0.0.0.0/0            0.0.0.0/0           
2     195K   51M DOCKER-ISOLATION-STAGE-1  0    --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     0    --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
4        0     0 DOCKER     0    --  *      docker0  0.0.0.0/0            0.0.0.0/0           
5        0     0 ACCEPT     0    --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
6        0     0 ACCEPT     0    --  docker0 docker0  0.0.0.0/0            0.0.0.0/0           
7       20   800 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
8        0     0 ACCEPT     0    --  eth0   ppp+    0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
9        0     0 ACCEPT     0    --  ppp+   eth0    0.0.0.0/0            0.0.0.0/0           
10       0     0 ACCEPT     0    --  ppp+   ppp+    0.0.0.0/0            0.0.0.0/0           
11       0     0 ACCEPT     0    --  eth0   *       0.0.0.0/0            192.168.43.0/24      ctstate RELATED,ESTABLISHED
12       0     0 ACCEPT     0    --  *      eth0    192.168.43.0/24      0.0.0.0/0           
13       0     0 ACCEPT     0    --  *      ppp+    192.168.43.0/24      0.0.0.0/0           
14       0     0 ACCEPT     0    --  wg2    *       0.0.0.0/0            0.0.0.0/0           
15       0     0 ACCEPT     0    --  *      wg2     0.0.0.0/0            0.0.0.0/0           
16     393 26860 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           
17       0     0 ACCEPT     0    --  wg2    *       0.0.0.0/0            0.0.0.0/0           
18       0     0 ACCEPT     0    --  *      wg2     0.0.0.0/0            0.0.0.0/0           
19       0     0 ACCEPT     0    --  wg0    *       0.0.0.0/0            0.0.0.0/0           
20       0     0 ACCEPT     0    --  *      wg0     0.0.0.0/0            0.0.0.0/0           
21       0     0 ACCEPT     0    --  wg0    *       0.0.0.0/0            0.0.0.0/0           
22       0     0 ACCEPT     0    --  *      wg0     0.0.0.0/0            0.0.0.0/0           

流量从上往下匹配,在匹配到wg0的规则前,匹配到了DROP,卒。
然后reboot重启了机器,FORWARD链变成了这样

1      491  106K DOCKER-USER  0    --  *      *       0.0.0.0/0            0.0.0.0/0           
2      491  106K DOCKER-ISOLATION-STAGE-1  0    --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     0    --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
4        0     0 DOCKER     0    --  *      docker0  0.0.0.0/0            0.0.0.0/0           
5        0     0 ACCEPT     0    --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
6        0     0 ACCEPT     0    --  docker0 docker0  0.0.0.0/0            0.0.0.0/0           
7        0     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
8        0     0 ACCEPT     0    --  eth0   ppp+    0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
9        0     0 ACCEPT     0    --  ppp+   eth0    0.0.0.0/0            0.0.0.0/0           
10       0     0 ACCEPT     0    --  ppp+   ppp+    0.0.0.0/0            0.0.0.0/0           
11       0     0 ACCEPT     0    --  eth0   *       0.0.0.0/0            192.168.43.0/24      ctstate RELATED,ESTABLISHED
12       0     0 ACCEPT     0    --  *      eth0    192.168.43.0/24      0.0.0.0/0           
13       0     0 ACCEPT     0    --  *      ppp+    192.168.43.0/24      0.0.0.0/0           
14       0     0 ACCEPT     0    --  wg2    *       0.0.0.0/0            0.0.0.0/0           
15       0     0 ACCEPT     0    --  *      wg2     0.0.0.0/0            0.0.0.0/0           
16     491  106K ACCEPT     0    --  wg0    *       0.0.0.0/0            0.0.0.0/0           
17       0     0 ACCEPT     0    --  *      wg0     0.0.0.0/0            0.0.0.0/0           
18       0     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           
19       0     0 ACCEPT     0    --  wg2    *       0.0.0.0/0            0.0.0.0/0           
20       0     0 ACCEPT     0    --  *      wg2     0.0.0.0/0            0.0.0.0/0           
21       0     0 ACCEPT     0    --  wg0    *       0.0.0.0/0            0.0.0.0/0           
22       0     0 ACCEPT     0    --  *      wg0     0.0.0.0/0            0.0.0.0/0                

因为有wg0的规则出现在了DROP之前,所以流量成功的走了出来。

1.2 补充知识点

iptables中的-A和-I,一个是Insert,一个是Append,Insert会直接插在链规则的最前边,Append则是会直接插在最后边。

1.3 解决问题

看了下wg0.conf是怎么写的

Address = **.**.**.1/24
PrivateKey = *******************************************=
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
publickey = *******************************************=
AllowedIPs = **.**.**.2/32

[Peer]
publickey = *******************************************=
AllowedIPs = **.**.**.3/32

[Peer]
publickey = *******************************************=
AllowedIPs = **.**.**.4/32

[Peer]
publickey =  *******************************************=
AllowedIPs = **.**.**.5/32

... ...

其中的PostUp和PostDown被执行,-A 指定了规则append到该表该链的所有规则的后边。
所以reboot重启机器的时候,由于DROP最后才被append加进来,而wireguard的规则先append进来了,所以从上往下执行。就没事。
然而此后重启wireguard,由于重新append时append到了DROP后边,所以该规则没能先于DROP被执行
所以只要重启的时候使用Insert而不是Append就解决了,即把PostUP中的"-A"换成"-I",即

PostUp   = iptables -I FORWARD -i %i -j ACCEPT; iptables -I FORWARD -o %i -j ACCEPT; iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

问题就解决了。

2. 问题的解释

关于wg0的规则并排的0有两条,一条是in * out wg0 ,一条是in wg0 out *,它们是冗余的,因为有路由表保证了只有来自wg0的流量才会到wg0。

3.排查docker和ipsec

缺德的DROP是谁添加的呢?为了观察这一点,首先引入了两条工具

3.1 工具

iptables的注释
语法是

iptables -m comment --comment "My comments here"

具体使用案例(直接写在wg0.conf里)

PostUp   = iptables -I FORWARD -i %i -m comment --comment "Added in wg0.conf" -j ACCEPT; iptables -I FORWARD -o %i -m comment --comment "Added in wg0.conf" -j ACCEPT; iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

这样就可以在打印iptables表的时候看到注释。

sudo iptables -nvL
 4270  203K ACCEPT     0    --  *      wg0     0.0.0.0/0            0.0.0.0/0            /* Added in wg0.conf */
    0     0 ACCEPT     0    --  wg0    *       0.0.0.0/0            0.0.0.0/0            /* Added in wg0.conf */

TRACE功能
执行以下命令

iptables -t raw -I PREROUTING -d **.**.**.70 -j TRACE

在raw表的PREROUTING链中添加这条规则,
这样在到**.**.**.70的流量如何通过的iptables就可以观察了。观察的方法是执行以下命令

sudo xtables-monitor -t

事后我看到的是这样的情况

PACKET: 2 31ae5dec IN=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=128 ID=59853
 TRACE: 2 31ae5dec raw:PREROUTING:rule:0x2:CONTINUE  -4 -t raw -A PREROUTING -d 11.11.11.70/32 -j TRACE
 TRACE: 2 31ae5dec raw:PREROUTING:return:
 TRACE: 2 31ae5dec raw:PREROUTING:policy:ACCEPT
 TRACE: 2 31ae5dec nat:PREROUTING:return:
 TRACE: 2 31ae5dec nat:PREROUTING:policy:ACCEPT
PACKET: 2 31ae5dec IN=wg0 OUT=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=127 ID=59853
 TRACE: 2 31ae5dec filter:FORWARD:rule:0x25:ACCEPT  -4 -t filter -A FORWARD -o wg0 -m comment --comment "Added in wg0.conf" -j ACCEPT
 TRACE: 2 31ae5dec nat:POSTROUTING:return:
 TRACE: 2 31ae5dec nat:POSTROUTING:policy:ACCEPT
PACKET: 2 510f38f9 IN=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=128 ID=59854
 TRACE: 2 510f38f9 raw:PREROUTING:rule:0x2:CONTINUE  -4 -t raw -A PREROUTING -d 11.11.11.70/32 -j TRACE
 TRACE: 2 510f38f9 raw:PREROUTING:return:
 TRACE: 2 510f38f9 raw:PREROUTING:policy:ACCEPT
PACKET: 2 510f38f9 IN=wg0 OUT=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=127 ID=59854
 TRACE: 2 510f38f9 filter:FORWARD:rule:0x25:ACCEPT  -4 -t filter -A FORWARD -o wg0 -m comment --comment "Added in wg0.conf" -j ACCEPT
PACKET: 2 47202071 IN=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=128 ID=59855
 TRACE: 2 47202071 raw:PREROUTING:rule:0x2:CONTINUE  -4 -t raw -A PREROUTING -d 11.11.11.70/32 -j TRACE
 TRACE: 2 47202071 raw:PREROUTING:return:
 TRACE: 2 47202071 raw:PREROUTING:policy:ACCEPT
PACKET: 2 47202071 IN=wg0 OUT=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=127 ID=59855
 TRACE: 2 47202071 filter:FORWARD:rule:0x25:ACCEPT  -4 -t filter -A FORWARD -o wg0 -m comment --comment "Added in wg0.conf" -j ACCEPT
PACKET: 2 47202071 IN=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=128 ID=59856
 TRACE: 2 47202071 raw:PREROUTING:rule:0x2:CONTINUE  -4 -t raw -A PREROUTING -d 11.11.11.70/32 -j TRACE
 TRACE: 2 47202071 raw:PREROUTING:return:
 TRACE: 2 47202071 raw:PREROUTING:policy:ACCEPT
PACKET: 2 47202071 IN=wg0 OUT=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=127 ID=59856
 TRACE: 2 47202071 filter:FORWARD:rule:0x25:ACCEPT  -4 -t filter -A FORWARD -o wg0 -m comment --comment "Added in wg0.conf" -j ACCEPT

当时的情况是

PACKET: 2 831e9d23 IN=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=128 ID=59207 
TRACE: 2 831e9d23 raw:PREROUTING:rule:0x2:CONTINUE  -4 -t raw -A PREROUTING -d 11.11.11.70/32 -j TRACE
TRACE: 2 831e9d23 raw:PREROUTING:return:
TRACE: 2 831e9d23 raw:PREROUTING:policy:ACCEPT 
TRACE: 2 831e9d23 nat:PREROUTING:return:
TRACE: 2 831e9d23 nat:PREROUTING:policy:ACCEPT 
PACKET: 2 831e9d23 IN=wg0 OUT=wg0 SRC=11.11.11.20 DST=11.11.11.70 LEN=60 TOS=0x0 TTL=127 ID=59207 
TRACE: 2 831e9d23 filter:FORWARD:rule:0x36:JUMP:DOCKER-USER  -4 -t filter -A FORWARD -j DOCKER-USER
TRACE: 2 831e9d23 filter:DOCKER-USER:return:
TRACE: 2 831e9d23 filter:FORWARD:rule:0x33:JUMP:DOCKER-ISOLATION-STAGE-1  -4 -t filter -A FORWARD -j DOCKER-ISOLATION-STAGE-1
TRACE: 2 831e9d23 filter:DOCKER-ISOLATION-STAGE-1:return:
TRACE: 2 831e9d23 filter:FORWARD:rule:0x1f:DROP  -4 -t filter -A FORWARD -j DROP

就是通过这个DROP发现的问题。

3.2 排查结果

其实上边的工具都没用上,最后发现是ipsec写的DROP,它还同时添加了两条wg0的规则,导致wg0的规则出现了四次。

它想做的是用一个DROP兜底,结果不幸的是我的wg规则append了在它后边。其实这个DROP应该写进policy。

由于iptables大家一起用,所以我感觉在最后append一个DROP这种行为其实本身就很不负责。调整了ipsec,结束维护。

4.iptables的三表五链

三表: nat,mangle,filter,(raw)
五链: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

请收好|实验室仪器管理知识大全

实验室的仪器设备是直接用于提供检测结果或辅助检测进行的,是实验室的重要资产,也是重要的检测工具。对检测结果的准确性和可靠性起到至关重要的作用。如何保持仪器设备的有效性和可靠性,使仪器设备处于完好的状态,在产品质量检测…

使用Dockerfile构建hexo博客镜像,并部署

基于centos7.9父镜像构建hexo:1.0镜像&#xff1a; cat << eof > Dockerfile # 根镜像 FROM centos:7.9.2009 MAINTAINER qv123<qv1095322098163.com> # 设置工作目录 WORKDIR /usr/src/app # 暴露端口号 EXPOSE 4000 # 作者注释 MAINTAINER qv123<qv1095322…

“绵柔的,好喝的”海之蓝畅销20年的经典秘诀:做大众喜爱的好酒

执笔 | 尼 奥 编辑 | 萧 萧 在中国白酒历史长河中&#xff0c;有的品牌如大浪淘沙而灰飞烟灭&#xff0c;也有的白酒品牌因为不断创新而经久不衰。我们时常在思考一个产业命题&#xff1a;白酒品牌常青的秘诀到底是什么&#xff1f; 经过20多年的产业发展&#xff0c;中国…

壹基金宣传进瑞金河背街社区 安全家园项目防灾减灾深入人心

11月16日下午&#xff0c;瑞金赋能公益、蓝天救援队等联合象湖镇河背街社区开展家庭安全计划社区活动包挑战赛活动暨壹基金安全家园项目防灾减灾宣传社区行活动。活动得到了救助儿童会北京代表处、壹基金、艾特公益、益心益意公益的指导&#xff0c;得到了阿里巴巴公益平台广大…

【数据结构】链表的八种形态

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 链表的三大"性状" 一.带头链表和不带头链表 头指针与头结点的异同 头指针 头结点 二.循环链表和非循环链表 三.双向链表和单向链表 链表的八大形态 结语…

键盘快捷键工具Keyboard Maestro mac中文版介绍

Keyboard Maestro mac是一款键盘快捷键工具&#xff0c;它可以帮助用户通过自定义快捷键来快速完成各种操作&#xff0c;提高工作效率。Keyboard Maestro支持多种快捷键组合&#xff0c;包括单键、双键、三键、四键组合等&#xff0c;用户可以根据自己的习惯进行设置。此外&…

测试工程师一定要会的Jmeter_性能测试教程:性能测试脚本的优化

性能测试脚本的优化 以PHP论坛为例&#xff1a;http://47.107.178.45/phpwind/ 根据上一篇的性能测试(3&#xff09;的脚本进行优化&#xff1b;见下图&#xff1a; 如上图中&#xff0c;把发帖和回帖的事务添加到随机控制器中&#xff0c;登录操作添加到仅一次控制器中&…

修改el-radio-group样式,自定义单选组件

修改el-radio-group样式,自定义单选组件 自定义组件 MyRadioGroup.vue <template><div class"btnsBox"><el-radio-group v-model"activeIndex" change"handleClick"><el-radio-buttonv-for"(item, index) in list&qu…

万户OA upload任意文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品&#xff0c;统一的基础管理平台&#xff0c;实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台&#xff0c;将外网信息…

vite vue3配置axios

准备 参考 安装axios yarn add axiossrc下新建request文件夹&#xff0c;该文件下新建index.ts import axios from axios; import { ElMessage } from element-plus;// const errorCodeType function (code: number): string { // let errMessage: string 未知错误; // …

SqlServer_idea连接问题

问题描述&#xff1a; sqlServer安装之后可以使用navicat进行连接idea使用账户密码进行登录连接失败 问题解决&#xff1a; 先使用sqlServer管理工具进行登录 使用window认证连接修改账户密码 启用该登录名 这时idea还是无法连接&#xff0c;还需要如下配置 打开sqlserve…

SVG直线 <line>与折线 <polyline>代码示例

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

LR学习笔记——图片管理分类

文章目录 图片标记图片筛选图片分类 图片标记 可以看到上面的第二排&#xff0c;每个图片都有不同的标记&#xff0c;前5张用星级进行标记&#xff0c;后三张用颜色进行标记 可以直接在图片下方点击几星级即可进行标记&#xff0c;也可以使用键盘上的数字键1-5进行打星 相对的&…

AnyTXT Searcher:本地文件内容搜索神器如何搭建与远程访问

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况&#xff0c;异地办公或者不在公司&#xff0c;想找…

洛谷 P4568 [JLOI2011] 飞行路线 pytho解析

P4568 [JLOI2011] 飞行路线 pytho解析 时间&#xff1a;2023.11.20 题目地址&#xff1a;[JLOI2011] 飞行路线 题目分析 对于这个题呢就是最短路的问题了。那就可以用Dijkstra 算法&#xff0c;唯一不同的地方就是有免费的机票次数&#xff0c;那我们就先不考虑这个&#xf…

Linux vi和vim编辑器、快捷键的使用

Linux vi和vim编辑器、快捷键的使用 vi和vim的三种模式使用vim编写Hello.java文件vim快捷键和命令 在Linux下一般使用vi编辑器来编辑文件&#xff0c;vim是它的增强版。vim用于在远程环境下用命令形式对文本进行在线编辑&#xff0c;既可以查看文件也可以编辑文件。 vi是Linux系…

LINUX入门篇【7】--git提交指令以及代码调试工具gdb

前言&#xff1a; 我们今天来介绍一下我们工具篇的最后两个工具&#xff0c;即git提交指令以及代码调试工具gdb,再结合前面的知识点&#xff0c;我们就可以基本完成我们VS上的基本的功能&#xff1a;编写&#xff0c;调试&#xff0c;编译&#xff0c;执行程序的这些过程。 1…

leetcode:反转链表

题目描述 题目链接&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 分析题目 思路一 我们可以设计算法让整个链表掉头 定义三个代码n1,n2,n3 n1指向NULL&#xff0c;n2指向head&#xff0c;n3指向第二个结点 当n2不为NULL的时候&#xff0c;让n2->ne…

ResizeObserver观察元素宽度的变化

ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver 构造函数创建一个新的 ResizeObserver 对象&#xff0c;它可以用于监听 Element 内容盒或边框盒或者 SVGElement 边界尺寸的大小。查看详细说明 案例 &l…

电影:从微缩模型到AI纹理

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 自胶片问世以来&#xff0c;电影制作人必须以模仿现实的方式使用纹理&#xff0c;让观众相信他…