防火墙总结
前言
之前在安全客上看到一篇关于流量出网的文章,这里我进行深入总结一下。
利用过程
探测出站规则未禁用的端口:(在没用权限使用防火墙命令的情况下)
powershell -c "1..65535 | % {echo ((new-object Net.Sockets.TcpClient).Connect('allports.exposed',$_)) $_ } 2>$null"
这里我们配置出站规则禁止特定端口出站,以下为效果图:
如果想使用msf连接的话,可以通过服务端设置这些端口连接。
ICMP(Internet Control Message Protocol):没有目的端口与源端口,属于Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
如果防火墙的出站规则配置了禁用端口,那么可能会造成不能出网的状况,但是此时如果没有单独配置禁用icmp协议,是可以通过icmp协议出网的。
此时是可以ping通外网的
所以我们可以通过icmp通道进行连接,是可以出网的
但是如果禁用了icmp出站协议,就只能通过关闭防火墙出网了。
防火墙配置
netsh advfirewall show allprofiles 查看防火墙状态
netsh firewall set opmode mode=disable 开启防火墙
netsh advfirewall set publicprofile state on
netsh firewall set opmode mode=disable 关闭防火墙
netsh advfirewall set publicprofile state off
netsh firewall show logging 防火墙日志目录
netsh advfirewall set currentprofile logging filename "C:\windows\temp\test.log" 自定义防火墙日志位置
netsh advfirewall firewall show rule name=all 查看防火墙配置的所有规则(可查看防火墙的出站与入站端口)
netsh advfirewall firewall delete rule name="rule name" 删除规则
如果配置了入站规则,需要连接3389时可以通过转发和添加规则的的方式连接
第一种方法:添加出站端口
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow 添加出站规则允许3389端口
第二种方法:流量转发
netsh advfirewall firewall add rule name="test" dir=in action=allow protocol=TCP localport=8888 添加防火墙出站端口,也可以查看配置
netsh interface portproxy add v4tov4 listenport=8888 connectaddress=本机ip connectport=3389 添加转发规则(connectaddress这里如果要访问本地端口不要填127.0.0.1,要填网卡ip,也可以填内网中别的机器的ip,可作为跳板机)
netsh interface portproxy show all 查看转发规则所有配置
netsh interface portproxy delete v4tov4 listenport=8888 protocol=tcp 删除转发规则
Linux配置防火墙:
参数 作用
-P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
dport:目的端口 出站规则
sport:来源端口 入站规则
-p 协议(protocol)
-s 源地址(source)
-d 目的地址(destination)
-j 执行目标(jump to target)
常用的ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
REDIRECT:重定向:主要用于实现端口重定向
RETURN:返回
PREROUTING: 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING: 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
iptables -L -n --line-number 列出所有规则并且添加相应的序号
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 允许别人访问22端口
iptables -A OUTPUT -p udp --dport 53 -j DROP 禁止自己访问53端口
iptables -A OUTPUT -p tcp --dport 1:65535 -j DROP 禁用出站多个端口
multiport参数配置不连续端口
iptables -A INPUT -p tcp -m multiport --dport 21:25,135:139 -j DROP
iptables -I INPUT -s 192.168.60.1 -j DROP 屏蔽单个IP
iptables -D OUTPUT 1 删除规则
service iptables save 保存
iptables-save > /etc/iptables.rules 保存
linux禁止icmp协议
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
允许ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
linux探测防火墙出网
找一台公网服务器,开启防火墙,将所有端口绑定至8888端口
iptables -A INPUT -p tcp --dport 1:65535 -j ACCEPT (允许1-65535端口入站)
iptables -A PREROUTING -t nat -p tcp -m multiport --dport 1:21,23:65535 -j REDIRECT --to-port 8888 (记得把ssh留出来,不然自己连不上了)
nc -lvp 8888 nc监听本机8888端口
iptables -t nat -F 清空nat表的所有链
iptables -t nat -F PREROUTING 清空PREROUTING表
iptables -t nat -L 查看nat表所有规则
for i in {50..80}; do timeout 1 bash -c "echo > /dev/tcp/192.168.60.129/$i" && echo "$i open" || echo "$i closed"; done
这样就能通过自己的服务器探测对方出站还存留了哪些端口了