iptables和五链四表相关规则说明

文章目录

  • 1. iptables的作用
  • 2. iptables和netfilter的联系和区别
  • 3. 四表五链说明
    • 3.1 四表
    • 3.2 五链
    • 3.3 表与链之间的包含关系
  • 4. iptables规则的常用命令和使用方法
    • 4.1 iptables规则组成
    • 4.2 规则数据管理
  • 5. 常用的iptables场景
    • 5.1 禁止外部主机ping内部主机
    • 5.2 禁止某些端口访问
    • 5.3 只允许某些ip端和端口访问
      • 5.3.1 非k8s机器
      • 5.3.2 k8s机器
      • 5.3.3 配置访问来源和执行脚本
  • 6. 参考文档

在k8s环境中经常使用iptables规则进行负载均衡、路由转发和NAT等操作,本文针对iptables的实现原理和相关常用方法进行整理和讨论。


1. iptables的作用

iptables是一种用于配置和管理Linux操作系统上的防火墙的工具。它允许系统管理员定义和维护数据包过滤规则,以控制进入和离开系统的网络流量。通过使用iptables,管理员可以实现以下功能:

  • 数据包过滤:iptables可以根据源IP地址、目标IP地址、源端口、目标端口、协议等条件过滤网络数据包,从而允许或拒绝特定的流量。
  • NAT(Network Address Translation):iptables可以进行网络地址转换,将内部IP地址和端口映射到外部IP地址和端口,实现内部网络与外部网络之间的通信。
  • 防止DDoS攻击:iptables可以根据流量频率和连接数等指标进行限制,从而帮助防止分布式拒绝服务(DDoS)攻击。
  • 负载均衡:iptables可以根据负载状况将流量分配到不同的服务器上,从而实现负载均衡。
  • 网络地址过滤:iptables可以过滤特定的IP地址或IP地址范围,从而限制对系统的访问。

总而言之,iptables是一个功能强大的工具,可以帮助管理员保护系统免受恶意网络流量的攻击,并提供对网络流量的精细控制。

2. iptables和netfilter的联系和区别

iptables和netfilter是两个密不可分的概念,它们都是Linux操作系统中用于网络数据包过滤和防火墙功能的重要组件。

  • Netfilter是一个内核层的框架,用于在Linux内核中进行数据包处理。它提供了一个抽象层,允许用户空间程序(如iptables)通过Netfilter钩子函数来捕获和操作网络数据包。Netfilter框架支持各种功能,包括数据包过滤、NAT(网络地址转换)、连接追踪等。
  • iptables则是一个用户空间的命令行工具,它是对Netfilter框架的接口封装,用于配置和管理防火墙规则。iptables允许用户定义不同的规则集,以过滤和修改网络数据包。用户可以使用iptables命令来添加、删除、修改防火墙规则,从而实现对网络流量的控制和管理。

因此,iptables是通过与Netfilter框架进行交互来实现网络数据包过滤和防火墙功能的。iptables提供了更方便和友好的用户接口,使得用户可以轻松地配置和管理防火墙规则,而Netfilter则在内核层实现了具体的数据包处理和转发功能。

3. 四表五链说明

3.1 四表

四表:filter、nat、managle、raw,默认是filter表。表的处理优先级:raw>managle>nat>filter

作用备注
filter过滤数据包主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。Filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改
nat网络地址转换(端口映射、地址映射等。)主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT 工作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包),OUTPUT链(修改路由之前本地生成的数据包)
mangle用于对特定数据报的修改。主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)
raw优先级最高,设置raw时一般是为了不再让iptables做数据报的链接跟踪处理,提高性能。只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在 某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.

3.2 五链

五链:PREROUTING 、INPUT、FORWARD、OUTPUT、POSTROUTING

作用
PREROUTING数据包进入路由表之前,对数据包做路由选择前应用此链路中的规则,所有的数据包进来的时候都先由这个链处理
INPUT通过路由表后目的为本机,进来的数据报应用此规则链上的策略
FORWARD通过路由表后,目标地址不为本机,做转发数据报时应用此规则链上的策略
OUTPUT由本机产生的外出的数据包向外转发时,应用此规则链中的策略
POSTROUTING数据报做路由选择后发送后到网卡接口之前应用此链中的规则,所有的数据包出来的时候都先由这个链处理

五链的链路的数据示意走向图
在这里插入图片描述

一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。

  • 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经 过OUTPUT链,然后到达POSTROUTING链输出。
  • 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达POSTROUTING链输出。

3.3 表与链之间的包含关系

filterINPUT、FORWARD、OUTPUT
natPREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT)
manglePREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
rawPREROUTING、OUTPUT

4. iptables规则的常用命令和使用方法

4.1 iptables规则组成

  • 数据包访问控制:ACCEPT、DROP、REJECT
  • 数据包改写:SNAT、DNAT
  • 信息记录:LOG

iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法

在这里插入图片描述

4.2 规则数据管理

管理规则:

-A:附加一条规则,添加在链的尾部
-I CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条,不指定默认为第一条
-D CHAIN [num]:删除指定链中的第num条规则
-R CHAIN [num]:替换指定的规则

管理链:

-F [CHAIN]:flush,情况指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN:设定指定链的默认策略    iptables -P INPUT DROP
-N:自定义一个新的空链
-X:删除一个自定义的空链
-Z:置零指定链中所有规则的计数器
-E:重命名自定义的链

查看类:

-L:显示指定表中的规则
    -n:以数字格式显示主机地址和端口号
	-v:显示链及规则的详细信息
	-x:显示计数器的精确值
	--line-numbers:显示规则号码

保存规则:

# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

清理规则:

iptables -F

5. 常用的iptables场景

5.1 禁止外部主机ping内部主机

# 禁ping
iptables -w -t filter -I INPUT -p icmp -m icmp --icmp-type 8 -j DROP  

# 解ping
iptables -w -t filter -D INPUT -p icmp -m icmp --icmp-type 8 -j DROP

5.2 禁止某些端口访问

iptables -A INPUT -p tcp --dport 18:80 -j DROP
iptables -A INPUT -p tcp -m multiport --dport 21,22,23 -j DROP

5.3 只允许某些ip端和端口访问

5.3.1 非k8s机器

# 配置脚本 iptables.sh
#!/bin/bash
echo $- | grep -q i || cd "$(dirname "$0")"
set -u 
set -e
set -o pipefail

### 以下内容需要根据环境和服务修改 ###
chain="TEST_WHITELIST"
dports="65535,65534"
### 以上内容需要根据环境和服务修改 ###

iplist=()
if test -s ./ip.txt
then :
    iplist=($(sort -u ./ip.txt))
else :
    true
fi

func_do() {
    iptables -w -t filter -N $chain
    test "$iplist" && iptables -w -t filter -I $chain -j REJECT
    for ip in ${iplist[@]}
    do :
        iptables -w -t filter -I $chain -s $ip -j RETURN
    done
    iptables -w -t filter -I $chain -m addrtype --src-type LOCAL -j RETURN
    test "$iplist" && iptables -w -t filter -I INPUT -p tcp -m multiport --dports $dports -j $chain
    # test "$iplist" && iptables -w -t filter -I INPUT -p udp -m multiport --dports $dports -j $chain
}

func_undo() {
    while iptables -w -t filter -D INPUT -p tcp -m multiport --dports $dports -j $chain 2>/dev/null
    do :
        sleep 0.1
    done
    # while iptables -w -t filter -D INPUT -p udp -m multiport --dports $dports -j $chain 2>/dev/null
    # do :
    #     sleep 0.1
    # done
    iptables -w -t filter -F $chain 2>/dev/null || true
    iptables -w -t filter -X $chain 2>/dev/null || true
}

func_bk() {
    iptables-save > ./iptables_bk_$(date +%s)
}

func_help() {
    echo "$0 do|undo"
}

case "${1:-help}" in
    "do" ) func_bk && func_undo && func_do ;;
    "undo" ) func_bk && func_undo ;;
    "bk" ) func_bk ;;
    * ) func_help ;;
esac

5.3.2 k8s机器

#!/bin/bash
echo $- | grep -q i || cd "$(dirname "$0")"
set -u
set -e
set -o pipefail

### 以下内容需要根据环境和服务修改 ###
chain="TEST_WHITELIST"
dports="11180,65528"
### 以上内容需要根据环境和服务修改 ###

iplist=()
if test -s ./ip.txt
then :
    iplist=($(sort -u ./ip.txt))
else :
    true
fi

func_do() {
    iptables -w -t mangle -N $chain
    test "$iplist" && iptables -w -t mangle -I $chain -j DROP
    for ip in ${iplist[@]}
    do :
        iptables -w -t mangle -I $chain -s $ip -j RETURN
    done
    iptables -w -t mangle -I $chain -m addrtype --src-type LOCAL -j RETURN
    test "$iplist" && iptables -w -t mangle -I PREROUTING -p tcp -m multiport --dports $dports -j $chain
    # test "$iplist" && iptables -w -t mangle -I PREROUTING -p udp -m multiport --dports $dports -j $chain
}

func_undo() {
    while iptables -w -t mangle -D PREROUTING -p tcp -m multiport --dports $dports -j $chain 2>/dev/null
    do :
        sleep 0.1
    done
    # while iptables -w -t mangle -D PREROUTING -p udp -m multiport --dports $dports -j $chain 2>/dev/null
    # do :
    #     sleep 0.1
    # done
    iptables -w -t mangle -F $chain 2>/dev/null || true
    iptables -w -t mangle -X $chain 2>/dev/null || true
}

func_bk() {
    iptables-save > ./iptables_bk_$(date +%s)
}

func_help() {
    echo "$0 do|undo"
}

case "${1:-help}" in
    "do" ) func_bk && func_undo && func_do ;;
    "undo" ) func_bk && func_undo ;;
    "bk" ) func_bk ;;
    * ) func_help ;;
esac

5.3.3 配置访问来源和执行脚本

ip.txt代表允许访问的来源ip和网段

cat ip.txt


# 配置单个ip
10.10.10.10
# 配置网段
10.10.20.0/24

执行命令

sh iptables.sh do

6. 参考文档

  • iptables四表五链及规则组成

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

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

相关文章

Linux——动态库

Linux——动态库 gcc 指令生成动态库动态库的使用动态库与静态库区别直接装到系统中软连接LD_LIBRARY_PATH直接修改动态库的配置文件 上一次我们了解了静态库,这次我们来了解动态库,如果还有没看过上一篇静态库的小伙伴,可以点击这里&#xf…

【深度学习笔记】3_6 代码实现softmax-regression

注:本文为《动手学深度学习》开源内容,仅为个人学习记录,无抄袭搬运意图 3.6 softmax回归的从零开始实现 这一节我们来动手实现softmax回归。首先导入本节实现所需的包或模块。 import torch import torchvision import numpy as np import…

LeetCode206: 反转链表.

题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 解题方法 假设链表为 1→2→3→∅,我们想要把它改成∅←1←2←3。在遍历链表时,将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一…

详细讲解缓冲区

目录 理解回车和换行(\r&&\n) 那如何实现单独的回车和换行呢? 缓冲区 证明有缓冲区的存在 ​编辑 怎么刷新缓冲区(显示器缓冲区)? fflush函数​编辑 缓冲区出现的意义 I/O流 模拟倒计时小程…

Nodejs 第四十章(prisma)

什么是 prisma? Prisma 是一个现代化的数据库工具套件,用于简化和改进应用程序与数据库之间的交互。它提供了一个类型安全的查询构建器和一个强大的 ORM(对象关系映射)层,使开发人员能够以声明性的方式操作数据库。 Prisma 支持…

EasyRecovery破解版补丁免费钥匙下载

说起数据恢复软件,相信没有小伙伴不知道EasyRecovery这个软件吧,该软件具有快捷、高效、便捷的特点,且提供的功能也非常全面,不仅可以恢复各样被删除的文件、视频、图片等,还可以支持SD卡数据恢复,TF卡等各…

深入浅出CChart 每日一课——快乐高四第六十一课 飞梯十二重,CChart三维曲线图绘制

同学们好,今天继续介绍CChart本身的功能。接下来这几节课呢,笨笨老师准备对CChart的三维视图和场图功能进行详细一些的介绍。本节课首先介绍三维曲线图。 CChart软件库的开发,首先是从二维曲线图开始的,这一部分经过长时间的打磨…

SpringBoot3+Vue3 基础知识(持续更新中~)

bean 把方法的返回结果注入到ioc中 1: 2: 3: 组合注解封装 实战篇: 解析token: 统一携带token: 驼峰命名与下划线命名转换: NotEmpty!!! mybatis: PageHelper设置后,会将pageNum,和pageSize自己拼接…

ubuntu22.04@Jetson Orin Nano之OpenCV安装

ubuntu22.04Jetson Orin Nano之OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程…

Spring Session:入门案例

Spring Session provides an API and implementations for managing a user’s session information. Spring Session提供了一种用于管理用户session信息管理的API。 Spring Session特点 传统的Servlet应用中,Session是存储在服务端的,即:Ses…

聚道云软件连接器:高科技企业财务自动化,提升效率准确性!

客户介绍: 某互联信息技术有限公司是一家专业从事信息技术服务的高科技企业,在业内享有较高的知名度和影响力。近年来,公司业务快速发展,对信息化建设提出了更高的要求。 客户痛点: 在传统情况下,该公司的…

【探索Linux】—— 强大的命令行工具 P.23(线程池 —— 简单模拟)

阅读导航 引言一、线程池简单介绍二、Linux下线程池代码⭕Makefile文件⭕ . h 头文件✅Task.hpp✅thread.hpp✅threadPool.hpp ⭕ . cpp 文件✅testMain.cpp 三、线程池的优点温馨提示 引言 在Linux下,线程池是一种常见的并发编程模型,它能够有效地管理…

大模型综述总结--第一部分

1 目录 本文是学习https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf的总结,仅供学习,侵权联系就删 目录如下图 本次只总结一部分,刚学习有错请指出,VX关注晓理紫,关注后续。 2、概述…

字符函数和字符串函数(C语言进阶)(一)

前言 C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。 字符串常量适用于哪些对它不做修改的字符串函数。 1、函数介绍 1.1 strlen strlen:计算字符串长度 看一个代码&…

“AI教父”李一舟翻车,中国AI培训路在何方

近日,AIGC领域掀起了一场不小的风波,知名AI博主李一舟在各大平台推出的AI课程突然下架,其账号遭到禁止关注的情况。 这一事件不仅引发了广泛关注和热议,更让许多真正想学习AIGC的用户感到迷茫和困惑:在众多的AIGC课程中…

ONLYOFFICE 桌面编辑器现已更新至v8.0啦

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

一个div最简方法画太极图

一个div最简方法画太极图 直接上代码&#xff0c;一目了然 html <div class"太极图"/>css .太极图 {position: relative;width: 400px;height: 400px;background: linear-gradient(to right,white 50%,black 50%);border-radius: 50%;box-shadow:0 0 12px …

c#高级——插件开发

案例&#xff1a;WinForm计算器插件开发 1.建立插件库&#xff0c;设置各种自己所需的插件组件 如下图所示&#xff1a;进行了计算器的加减法插件计算组件 Calculator_DLL为总插件父类 Calculator_DLL_ADD 为插件子类的控件对象 Calculator_DLL_Sub Calculator_DLL_Factory 为…

Map集合特点、遍历方式、TreeMap排序及Collections和Arrays

目录 ​编辑 一、集合框架 二、 Map集合 特点 遍历方式 HashMap与Hashtable的区别 TreeMap Collections Arrays 一、集合框架 二、 Map集合 Map集合是一种键值对的集合&#xff0c;其中每个键对应一个值。在Java中&#xff0c;Map接口定义了一种将键映射到值的数据结…