iptables之服务器应急响应及提供服务器防御解决方案实验

【实验目的】

参考实验场景及实验步骤完成服务器应急响应工作并重新为服务器部署策略。

【知识点】

iptables使用

【实验场景】

某公司今天凌晨,运维中心收到警报,公司两台服务器(NAT服务器、Web服务器)cpu飙升。现你收到通知,需要你第一时间为这两台服务器进行应急处理。处理包括:1.解决服务器CPU飙升的情况;**2.**重新为服务器部署策略防止此类事情再次发生。

【实验原理】

iptables防火墙工作在网络层,针对TCP/IP数据包实施过滤和限制,iptables防火墙基于内核编码实现,具有非常稳定的性能和高效率;iptables属于“用户态”的防火墙管理体系。规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

【实验设备】

主机终端:Windows 7主机 *** 1**台,RedHat 7 服务器 *2台,RedHat 7 主机 *1

【实验拓扑】

image-20200414231015217

【实验思路】

1、在Web服务器上查看当前iptables规则。

2、在Web服务器上增加iptables防火墙配置,禁止攻击源IP(Windows攻击机的IP地址)对该服务器的所有流量,然后查看iptables规则。

3、在Web服务器上配置loopback回环通信。

4、在Web服务器上增加iptables规则,禁止对该主机进行nmap扫描,然后查看下iptables规则。

5、在Web服务器上设置禁止ICMP协议。

6、在NAT服务器中增加部署iptables NAT代理,配置Web服务器只允许内网Linux客户端访问和通过代理服务器访问,并查看iptables规则。

7、验证:登录Windows攻击机,打开浏览器访问Web服务器,可以看到配置策略后攻击源无法再次访问。

8、验证:在Windows攻击机上使用nmap扫描Web服务器,可以看到配置禁止nmap扫描策略后扫描失败。

9、验证:在Windows攻击机上对Web服务器ip进行ping操作,发现配置禁止ICMP策略后无法ping通。

10、验证:打开Linux客户端测试访问Web服务器,可以正常访问。

11、验证:打开NAT服务器测试访问Web服务器,可以正常访问。

12、打开NAT服务器进行配置,先将防火墙进行初始化,然后将Web服务器默认的80端口映射到NAT服务器的8080端口。

13、在NAT服务器上开启转发功能,查看NAT表所有链的规则。

14、验证:登录Windows攻击机打开浏览器,配置好策略后通过代理访问,可以成功访问。

15、分别在每台服务器(Web服务器、NAT服务器)中配置ssh只对Linux客户端开放,除Linux客户端IP外其他IP不允许对其ssh访问。

16、验证:在Windows攻击机中利用工具分别对Web服务器和NAT进行ssh连接,连接失败。

17、验证:在Linux客户端中分别对Web服务器和NAT进行ssh连接,连接成功。

18、在Web服务器上配置策略屏蔽3306端口,只允许本机访问。

19、验证:在Linux客户端中访问Web服务器mysql服务,访问失败。

20、验证:在Web服务器中访问mysql服务,访问成功。

21、打开NAT服务器,增加iptables规则,禁止对该主机进行nmap扫描。

22、验证:在Windows攻击机中使用nmap扫描NAT服务器,扫描失败。

【实验预期】

1、在Windows攻击机中打开浏览器访问Web服务器,配置好策略后攻击源无法访问。

2、在Windows攻击机上使用nmap扫描Web服务器,配置好策略后扫描失败。

3、在Windows攻击机上对Web服务器ip进行ping操作,配置好策略后无法ping通。

4、分别打开Linux客户端和NAT服务器测试访问Web服务器,可以正常访问。

5、在Windows攻击机中打开浏览器,配置好策略后通过代理访问,可以成功访问。

6、在Windows攻击机中利用工具分别对Web服务器和NAT进行ssh连接,均连接失败。

7、在Linux客户端中分别对Web服务器和NAT进行ssh连接,连接成功。

8、在Linux客户端中访问Web服务器mysql服务,访问失败。

9、在Web服务器中访问mysql服务,访问成功。

10、在Windows攻击机中使用nmap扫描NAT服务器,扫描失败。

【实验结果】

1、登录Windows攻击机,打开浏览器访问Web服务器,可以看到策略配置后攻击源无法再次访问。

2、在Windows攻击机上打开命令行界面使用命令:nmap 192.168.1.101(Web服务器IP)扫描Web服务器,可以看到配置禁止nmap扫描策略后扫描失败。

3、在Windows攻击机上对Web服务器ip使用ping命令:ping 192.168.1.101(Web服务器ip),发现配置禁止ICMP策略后无法ping通。

4、打开Linux客户端使用命令:curl 192.168.1.101,测试访问Web服务器,可以正常访问。

5、打开NAT服务器使用命令:curl 192.168.1.101,测试访问Web服务器,可以正常访问。

6、打开Windows攻击机,配置好策略后通过代理访问,访问成功。

7、登录Windows攻击机,打开实验工具里的PuTTY工具,分别输入192.168.1.101(Web服务器IP)和192.168.10.10NAT服务器IP),点击【Open】,发现配置策略后Windows攻击机通过SSH无法连接Web服务器和NAT服务器。

8、登录Linux客户端,在终端中输入命令:ssh 192.168.1.101(Web服务器IP)登录成功,继续输入命令:exit登出,然后输入:ssh 192.168.10.10(NAT服务器IP)登陆成功。

9、打开Linux客户端,在终端中输入命令:mysql –uroot –h192.168.1.101 –p(192.168.1.101为Web服务器ip),连接失败。

10、打开Web服务器,在终端中输入命令:mysql –uroot –p,连接成功。

11、在Windows攻击机上,打开命令行界面,输入命令:nmap -A 192.168.10.10(NAT服务器IP),扫描NAT服务器,扫描失败。

【实验步骤】

1、在Web服务器中打开终端,root用户下输入命令:iptables –L,查看当前iptables规则。如图所示:

image-20200408220456980

2、增加iptables防火墙配置,禁止攻击源IP(Windows攻击机的IP地址)对该服务器的所有流量,使用的命令是:iptables -I INPUT –s 192.168.20.20 -j DROP。其中192.168.20.20是Windows攻击机的IP地址,配置好后使用命令iptables -L查看当前所有iptables配置。如图所示:

image-20200408221422123

2: 配置并查看iptables规则

3、在Web服务器上配置loopback回环通信,输入命令:

iptables -A INPUT -i lo -p all -j ACCEPT //添加iptables规则,允许来自于lo接口的数据包。

iptables -A OUTPUT -o lo -p all -j ACCEPT//添加iptables规则,允许向lo接口发送数据包。

其中lo为回环网卡

image-20200409003640625

4、在web服务器上增加iptables规则,禁止对该主机进行nmap扫描,配置完后用iptables-L查看下iptables规则。输入命令:

1
2
3
iptables -I INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -I INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -I INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

iptables -L

image-20200409005219308

5、在Web服务器上设置禁止ICMP协议,输入命令:

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP。配置完成后查看一下

image-20200409005505546

6、在Web服务器中部署iptables NAT代理,配置Web服务器只允许内网Linux客户端访问和通过代理服务器访问,并查看iptables规则(192.168.1.102为Linux客户端IP,192.168.10.10为NAT服务器IP)。如图6所示:

输入命令:

1
2
3
4
iptables -A INPUT -s 192.168.1.102 -p tcp --dport 80 -j ACCEPT 
iptables -A INPUT -s 192.168.10.10 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p TCP --dport 80 -j REJECT
iptables -L

image-20200409010610999

7、验证:登录Windows攻击机,打开浏览器访问Web服务器,可以看到策略配置后攻击源无法再次访问。

image-20200408224735446

8、验证:在Windows攻击机上打开命令行界面使用命令:nmap 192.168.1.101(Web服务器IP)扫描Web服务器,可以

看到配置禁止nmap扫描策略后扫描失败。如图所示:

image-20200408225450155

9、验证:在Windows攻击机上对Web服务器ip使用ping命令:ping 192.168.1.101(Web服务器ip),发现配置禁止ICMP策略后无法ping通。

image-20200408225559823

10、验证:打开Linux客户端使用命令:curl 192.168.1.101,测试访问Web服务器,可以正常访问。如图所示:

image-20200414115519467

11、验证:打开NAT服务器使用命令:curl 192.168.1.101,测试访问Web服务器,可以正常访问。如图所示:

image-20200414115447825

12、打开NAT服务器进行配置,先将防火墙进行初始化,然后再将Web服务器默认的80端口映射到NAT服务器的8080端口。(192.168.1.101为Web服务器ip,192.168.10.10为NAT服务器ip)

输入命令:

1
2
3
iptables -F //清除所有规则,不会处理默认的规则
iptables -X //删除用户自定义的链
iptables -Z //链的计数器清零(数据包计数器与数据包字节计数器)
1
2
3
4
5
6
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.101:80 
iptables -t nat -A POSTROUTING -d 192.168.1.101 -p tcp --dport 80 -j SNAT --to 192.168.10.10
//通过访问NAT代理服务器的8080端口来实现到Web服务器内网地址的80端口的访问
echo 1 > /proc/sys/net/ipv4/ip_forward //开启转发功能

iptables -t nat –L //查看NAT表所有链的规则

image-20200414121734541

13、验证:打开Windows攻击机,配置好策略后通过代理访问(地址栏ip改为NAT代理服务器ip和端口:192.168.10.10:8080),访问成功。如图12所示:

image-20200414135144020

14、打开Web服务器配置ssh只对Linux客户端开放,除Linux客户端IP(192.168.1.102)外其他IP不允许对其ssh访问。输入命令:

1
2
iptables -A INPUT -s 192.168.1.102 -p tcp -m tcp --dport 22 -j ACCEPT//接受Linux客户端IP的访问 
iptables -A INPUT -p tcp -m tcp --dport 22 -j DROP //其他IP的访问包丢弃

15、打开NAT服务器配置ssh只对Linux客户端开放,除Linux客户端IP(192.168.1.102)外其他IP不允许对其ssh访问。输入命令:

1
2
iptables -A INPUT -s 192.168.1.102 -p tcp -m tcp --dport 22 -j ACCEPT//接受Linux客户端IP的访问 
iptables -A INPUT -p tcp -m tcp --dport 22 -j DROP //其他IP的访问包丢弃

16、验证:登录Windows攻击机,打开实验工具里的PuTTY工具,在【Host Name】输入框中分别输

192.168.1.101Web服务器IP)和192.168.10.10NAT服务器IP),点击【Open】进行连接,发现配置策略后Windows攻击机通过SSH无法连接Web服务器和NAT服务器。如图16所示:

image-20200414141002503

image-20200414141130254

17、验证:登录Linux客户端,在终端中输入命令:ssh 192.168.1.101(Web服务器IP),登录成功,继续输入命令:exit登出,然后输入:ssh 192.168.10.10(NAT服务器IP)登陆成功,密码均为123456,如图17所示:

image-20200414141511964

18、在Web服务器上配置策略屏蔽3306端口,只允许本机访问。打开Web服务器,在终端中输入命令:

1
2
3
4
iptables -A INPUT -s 192.168.1.101 -p tcp --dport 3306 -j ACCEPT 
iptables -A OUTPUT -d 192.168.1.101 -p tcp --sport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
//屏蔽3306端口

19、验证:打开Linux客户端,在终端中输入命令:

1
mysql –uroot –h 192.168.1.101 –p

(192.168.1.101为Web服务器ip,密码为123456),连接失败。

image-20200414142548791

20、验证:打开Web服务器,在终端中输入命令:mysql –uroot –p(密码为123456),连接成功。如图20所示:

image-20200414142707850

21、打开NAT服务器,增加iptables规则,禁止对该主机进行nmap扫描。输入命令:

1
2
3
4
5
iptables -A INPUT -p tcp --tcp-flag ALL FIN,URG,PSH -j DROP 
iptables -A INPUT -p tcp --tcp-flag SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flag SYN,FIN SYN,FIN -j DROP
iptables -I INPUT -s 192.168.20.20 -j DROP
//禁止nmap扫描
1
iptables –L

如图所示:

image-20200414150602258

22、验证:在Windows攻击机上,打开命令行界面,输入命令:nmap -A 192.168.10.10(NAT服务器IP),扫描NAT服务器,扫描失败。如图22所示:

image-20200414160448916

可以发现只扫出了8080端口的开放信息,这是因为NAT服务器的8080端口开放为Web服务器设置转发。

image-20200414161540279

对比NAT服务器的开放端口,可知iptables设置成功,nmap失效

【实验思考】

1、在上述实验中,配置禁止ICMP策略后将达到什么效果,配置NAT代理有什么好处?若缺少这一步可能会存在什么安全威胁?

答:

(1)主机配置禁止ICMP策略后无法其他及其无法对该主机进行正常的ping回应

(2)对外隐藏了内部管理的IP地址和隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。

(3)(内网)主机可能会遭受DDos攻击、暴力破解等攻击。

2、在配置的端口映射的规则中PREROUTING、和POSTROUTING分别表示是什么样的一个动作?

(1)PREROUTING是目的地址转换,对象是由外部公网发往内网的数据包,把外来的公网IP换成自建内部网络的IP,才可访问到自建内部网络受防火墙保护的机器。

(2)POSTROUTING是源地址转换,对象是由内网发往外部公网的数据包,把自建内网地址转换成外部公网地址再向外发送。

【扩展实验】

请学员课后完成以下扩展实验,并提交实验报告:

若对指定IP192.168.1.101解除防火墙限制,执行该条配置命令:

1
iptables -A INPUT -p tcp -s 192.168.1.101 --dport 3306 -j ACCEPT

保存重启后发现还是无法远程连接3306,原因是什么,正确配置是什么?

按照如上设置后进入linux客户端登陆mysql

image-20200414170726946

远程访问出现not allowed的提示消息,说明远程用户无权限,因此需要修改服务器的mysql用户表

进入Web服务器

查看sql

1
mysql -uroot -p123456

输入sql语句

1
2
mysql> use mysql;
mysql> use select host,user,password from user;

image-20200414183459151

可以看出root账户只允许在本地登陆

设置root账户可以远程登录

1
2
mysql>update user set host='%' where user='root' and host='localhost';
mysql>flush privilegses;

image-20200414184123331

成功更改host地址,host='%'表示所有机器。

切换至linux客户端(192.168.1.102)

登陆服务器sql

1
mysql -uroot -h 192.168.1.101 -p123456

image-20200414184347549

成功远程登陆mysql