iptables
iptables是linux平台下的包过滤防火墙,用于封包过滤,封包重定向和网络地址转换等功能
iptables和netfiflter的关系:
iptables是linux防火墙管理工具,实现规则定义,删除和修改。而真正实现防火墙功能的是netfilter,iptables是用户态的工具,用户通过iptables配置的规则,netfilter通过这些规则进行防火墙操作过滤操作
iptables的四表五链:
四表:
raw表:用于配置数据包,其中的数据包不会被系统跟踪,该表的配置的规则优先级最高,设置该表一般是为了不再让iptables做数据包的跟踪处理,提高性能,对应内核??閕ptables_raw。
filter表:iptables的默认表(没有指定表的时候默认为该表),根据预定义的规则来过滤符合条件的数据包,在该表中只允许对数据包接收和丢弃等操作,对应内核模块iptables_filter
nat表:nat(network address Translation)表用于网络地址转换(例如:端口转发)可以实现一对一,一对多和多对多等nat的工作,网络地址转换功能,主要用于修改数据包的IP地址、端口号等信息,对应内核??閕ptables_nat;
mangle表:拆解报文,做出修改,并重新封装,对应内核??閕ptables_mangle;
五链(默认):
PREROUTING:在对数据包作路由选择之前,应用此链中的规则
INPUT:目的地为本机的包的,应用此链中的规则
FORWARD:目的地不是本机且不是本机产生的包,应用此链中的规则
OUTPUT:本地协议栈发出去的包,应用此链中的规则
POSTROUTING:经过选路后需要转发出去的包,应用此链中的规则
链的执行流程
iptables开启后,数据报文从进入服务器到出来会经过5道关卡,分别为Prerouting(路由前)、Input(输入)、Outpu(输出)、Forward(转发)、Postrouting(路由后):
每道关卡中有多个规则,数据包文必须按照顺序一个一个匹配规则,这些规则串起来像条链,所以我们把这些关卡叫做“链”
为什么有链之后还有还需要表?
虽然每一条链上有多条规则,但是有些规则的作用很相似,多条具有相同功能的规则在一起就成了一个表, 我们最终定义的防火墙规则,都会添加到这四张表中的其中一张表中
链和表的对应关系:
并不是每条链都能应用所有类型的表,除了OUTPUT能同时拥有4种表其他链都只有2-3种表
每条链上对应着多个表,但是数据包必须按照顺序匹配每条链上的一个一个规则,按照表的规则来进行匹配顺序是:raw ——>mangle——>nat——>filter
表名 | 能应用的链 | ||||
---|---|---|---|---|---|
raw | prerouting | output | |||
mangle | prerouting | input | forward | output | postrouting |
nat | prerouting | input(仅centos7) | output | postrouting | |
filter | input | forward | output |
链和表的体现
规则说明
匹配条件(五元组)
S_IP:source ip,源ip
S_PORT:source port,源端口
D_IP: destination ip,目标ip
D_PORT: destination port,目标端口
TCP/UDP:第四层(传输层)协议
处理动作
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不回应任何信息,客户端只有当连接超时后才会有反应
REJECT:拒绝数据包,会发送给客户端一个数据包丢弃的响应信息
SNAT:source NAT源地址转换,进入路由后,出本网络栈之前改写源地址,目的地址不变,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送出去时候的源地址,并发送给主机。解决私网用户用同一个公网IP上网的问题;
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的IP上;
DNAT:Destination NAT目的NAT,解决私网服务端,接收公网请求的问题。和SNAT相反,IP包经过route之前,重新修改目标地址,源地址不变,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机??梢砸睾蠖朔衿鞯恼媸档刂?;
REDIRECT:在本机做端口映射;
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。 除去最后一个LOG,前3条规则匹配数据包后,该数据包不会再往下继续匹配了,所以编写的规则顺序极其关键。
iptables -n -v -L
-n:以数字的形式展示
-v:详细的输出
-L:指定查看的表(不指定则全部输出)
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
13642 1034K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 128 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
275 53284 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 12516 packets, 1489K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT: INPUT链上的规则,同理,后面的“Chain FORWARD”、“Chain OUTPUT”分别是FORWARD链和OUTPUT链上的规则;
(policy ACCEPT): 表示默认策略是接受,即假如我没设置,那就是允许,只有我设置哪个不允许,才会不允许,示例中是安装iptables后的默认规则,由于默认是ACCEPT,你规则也设置为ACCEPT按道理来说是没什么意义的,因为你不设置也是ACCEPT呀,但事实上,是为了方便修改为REJECT/DROP等规则,说白了就是放在那,要设置的时候我们就可以直接修改;
prot:表示协议,如tcp(传输控制协议)、udp(用户数据报协议)、icmp(互联网控制报文协议)等。
opt:表示规则对应的选项。
in:表示数据包由哪个接口(网卡)流入,可用于设置通过哪块网卡流入的报文需要匹配当前规则。
out:表示数据包由哪个接口(网卡)流出,可用于设置通过哪块网卡流出的报文需要匹配当前规则。
source:表示数据包的源 IP 地址,可以是一个具体的 IP 地址或一个网段。
destination:表示数据包的目标 IP 地址,也可以是一个具体的 IP 地址或一个网段。
pkts: packets,包的数量;
bytes:流过的数据包的字节数;
target: 英文意思是“目标”,但该列的值通常是动作,比如ACCEPT(接受)、REJECT(拒绝)等等,但它确实可以是“目标”,比如我们创建 一条链iptables -N July_filter,然后在INPUT链上添加一条规则,让它跳转到刚刚的新链-A INPUT -p tcp -j July_filter,再用iptables -L查看,可以看到target此时已经是真正的“target(July_filter)”而不再是动作了
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
July_filter tcp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain July_filter (1 references)
target prot opt source destination
参考链接:
https://blog.csdn.net/weixin_40579389/article/details/131397405