防火墙总结

前言

之前在安全客上看到一篇关于流量出网的文章,这里我进行深入总结一下。

利用过程

探测出站规则未禁用的端口:(在没用权限使用防火墙命令的情况下)

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

这样就能通过自己的服务器探测对方出站还存留了哪些端口了

posted @ 2020-04-23 09:41  0DayBug  阅读(480)  评论(0编辑  收藏  举报