案列分享-因netfilter包过滤规则配置错误造成datax数据同步作业运行失败

简介: 案列分享-因netfilter包过滤规则配置错误造成datax数据同步作业运行失败

案列分享-因netfilter包过滤规则配置错误造成datax数据同步作业运行失败

大数据作业运行失败的原因多种多样,在复杂环境中的网络问题也是屡见不鲜。 本文分享一个因linux的netfilter 包过滤规则配置错误造成的datax任务失败问题的排查案列,希望大家有所收获。

1. 问题概述

某客户现场,datax 数据同步作业运行失败。

经排查,该 datax 作业会采集 oracle 数据并同步到 CDH 大数据集群的 hive 中,其中 CDH 集群开启了 kerberos 认证(使用的是 freeipa),且 CDH 集群的系列节点和 KDC 节点是 CO-LOCATED 共同部署的。

2 问题分析

  • 排查发现,CDH系列节点都使用了 iptables 防火墙服务(systemctl status iptables可以查看服务状态);
  • 进一步,通过命令 iptables -L 可以发现,cdh/kdc 系列节点通过配置 netfilter 中表和链的系列规则,限制了某些节点(如datax作业节点)对 cdh/kdc 的tcp 链接,所以 datax 作业会因为无法获取到 NAMENODE/DATANODE/KDC节点的tcp链接而报错。

image.png


  • 通过命令 ping ip-xxx 测试到目标机器的网路连接,并通过 tcpdump/tshark 抓包,可以发现错误原因:“IP XXX > XXX: ICMP xxx Destination unreachable (host administratively prohibited),这验证了上述猜测:

image.png


3. 问题解决

在cdh/kdc系列节点,通过命令 iptables -t filter -A input -s xxx -j ACCEPT 添加规则(注意所有规则的生效顺序),开通 datax 作业节点对这些CDH节点和KDC节点的tcp网络链接,问题解决。

  • 可以通过 ping ip-xxx, telnet ip-xxx port-xxx 等命令,验证网络连通性,正常情况下命令输出如下:

image.png

4. 技术背景

  • 在 RHEL7/CENTOS7 里,预装了多种防火墙服务,即 firewalld/iptables,但同一时间只能启动一个,且默认启用的是 firewalld (老版本 linux 只有iptables防火墙服务);
  • firewalld/iptables 这些防火墙服务运行在用户态,其自身并不具备防火墙的功能,而是需要通过内核的 netfilter 子系统来实现,也就是说 firewalld 和 iptables 都是用于维护表/链/规则,而真正使用规则进行包过滤的是内核的 netfilter;
  • firewalld 相比 iptables 功能更全面,可以在不丢失现有连接状态的情况下(conntrack),在正常的系统操作期间更改规则;
  • 「在后台,firewalld 和 iptables 这两个防火墙服务,都通过相同的接口来与内核中的 netfilter 子系统交互,即它们都通过 iptables 命令来与 netfilter 交互」
  • 「iptables-services 防火墙服务,和 iptables 命令,不是同一个概念,前者是和 firewalld一样的用户态的防火墙服务,后者是用来跟内核态的 netfilter 子系统交互的一个命令」
  • 由于真正起到包过滤作用的是内核态的 netfilter底层的表和链底层的系列包过滤规则,而不是 firewalld/iptables 这些用户态的防火墙服务,所以「即使关闭防火墙服务firewalld/iptables,已经配置在 netfilter 中的 表/链/规则也仍然起作用,所以不能简单地认为,关闭了防火墙服务就没有任何网络问题」
  • You need to distinguish between the iptables service and the iptables command. Although firewalld is a replacement for the firewall management provided by iptables service, it still uses the iptables command for dynamic communication with the kernel packet filter (netfilter). So it is only the iptables service that is replaced, not the iptables command. That can be a confusing distinction at first.
  • The "admin prohibited filter" seen in the tcpdump output means there is a firewall blocking a connection. It does it by sending back an ICMP packet meaning precisely that: the admin of that firewall doesn't want those packets to get through. It could be a firewall at the destination site. It could be a firewall in between. It could be iptables on the Linux system.
  • The default ports used by Kerberos are port 88 for the KDC1 and port 749 for the admin server. You can, however, choose to run on other ports, as long as they are specified in each host's /etc/services and krb5.conf files, and the kdc.conf file on each KDC.

5. 相关命令

  • systemctl status firewalld/iptables: 排查 linux 防火墙状态(防火墙有多种类型:硬件/软件/源端/目标端/网关防火墙,以及 linux 自带的 firewalld/iptables 防火墙);
  • yum info iptables/iptables-services/firewalld:查看是否安装了 iptables 命令,iptables/firewalld防火墙服务;
  • iptables -L: 排查 linux 防火墙配置(默认查看 filter 表);
  • traceroute xxx/ip route:排查网络和路由配置;
  • ping xxx/telnet xxx 10000/nc -z -v -u xxx 88:排查网络和端口联通性;
  • tcpdump -i any -n icmp/tcpdump -i eth0 port 2181 or arp: tcpdump 抓包并分析;
  • tshark -i ens160 dst 192.168.168.65 or arp -w /tmp/tshark.src.pcap: tshark 抓包并导出,后续可以通过wireshark分析;
  • tcpdump -i ens160 port 10000 or arp -w /tmp/tcpdump.dst.pcap: tshark 抓包并导出,后续可以通过wireshark分析;
  • iptables -t filter -A INPUT -s 10.20.39.254/24 -j DROP:添加一条规则到 filter 表的input链的末尾;
  • iptables -t filter -D INPUT -s 10.20.39.254/24 -j REJECT:删除 filter 表的input链中的某条规则;
  • iptables 规则的 target 目标策略,配置为 DROP 代表中断过滤,会直接丢弃数据包不给任何回应;而配置为 REJECT 同样代表中断过滤,但拒绝数据包通过的同时会返回响应信息,并可以通过 --reject-with tcp-reset|port-unreachable|echo-reply 指定返回的具体的响应信息,以下截图分别展示了配置为 DROP/REJECT时,客户端 ping 服务器时获得的不同的响应:

image.png

相关文章
|
4月前
|
SQL 分布式计算 Oracle
数据同步工具DataX的安装
数据同步工具DataX的安装
397 0
|
4月前
|
存储 关系型数据库 MySQL
DataX: 阿里开源的又一款高效数据同步工具
DataX 是由阿里巴巴集团开源的一款大数据同步工具,旨在解决不同数据存储之间的数据迁移、同步和实时交换的问题。它支持多种数据源和数据存储系统,包括关系型数据库、NoSQL 数据库、Hadoop 等。 DataX 提供了丰富的数据读写插件,可以轻松地将数据从一个数据源抽取出来,并将其加载到另一个数据存储中。它还提供了灵活的配置选项和高度可扩展的架构,以适应各种复杂的数据同步需求。
|
4月前
|
存储 DataWorks NoSQL
在DataWorks的数据集成中,对于Tablestore数据源的增量同步,你可以按照以下步骤进行配置:
在DataWorks的数据集成中,对于Tablestore数据源的增量同步,你可以按照以下步骤进行配置:
31 2
|
5月前
|
Java 专有云 数据库连接
专有云配置vertica数据源,测试连通性已连通,但是在配置数据集成时,连接报错,报vertica[vjdbc]100176错误,连接vertica数据库错误
专有云配置vertica数据源,测试连通性已连通,但是在配置数据集成时,连接报错,报vertica[vjdbc]100176错误,连接vertica数据库错误
49 1
|
5月前
|
JSON Java DataX
DataX教程(04)- 配置完整解读
DataX教程(04)- 配置完整解读
648 0
|
5月前
|
Java DataX Maven
DataX教程(02)- IDEA运行DataX完整流程(填完所有的坑)
DataX教程(02)- IDEA运行DataX完整流程(填完所有的坑)
283 0
|
5月前
|
分布式计算 DataWorks 关系型数据库
MaxCompute支持通过DataWorks数据集成功能将其他数据源数据同步至MaxCompute
MaxCompute支持通过DataWorks数据集成功能将其他数据源数据同步至MaxCompute
35 1
|
6月前
|
存储 DataWorks Unix
Dataworks数据集成之“文本数据”
Dataworks不是支持文本数据导入么?为什么Excel数据不能导入?CSV文件不就是Excel文件么?关于这些问题,我整理了一篇文章进行解释。
762 2
|
9月前
|
数据采集 SQL 分布式计算
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
956 0
|
1月前
|
分布式计算 DataWorks Java
DataWorks常见问题之数据集成导出分区表的全量数据如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
34 0

热门文章

最新文章