Linux-Iptables
防火墙
分类:
1、软、硬件形式分类:软件防火墙、硬件防火墙、芯片级防火墙。
2、防火墙技术分类:包过滤型防火墙、应用代理型防火墙 、复合型防火墙。
3、从逻辑上分类:主机防火墙(针对于单个主机进行防护)、网络防火墙(往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网)。网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。
Iptables 简介
Iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代 理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架 的名字叫netfilter
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。iptables其实是一个命 令行工具,位于用户空间,我们用这个工具操作真正的框架。
netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软 件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封 包重定向和网络地址转换(NAT)等功能。
Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:
-
网络地址转换﴾Network Address Translate﴿
-
数据包内容修改
-
以及数据包过滤的防火墙功能
所以说,虽然我们使用service iptables start启动iptables"服务",但是其实准确的来说iptables并 没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。
表链结构
好文推荐:http://www.zsythink.net/archives/1199
(朱双印博客图)
-
如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡,而这些关卡在iptables中不被称为"关卡",而被称为"链"。
#INPUT链 – 处理来自外部的数据。 #OUTPUT链 – 处理向外发送的数据。 #FORWARD链 – 将数据转发到本机的其他网卡设备上。 #PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。 #POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
-
每一个关卡上面有很多规则,这些规则连在一起就是链
-
不同的链上面会有一些规则是相似的,我们把相同功能的规则放在一起叫做表
iptables提供的表: filter表:负责过滤功能,防火墙;内核模块:iptables_filter nat表:network address translation,网络地址转换功能;内核模块:iptable_nat mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle raw表:关闭nat表上启用的连接追踪机制;iptable_raw
-
表链关系,每条链中会不同规则存在于不同的表中,
rules指定所检查包的特征和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定。该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],DROP[删除], QUEUE[排队],或者 RETURN[返回]。
-
下图展示了iptables的三个内建表
实例实验
实验原理
原本从nginx服务映射到Kali 2019中的流量,现在通过iptables转发到Kali 2018的另一个端口上,这样将Kali 2019的ip隐藏了起来,通过Kali 2018访问的流量实际上来自于Kali 2019
实验准备
Kali 2019:192.168.43.132
Kali 2018:192.168.43.222
实验步骤
-
在kali2019中打开docker服务。
service docker start
-
在docker环境中将nginx服务运行在7789端口上,并且将7789端口映射到80端口供访问。
docker run -p 7789:80 nginx
kali2018访问2019地址,显示nginx页面,说明服务成功运行
-
在kali2018中开启中间代理转发
iptables -t nat -A PREROUTING -p tcp --dport 7788 -j DNAT --to 192.168.43.132:7789 iptables -t nat -A POSTROUTING -p tcp -d 192.168.43.132 --dport 7789 -j SNAT --to 192.168.43.222 iptables -t nat -L # -L是--list的简写,作用是列出规则。 # -t: 指定表 # ‐A:向规则链中添加条目(Append),iptables中共有INPUT, OUTPUT, FORWARD, P REROUTING, POSTROUTING五个规则链 # ‐p:指定要匹配的数据包协议类型 # ‐‐dport:匹配目的端口(可指定连续的端口) # ‐j<目标>:指定要跳转的目标 # DNAT:目标地址转换,iptables中共有ACCEPT, DROP, REDIRECT, SNAT, DNAT, MASQUERADE, LOG,REJECT八种动作
查看设置项情况
-
查看ip_forward值 ,为0
cat /proc/sys/net/ipv4/ip_forward
-
设置ip_forward值为1,开启转发
sysctl ‐w net.ipv4.ip_forward=1
-
在filter表中添加规则
iptables -t filter -I FORWARD -j ACCEPT
结果
使用物理机访问kali2019和访问2018是一样的结果,都是nginx服务。成功转发
参考文章链接: