iptables
是什么?你为啥要学?
Linux的网络控制模块在内核中,叫做netfilter
。而iptables
是位于用户空间的一个命令行工具,它作用在OIS7层网络模型
中的第四层,用来和内核的netfilter
交互,配置netfilter
进而实现对网络的控制、流量的转发 。
那iptables既然是个命令行工具,那么是不是有和它类似的其他工具呢?有的,比如的我们常听到的firewalld,还有比较少见的nftables。
毫不夸张的说,整个linux系统的网络安全就是基于netfilter构建起来的。
iptables安装
安装、启动、查看、开启启动
yum install -y iptables-services
yum start|restart|reload|stop|status iptables
iptables默认配置文件位置 /etc/sysconfig/iptables
centos7.x默认用的是 firewalld ,所以你是看不到这个配置文件的
五表五链
iptables中总共有4张表还有5条链,我们可以在链上加不同的规则。
五张表:filter表、nat表、mangle表、raw表、security表
五条链:prerouting、input、output、forward、postrouting
你可以通过iptables -t ${表名} -nL
查看表上的链
流量走向
下面是流量进入iptables的流转过程,这个图很重要,网上也有很多这种图,我贴上了一个我认为最准确(也不一定对)。
稍微解析一下上图:
红
、蓝
、绿
、紫
分别代表上一小节中提到的iptables
的四张表。如果你开启着SELinux,还会多出一个security
表- 上图左上角写的:
incoming packet
,表示这是从互联网其他设备中来的流量。它大概的走向是:先经过各个表的prerouting
阶段,再经由routing decision
(可以理解成查路由表,做路由选择)决定这些流量是应该交由本机处理,还是该通过其他网口forword
转发走。 - 再看上图中的左上部分,
incoming packet
在做routing decision
之前会先经过nat preroutings
阶段,我们可以在这个阶段做dnat (目标地址改写),简单来说就是:比如这个数据包原来的dst ip
是百度的,按理说经过routing decision
之后会进入forward转发阶段,但是在这里你可以把目标地址改写成自己,让数据流入input通路,在本机截获这个数据包。 - 上图右上角写的:
locally generated packet
,表示这是本机自己生成的流量。它会一路经过各个表的output链,然后流到output interface(网卡)上。你注意下,流量在被打包成outgoing packet之前,会有个localhost dest的判断,如果它判断流量不是发往本机的话,流量会经过nat表的postrouting阶段。一般会在这里做DNAT
源地址改写。
所以经过对上图的简单分析,如果咱想自定义对流量进行控制,那该怎么办?
这并不复杂。但是在这想该怎么办之前,我们得先搞清楚,通常情况下我们会对流量做那些控制?无非如下:
- 丢弃来自xxx的流量
- 丢弃去往xxx的流量
- 只接收来自xxx的流量
- 在刚流量流入时,将目标地址改写成其他地址
- 在流量即将流出前,将源地址改写成其他地址
- 将发往A的数据包,转发给B
等等等等,如果你足够敏感,你就能发现,上面这六条干预策略,filter
、nat
这两张表已经完全能满足我们的需求了,我们只需要在这两张表的不同链上加自己的规则就行,如下:
- 丢弃来自xxx的流量(
filter表INPUT链
) - 丢弃去往xxx的流量(
filter表OUTPUT链
) - 只接收来自xxx的流量(
filter表INPUT链
) - 在刚流量流入时,将目标地址改写成其他地址(
nat表prerouting链
) - 在流量即将流出前,将源地址改写成其他地址(
nat表postrouting链
) - 将发往A的数据包,转发给B(
filter表forward链
)
数据包在iptables中的走向还可以简化成下面这张图
参考:程序员白日梦(这篇文章是我看到的最好的一篇,一定要看)
练习
iptables 命令
iptables -t ${表名} ${Commands} ${链名} ${链中的规则号} ${匹配条件} ${目标动作}
表名:4张表,filter
、nat
、mangle
、raw
Commands:尾部追加-A
、检查-C
、删除-D
、头部插入-I
、替换-R
、查看全部-L
、清空-F
、新建chain-N
、默认规则-P
(默认为ACCEPT)
链名:5条链,PREROUTING
、INPUT
、FORWOARD
、OUTPUT
、POSTROUTING
匹配条件:-p
协议、-4
、-6
、-s 源地址
、-d 目标地址
、-i 网络接口名
目标动作:拒绝访问-j REJECT
、允许通过-j ACCEPT
、丢弃-j DROP
、记录日志 -j LOG
、源地址转换-j snat
、目标地址转换-j dnat
、还有RETURN
、QUEUE
可以通过像如下查看使用帮助文档。主要可以分如下三个部分
iptables --help
Usage: # 使用案例
Commands: # 命令选项
Options: # 其他可选项
标签:iptables,流量,filter,地址,nat,Linux,netfilter From: https://www.cnblogs.com/xysgo/p/17125436.html好了,我也是菜鸡,后续再加上实际的练习案例