Liunx防火墙--iptables(二)攻击与防御篇

网络层攻击的定义

      网络层攻击定义为:通过发送滥用网络层的首部字段的一个或者一系列的数据包以利用网络栈漏洞或消耗网络层资源进行攻击。

1.首部滥用:包含有恶意构造的,损坏的或经过非法改造的网络层首部的数据包。(如虚假源ip地址,或者包含虚假片偏移)

2.利用网络栈漏洞:如Linux 2.6.9 以前版本发现的IGMP拒绝服务Dos漏洞。

3.宽带包和:DDos攻击。

4.IP分片:任何连接两个不同MTU大小的数据链路层的路由器都有责任确保这两个数据链路层之间传输的IP数据包大小不会超过任何一方的MTU的值。而攻击者可以利用分片,将一个数据包故意分成多个IP片来逃避IDS(入侵检测系统)的检查。

5.低TTL攻击。

         虽然非法改造的ip首部可能会被防火墙或带有访问控制列表(ACL)的路由器一一过滤调,但是强大的黑客面前没有攻不破的系统。

防火墙iptables 主要是工作在网络层上的,iptables则可以通过记录网络层数据包的首部来捕获可疑的网络层活动。

首先则是 记录IP首部,使用的是 --log-ip-options 命令行参数将LOG规则添加到iptables策略。

首先是iptables命令(注意,这里为了演示,会停掉firewall对iptables的规则)。

# iptables -A INPUT -j LOG --log-ip-options

在另一台机器对该机器进行ping操作

$ ping -c 1 -T tsonly 192.168.199.208
PING 192.168.199.208 (192.168.199.208) 56(124) bytes of data.
64 bytes from 192.168.199.208: icmp_seq=1 ttl=64 time=0.241 ms
TS: 	51551931 absolute
	-1833
	1
	1832


--- 192.168.199.208 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.241/0.241/0.241/0.000 ms

查看日志
# grep "ICMP" /var/log/messages 
Aug  6 21:58:15 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=124 TOS=0x00 PREC=0x00 TTL=64 ID=28193 DF OPT (44280D0002FF785002FF712700000000000000000000000000000000000000000000000000000000) PROTO=ICMP TYPE=8 CODE=0 ID=9332 SEQ=1 

其中日志详细记录首部内容。OPT后面跟的一长串十六进制字节是包含在IP首部的完整IP选项。

 

传输层攻击的定义

    通过发送滥用的传输层首部字段的一个或一系列数据包或利用传输栈的漏洞进行攻击。

 1.耗尽连接资源:用于耗尽一个目标主机为新连接提供服务的的所有可用资源的数据包。(如SYN泛洪实施的DDos攻击)

 2.首部滥用:比如用于中断一个TCP连接的伪造RST数据包。

 3.端口扫描:一个人对你心怀不轨,必定会事先踩点。

而记录tcp首部的手段就是参数 --log-tcp-options

# iptables -A INPUT -j LOG --log-tcp-options

对该主机进行探测

$ nc -v 192.168.199.208 25010
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection refused.

查看日志

# grep "25010" /var/log/messages 
Aug  6 22:52:19 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63634 DF PROTO=TCP SPT=49440 DPT=25010 WINDOW=29200 RES=0x00 SYN URGP=0 
Aug  6 22:52:19 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63634 DF PROTO=TCP SPT=49440 DPT=25010 WINDOW=29200 RES=0x00 SYN URGP=0 OPT (020405B40402080A00712A670000000001030307) 

 

下面介绍一下端口扫描技术。

端口扫描不得不说一下一款优秀的端口扫描技术--Nmap 。

TCP connect() 扫描 --- (nmap -sT)

TCP SYN 或半开放扫描 --- (nmap -sS)

TCP FIN或XMAS和NULL 扫描 --- (nmap -sF,-sX,-sN)

TCP ACK 扫描 --- (nmap -sA)

TCP idle 扫描 --- (nmap -sI)

UDP 扫描 --- (nmap -sU)

nmap 的 -P0 是指强制跳过判断iptablesfw系统是否在线的过程(即省略主机的发现过程)。从nmap的角度来看一个被扫描的端口可能处于3种状态。

开放,关闭,被过滤。   

TCP connect() 扫描

       这种是最基本的扫描方式,也是最普通的TCP连接。如果SYN数据包到了一个开放的端口,服务器的TCP协议将以一个SYN/ACK数据包作为响应。确认收到了来自客户端的初始序号,同时会将自己的序号给客户端,客户端受到SYN/ACK数据包后,将返回一个确认数据包给服务器。此时就建立连接参数,连接状态也成为了“establish” 状态,并准备好传输数据。

      在TCP connect() 扫描时,就是最普通的TCP连接,针对每一个被扫描的端口发送SYN数据包和握手结束的ACK数据包。

对应的nmap 命令为 nmap -P0 -sT 192.168.199.208

$ nmap -P0 -sT 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:11 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.0018s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds


$ grep SYN /var/log/messages |tail -n 1
Aug 28 23:43:47 vm1 kernel: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=192.168.199.208 DST=192.168.199.208 LEN=44 TOS=0x00 PREC=0x00 TTL=47 ID=37472 PROTO=TCP SPT=60907 DPT=111 SEQ=2712329176 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT (020405B4) 

 

TCP SYN或半开放 扫描

      半开放是类似于connect() 扫描的。扫描器发送一个SYN数据给TCP端口,希望获得一个SYN/ACK数据包或者RST/ACK 。收到前者表示目标端口是开着的,收到后者表示是关着的。当然还存在第三种情况,那就是什么都没获得,这种情况只能说明数据包被过滤了,这个端口到底开着或者没开,nmap也不知道。但是这种扫描方式不会完成3次握手,也就是它故意不返回ACK给已经响应了SYN/ACK数据包的开放端口。因此SYN扫描也称为半开放扫描。这种反常规的操作其实绕过了TCP协议栈,这是通过原始套接字实现的。

      如果对一个iptablesfw系统进行扫描,SYN扫描所记录的TCP选项将十分的少。

$ nmap -P0 -sS 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:37 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00035s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds

TCP FIN,XMAS,NULL 扫描

      FIN,XMAS,NULL 扫描的操作是基于同一个原理,就是当某个关闭端口突然收到一个没有设置SYN,ACK或RST控制位的TCP数据包时,通常是一个RST去响应这个令人诧异的数据包,但如果是一个开放的端口,TCP将不做任何响应。

$ nmap -P0 -sF 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:44 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00031s latency).
Not shown: 998 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
111/tcp open|filtered rpcbind
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds

TCP ACK扫描

    TCP ACK扫描向每个被扫描的端口发送一个TCP ACK数据包。如果目标数据包发送出去有接收到RST(不是RST/ACK数据包)说明端口是开放或者关闭的,没有回信表示被过滤了。

    ACK扫描的目的并不是确定某个端口是开着的还是关着的,它是为了确定一个端口是否被一个有状态的防火墙过滤了。

$ nmap -P0 -sA 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:52 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00035s latency).
All 1000 scanned ports on vm1.lan (192.168.199.208) are unfiltered
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

 

 

 

你可能感兴趣的:(运维,协议)