- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
容器系列文章 。
容器系列视频 。
iptables是基于内核提供的netfilter框架实现的,网络协议栈是分层的,在tcp ip网络模型里,tcp传输层下面的一层就是ip网络层,而netfilter就是工作在ip网络层,通过定义钩子函数,允许用户代码干预数据在协议栈中的过滤逻辑.
在进出ip路由前后,都定义了相关的钩子函数,可以在钩子函数内部加上过滤数据包的逻辑,但直接使用netfilter还是比较麻烦,需要写代码.
而iptables则是基于netfilter提供的功能,让使用者能用配置的方式替代之前直接写代码的操作。可以说它简化了netfilter的使用.
在看iptables使用规则前,得先明白这5个钩子函数的触发规则.
PREROUTING : 在进入 IP 路由之前触发,就意味着只要接收到的数据包,无论是否真的发往本机,也都会触发这个钩子。它一般是用于目标网络地址转换(Destination NAT,DNAT).
INPUT : 报文经过 IP 路由后,如果确定是发往本机的,将会触发这个钩子,它一般用于加工发往本地进程的数据包.
FORWARD : 报文经过 IP 路由后,如果确定不是发往本机的,将会触发这个钩子,它一般用于处理转发到其他机器的数据包.
OUTPUT : 从本机程序发出的数据包,在经过 IP 路由前,将会触发这个钩子,它一般用于加工本地进程的输出数据包.
POSTROUTIN : 从本机网卡出去的数据包,无论是本机的程序所发出的,还是由本机转发给其他机器的,都会触发这个钩子,它一般是用于源网络地址转换(Source NAT,SNAT) 。
在使用iptables时,能够在特定的钩子函数上定义一条条规则,而为了更好的管理这些规则,iptables将这些规则按功能进行分类,这样相同目的的规则就形成了规则表.
我们来看看:
raw 表 : 用于去除数据包上的连接追踪机制(Connection Tracking).
mangle 表 : 用于修改数据包的报文头信息,比如服务类型(Type Of Service,ToS)、生存周期(Time to Live,TTL).
nat 表 : 用于修改数据包的源或者目的地址等信息,典型的应用是网络地址转换(Network Address Translation).
filter 表 : 用于对数据包进行过滤,控制到达某条链上的数据包是继续放行、直接丢弃或拒绝(ACCEPT、DROP、REJECT),典型的应用是防火墙.
security 表 : 用于在数据包上应用SELinux,这张表并不常用.
nat和filter表用的很频繁,这也是今天分析的重点.
五张表能够在相应的钩子函数上设定规则,而如果碰到不同表在相同的钩子函数上设定规则,那么规则谁先谁后呢,这就需要知道表的优先级顺序。 表优先级:raw→mangle→nat→filter→security.
这里你要注意,在 iptables 中新增规则时,需要按照规则的意图指定要存入到哪张表中,如果没有指定,就默认会存入 filter 表。此外,每张表能够使用到的钩子函数也有所不同.
有了这些基础之后,我们再来看看iptables的命令格式
iptables -t nat 命令 规则链 规则
在使用iptables的时候,我们用-t 指定定义的规则是属于哪张规则表的,如果不指定,则默认是指filter表。 而命令则是说明需要对规则表所进行的操作,比如查看添加删除规则链.
iptables命令 -L 代表查看 -A 代表插入到尾部, -D 删除规则 -F 清空规则 。
规则链则是具体的定义按什么规则去匹配数据包,如筛选出源ip是10.1.0.1的数据包,或者目的端口是8080的数据包。 规则即是对匹配的数据包所做的操作,比如是丢弃还是接受.
这里我列几个比较常用的规则; 。
DROP:直接将数据包丢弃.
REJECT:给客户端返回 Connection Refused 或 Destination Unreachable 报文.
RETURN:跳出当前链,该链里后续的规则不再执行.
ACCEPT:同意数据包通过,继续执行后续的规则.
JUMP:跳转到其他用户自定义的链继续执行.
REDIRECT:在本机做端口映射.
MASQUERADE:地址伪装,自动用修改源或目标的 IP 地址来做 NAT.
来看一个实际的iptables的实际使用例子.
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
这条命令就代表往nat规则表中添加一条规则,规则在POSTROUTING钩子函数处触发,规则是将源ip是192.168.10.0/24网段的数据包都做一次snat操作。 -s 指定源ip地址或ip网段 。
iptables -A INPUT -p tcp -s 192.168.10.0/24 -j DROP
上面这条命令没有用-t参数则说明默认是往filter规则表中添加,规则是在INPUT钩子函数处被触发,-p 指定匹配的协议,这里将源ip是192.168.10.0/24网段的tcp协议的数据包都丢掉了。-j 指定的就是规则链之后的动作.
除了添加内置的规则表中添加规则 ,iptables还允许用户自定义规则链表,这里将不再深入分析,本文目的仅是简单的了解下iptables的使用,以及能看懂iptables的输出即可,为后续分析容器网络环境做准备.
知道iptables命令是如何使用之后,我们再来看看iptables是如何查看主机上的规则,以及如何对规则输出的结果进行分析.
iptables -nvL
这个命令能直接输出主机上的filter表的规则链,-n 代表不解析ip地址的域名,-v则是能输出更多的信息,-L则是查看命令了.
关于iptables 的命令参数有很多,更多详细的规则都可以通过man iptables去查看.
看看输出结果.
root@master:/home/parallels# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
20M 4214M KUBE-NODEPORTS all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes health check service ports */
293K 23M KUBE-EXTERNAL-SERVICES all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW /* kubernetes externally-visible service portals */
20M 4220M KUBE-FIREWALL all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 FLANNEL-FWD all -- * * 0.0.0.0/0 0.0.0.0/0 /* flanneld forward */
0 0 KUBE-FORWARD all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes forwarding rules */
.......
Chain KUBE-KUBELET-CANARY (0 references)
pkts bytes target prot opt in out source destination
Chain KUBE-NODEPORTS (1 references)
pkts bytes target prot opt in out source destination
输出的规则按不同规则链进行了归类,除了之前提到的iptables内置的5个规则链表,还有一些是自定义的规则链,自定义的规则链只能通过内置的规则链去进行跳转.
比如这里的第一行输出:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
20M 4214M KUBE-NODEPORTS all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes health check service ports */
则表示,匹配所有经过INPUT链的数据包(source 为0.0.0.0/0 表示任意源ip地址,destination为0.0.0.0/0 表示任意目的ip地址,prot 为all表示任意协议,in out皆为all 表示输入输出可以是任意网络设备,opt则是一些定义规则链时候的扩展参数,这里为空) 都将跳转到KUBE-NODEPORTS这条自定义规则链.
pkts 表示经过此规则的包数量,bytes则是经过此规则的包大小,都是累加值.
然后 。
Chain KUBE-NODEPORTS (1 references)
pkts bytes target prot opt in out source destination
看到KUBE-NODEPORTS 没有定义规则,则回到上层规则链处,继续执行下一条规则.
通过上面的分析,应该能够看懂iptables的输出了,后续我将会结合iptables命令,看看容器环境下,对主机的iptables规则做了哪些改动,敬请期待.
最后此篇关于iptables的使用的文章就讲到这里了,如果你想了解更多关于iptables的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我已经为启用了完整 netfilter 功能的 android 模拟器编译了 Linux。从源代码构建 android 后得到一个 iptables 二进制文件。 当我将这个二进制文件推送到模拟器时
由于大量机器人每秒访问我的 Web 服务器太多次,我进入我的服务器并发出以下命令,试图在 5 秒内将连接限制为最多 25 个。我可能需要更严格,但我不是因为我有一个很少访问的页面,它请求 50 个图像
我正在尝试阻止在短时间内打开大量连接的网络机器人。我正在使用这个语法: -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
我正在尝试在 iptables 中记录一些来自恶意 IP 地址的丢弃数据包,这些 IP 地址不断攻击我的服务器。 来自这个恶意 IP 的所有内容都被丢弃,我不再在 Web 服务器日志中看到它,这是一件
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我已经设置了 keepalived,只有当我停止 iptables 服务时它才能正常工作。我的iptables配置是这样的,请告诉我应该为keepalived添加什么规则 # Firewall con
我使用 DevStack 在 RHEL6 上安装了 OpenStack,并且运行良好。有一天,我们的一位“系统管理员”注意到 iptables 正在系统上运行,并决定将其关闭(chkconfig ip
测试环境为: 2 操作系统 ubuntu server 10.04 安装在 VirtualBox 上 iptables v1.4.4 已加载 ip_conntrack 模块 这些是我的测试规则:
当我清除 IPtables 然后添加以下规则时,传入连接可以毫无问题地连接到端口 1234 上的我的 KVM VM。 -A PREROUTING -i br0 -p tcp -m tcp --dpor
我正在为我的工作使用 iptables 最近的匹配项,因为它保存了 ip 地址和我需要的最后一次看到的值。 但是现在我需要从 iptables 最近的列表中删除一些条目,这些条目位于 ipset 中。
所以我加了 sudo iptables -t raw -A PREROUTING -p tcp --dport 25 -j TRACE 也 sudo iptables -t raw -A OUTPUT
我在专用的 ubuntu 服务器上有一个防火墙(基于 iptables)。我有几个 LAN 客户端。 在我的一个 LAN 客户端上,我正在运行可以根据 IP 限制访问的软件。对我来说,重要的是我可以通
我不知道如何解决我的问题。 是否可以使用 ipq_set_verdict() 重定向捕获的数据包? 我想将未经授权的用户重定向到登录页面。 请看我的代码: 数据包被接受,我的浏览器打开请求的页面(未更
我正在尝试使用字符串匹配模块获取“from”和“to”偏移量以在我的 iptables 规则中使用。这是我从 tcpdump 工具输出的数据包: listening on eth0, link-typ
我正在尝试使用 python-iptables 编写脚本来设置某些规则。我弄清楚了如何设置规则以允许所有连接和拒绝所有连接,但我需要弄清楚如何编写规则以允许已建立的连接。 例如,我需要使用 pytho
这是规则集: #!/bin/sh iptables-restore -v<
我正在尝试将数据从 xml 加载到 iptables。我正在使用以下命令: xsltproc /usr/share/iptables/iptables.xslt myiptable.xml | ipt
我正在尝试设置 iptable 规则,但在使用 iptable 时收到以下错误消息: iptables v1.4.14: can't initialize iptables table `nat':
我正在从 Windows Bash 运行 Ubuntu 18.04: uname -a Linux DESKTOP-M87DGAS 4.4.0-17134-Microsoft #112-Microso
有一个 IP(来自中国)试图下载我的整个网站。它下载我所有的页面并显着加载服务器(我有超过 500 000 个页面)。查看访问日志,我可以看出它绝对不是 Google 机器人或任何其他搜索引擎机器人。
我是一名优秀的程序员,十分优秀!