iptables的使用

iptables,使用 · 浏览次数 : 445

小编点评

iptables使用容器系列文章提供详细的iptables规则定义、命令格式以及规则链的分析方法。通过这些文章,我们可以更加了解iptables是如何使用和管理的,并能基于这些知识进行容器环境下的iptables规则改动。 **iptables规则定义** iptables规则定义了对网络接口进行哪些操作的条件,包括允许或拒绝哪些数据包通过。规则以“目标地址、目标协议、目标端口、允许规则或拒绝规则”的形式定义。 **iptables命令格式** iptables命令格式用于执行规则操作,例如“ACCEPT”、“DROP”或“LOG”。规则的语法通常如下: ``` target_address_or_network_range protocol port_number [allow|reject] ``` 例如,以下规则允许所有来自192.168.10.0/24的TCP数据包通过: ``` iptables -A INPUT -p tcp --dport 22 -s 192.168.10.0/24 -j ACCEPT ``` **规则链** iptables规则被组织成规则链,这些规则按照优先级排序。当匹配规则的条件满足时,iptables才会执行相应的规则。 **规则链分析** iptables输出结果可以帮助我们分析规则链如何工作。规则链会按照其规则的优先级顺序执行规则。规则链中的每个规则都会匹配其目标地址、协议、端口和允许/拒绝规则的条件,并执行相应的动作。 **iptables规则改动** 通过了解iptables规则定义、命令格式和规则链,我们可以进行iptables规则的创建、修改和删除。对于容器环境,我们可以通过修改主机的iptables规则来对容器的网络连接进行控制。例如,我们可以允许来自特定IP地址的容器访问外部网络。 **总结** iptables是一个强大的工具,可以用于控制网络流量。通过学习iptables规则定义、命令格式和规则链分析方法,我们可以更好地理解和管理iptables规则。通过基于这些知识的规则改动,我们可以优化容器网络的性能和安全性。

正文

iptables的使用

容器系列文章

容器系列视频

iptables介绍

iptables是基于内核提供的netfilter框架实现的,网络协议栈是分层的,在tcp ip网络模型里,tcp传输层下面的一层就是ip网络层,而netfilter就是工作在ip网络层,通过定义钩子函数,允许用户代码干预数据在协议栈中的过滤逻辑。

iptables 钩子函数位置

在进出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是如何查看主机上的规则,以及如何对规则输出的结果进行分析。

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的使用

iptables的使用 容器系列文章 容器系列视频 iptables介绍 iptables是基于内核提供的netfilter框架实现的,网络协议栈是分层的,在tcp ip网络模型里,tcp传输层下面的一层就是ip网络层,而netfilter就是工作在ip网络层,通过定义钩子函数,允许用户代码干预数据

iptables简要介绍及使用iptables实践NAT技术

# 简介 iptables的文章多如牛毛,但是,我读了一些,发现虽然成体系,但是不便理解,今天就结合自己的理解,好好讲解下,另外,我们也会使用iptables来实验一个nat地址转换的demo,nat转换,通俗地讲,一般是为了解决ipv4公网地址不够用的问题,因此在学校、公司等机构的有公网ip的服务

[转帖]Linux 防火墙开放特定端口 (iptables)

查看状态: iptables -L -n 下面添加对特定端口开放的方法: 使用iptables开放如下端口 /sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT 保存 /etc/rc.d/init.d/iptables save 重启服务 ser

[转帖]Linux 防火墙开放特定端口 (iptables)

查看状态: iptables -L -n 下面添加对特定端口开放的方法: 使用iptables开放如下端口 /sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT 保存 /etc/rc.d/init.d/iptables save 重启服务 ser

[转帖]ipset命令介绍与基本使用

一. 介绍 ipset命令是用于管理内核中IP sets模块的,如iptables之于netfilter。ipset字面意思是一些IP地址组成一个集合(set)。但是ipset用于用于存储IP地址,整个子网,端口号(TCP/UDP),MAC地址,网络接口名或者上述这些的组合。ipset主要是由ipt

【转帖】【奇技淫巧】Linux | 安全保障防火墙-iptables

虽然说Linux在安全方面确实相当于windows要更加可靠一些,但一般使用其作为服务器的我们,也不能大意,也是需要严格限制网络传输过程中的出入规则。上篇文章我们有聊到统计网络的信息,这篇文章来学习一下比较著名的防火墙iptables,它已经有十几年的历史了,算是不折不扣的Linux系统的功臣。 一

[转帖]iptables 执行清除命令 iptables -F 要非常小心的

使用 /sbin/iptables -F 要小心,搞不好,你就马上同服务器断开连接了 以下是来自 http://wiki.ubuntu.org.cn/IptablesHowTo 上的说明 可以通过/sbin/iptables -F清除所有规则来暂时停止防火墙: (警告:这只适合在没有配置防火墙的环境

如何使用iptables防火墙模拟远程服务超时

# 前言 超时,应该是程序员很不爱处理的一种状态。当我们调用某服务、某个中间件、db时,希望对方能快速回复,正确就正常,错误就错误,而不是一直不回复。目前在后端领域来说,如java领域,调用服务时以同步阻塞调用为主,此时一般会阻塞当前线程,等待结果。如果我们设置了超时时间还好,一段时间等不到就报错了

iptables 命令学习

iptables 命令学习 摘要 Linux 早起版本使用netfilter进行数据包过滤. 最新的版本开始改用 ebpf的方式进行内核编程式的包过滤. netfilter 可以理解为内核态的一个处理机制 iptables 是在用户态进行管理netfilter配置的工具. 也就可以理解为: ipta

[转帖]Linux下使用 ipset 封大量IP及ipset参数说明

https://www.cnblogs.com/xiaofeng666/p/10952627.html Linux使用iptables封IP,是常用的应对网络攻击的方法,但要封禁成千上万个IP,如果添加成千上万条规则,对机器性能影响较大,使用ipset能解决这个问题。 iptables 包含几个表,