自学渗透测试第20天(防火墙基础与规则配置)
7.3 防火墙基础与规则配置(第20天)
核心目标
理解防火墙原理:掌握包过滤、状态检测、应用层代理等防火墙工作原理,理解iptables/netfilter架构。
掌握iptables配置:熟练使用iptables命令配置防火墙规则,实现访问控制、端口转发、网络地址转换。
掌握防火墙绕过技术:了解常见的防火墙绕过方法,如端口复用、隧道技术、协议混淆等。
模块一:防火墙基础概念
1.1 防火墙类型
包过滤防火墙:工作在网络层和传输层,检查IP、端口、协议。速度快,但无法理解应用层内容。
状态检测防火墙:在包过滤基础上,跟踪连接状态(如TCP三次握手)。更安全。
应用层代理防火墙:工作在应用层,理解协议内容。安全性高,但速度慢。
下一代防火墙:集成入侵防御、应用识别、用户身份管理等。
1.2 iptables/netfilter架构
netfilter:Linux内核中的框架,提供数据包处理钩子。
iptables:用户空间工具,用于配置netfilter规则。
四表五链:
表:
filter(过滤)、nat(地址转换)、mangle(修改数据包)、raw(连接跟踪)。链:
INPUT(入站)、OUTPUT(出站)、FORWARD(转发)、PREROUTING、POSTROUTING。
模块二:iptables配置与管理
2.1 基本语法
iptables [-t 表名] 命令 链名 [规则号] 匹配条件 -j 动作
常用命令:
-A:追加规则-I:插入规则-D:删除规则-L:列出规则-F:清空规则-P:设置默认策略常见动作:
ACCEPT:接受DROP:丢弃(无响应)REJECT:拒绝(返回拒绝包)rejectLOG:记录日志SNAT:源地址转换DNAT:目标地址转换
2.2 常用规则配置
查看规则:
iptables -L -n -v # 查看filter表规则 iptables -t nat -L -n -v # 查看nat表规则 #-t :指定对应的表格;nat:地址转换(修改地址)。
清空所有规则:
iptables -F iptables -t nat -F iptables -t mangle -F
设置默认策略:
iptables -P INPUT DROP # 默认丢弃所有入站 iptables -P OUTPUT ACCEPT # 默认允许所有出站 iptables -P FORWARD DROP # 默认丢弃所有转发
2.3 访问控制规则
允许特定端口:
# 允许SSH(22端口) iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptalbes -A input -p tcp --dport 22 -j accept # 允许Web(80,443端口) iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT 注#-m:匹配模块 multiport 允许一次匹配多个端口 # 允许Ping iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A input -p icmp --icmp-type echo-request -j accept #注icmp:是网络中的控制协议。 #注:--icmp-type echo-request :只匹配icmp类型为“请求回显”类型的数据
基于IP的访问控制:
# 允许特定IP访问SSH iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT iptables -A input -s 192.168.190.145 -p tcp --dport 22 -j accept # 拒绝特定IP的所有访问 iptables -A INPUT -s 10.0.0.0/8 -j DROP/ iptables -A input -s 192.168.190.145 -j drop/
状态检测:
# 允许已建立的连接和相关的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #注: -m state :加载连接状态匹配的模块;--state:查找模块的类型;established:表示已经建立好的连接;related:与已有连接“相关”的连接。
2.4 NAT与端口转发
源地址转换:内网访问外网。
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE #注:-t nat:指定表格;-A postrouting:将规则增加到postrouting链中;postrouting:数据包“即将离开主机”的时候执行。 -o eth0:只匹配从“eth0"接口出去的数据;-j masquerade:执行“地址伪装”; masquerade:自动把源IP改为当前接口(eth0)的ip。
目标地址转换:端口转发、负载均衡。
# 将外部访问本机80端口的流量转发到192.168.1.100:80 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 #注:--to-destination:指定“数据流量改为要发向哪里”(指定流量转发的目的网址和对应的进入端口) #注:DNAT:修改目的网址;PREROUTING:在数据进入主机,还没有进行路由决策之前执行; # 本地端口转发 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80 #注:-j redirect:指定端口转发模块; --to-port:指定转发的端口。
2.5 规则持久化
保存规则:
iptables-save > /etc/iptables/rules.v4 #iptables-save:保存防火墙策略; /etc/iptables/rules.v4:指定的保存路径
恢复规则:
iptables-restore < /etc/iptables/rules.v4
开机自动加载:
# Debian/Ubuntu apt install iptables-persistent # 保存后自动加载 netfilter-persistent save netfilter-persistent reload
模块三:防火墙绕过技术
3.1 端口复用
原理:利用已开放的端口(如80、443)建立隐蔽通道。
工具:
iptables端口重定向socat:socat TCP-LISTEN:443,fork TCP:localhost:22sslh:在同一个端口上处理HTTPS和SSH。
3.2 隧道技术
SSH隧道:
# 本地端口转发(访问本地端口即访问远程服务) ssh -L 8080:远程主机:80 用户@跳板机 # 动态端口转发(创建SOCKS代理) ssh -D 1080 用户@服务器
HTTP/HTTPS隧道:
reGeorg、Tunna、reDuh:将流量封装在HTTP请求中。
DNS隧道:
dnscat2、iodine:通过DNS查询和响应传输数据,可绕过出站限制。
3.3 协议混淆
将流量伪装成常见协议:如HTTP、HTTPS、DNS、ICMP。
工具:
Ptunnel:ICMP隧道。Stunnel:将任意协议封装在SSL/TLS中。
3.4 其他绕过技术
分段传输:将数据包分片,绕过内容检查。
编码/加密:对Payload进行编码或加密,绕过IDS/IPS特征检测。
低频慢速:降低请求频率,绕过基于阈值的检测。
模块四:Windows防火墙基础
4.1 Windows防火墙管理
命令行:
netsh advfirewall show allprofiles # 查看防火墙状态 netsh advfirewall set allprofiles state off # 关闭防火墙 netsh advfirewall set allprofiles state on # 开启防火墙
添加规则:
# 允许端口 netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP localport=80 #注:打开windows防火墙的80端口,让外部电脑通过tcp协议访问本机的80端口。 # 允许程序 netsh advfirewall firewall add rule name="Allow MyApp" dir=in action=allow program="C:\MyApp.exe" # 删除规则 netsh advfirewall firewall delete rule name="Open Port 80"
模块五:当日达标实战任务
5.1 iptables基础配置
配置安全防火墙:在Kali或Ubuntu虚拟机上,配置iptables实现以下策略:
默认策略:INPUT链DROP,OUTPUT链ACCEPT,FORWARD链DROP。
允许本地回环通信。
允许已建立的连接和相关的连接。
允许SSH(22)、HTTP(80)、HTTPS(443)入站连接。
允许ICMP(ping)。
保存规则并确保重启后生效。
测试规则:从另一台主机测试端口连通性,确认规则生效。
5.2 端口转发实践
本地端口转发:在Kali上,将访问8080端口的流量重定向到本机的80端口。配置iptables规则,并验证访问
http://localhost:8080能打开本机80端口的服务。远程端口转发:如果有两台虚拟机,尝试配置DNAT规则,将访问防火墙主机(A)的2222端口的流量转发到另一台主机(B)的22端口,实现通过A的2222端口SSH连接到B。
5.3 防火墙绕过模拟
SSH隧道实践:如果有两台Linux主机(A和B),且A能SSH到B。在A上建立本地端口转发,将A的8888端口转发到B的80端口。然后在A上访问
http://localhost:8888,应看到B的Web页面。HTTP隧道工具体验:下载
reGeorg,将其上传到一台有Web服务的服务器。在本地使用reGeorgSocksProxy.py连接,建立SOCKS代理,尝试通过代理进行网络访问。
模块六:常见问题与解决方案
6.1 iptables配置问题
规则不生效:检查规则顺序(iptables规则从上到下匹配),确认默认策略。使用
iptables -L -n -v --line-numbers查看规则和匹配计数。配置后无法远程连接:在配置INPUT默认DROP前,确保已添加允许SSH的规则。或通过物理控制台登录修改。
NAT不生效:确保已开启IP转发(
net.ipv4.ip_forward=1),且数据包流经正确的链(PREROUTING, POSTROUTING)。
6.2 防火墙绕过问题
隧道连接不稳定:可能是防火墙有超时断开机制,或IDS干扰。尝试保持连接活性,或更换端口、协议。
HTTP隧道被识别:修改隧道工具的请求特征,或使用更隐蔽的工具。
6.3 安全建议
最小化开放端口:只开放必要的服务端口。
使用白名单:基于IP或用户的白名单比黑名单更安全。
日志监控:记录被拒绝的连接,定期分析。
多层防御:结合网络防火墙、主机防火墙、IDS/IPS、WAF等。
明日预告:第21天将开始Web漏洞挖掘实战,首先从SQL注入的深入利用开始,学习手工注入技巧、自动化工具sqlmap的使用,以及各种过滤绕过技术。
