DROP与REJECT
DROP和REJECT是iptables中常见的两个动作,它们的作用都是阻止进入网络设备的数据包,但是有一些区别。
DROP动作是指完全丢弃数据包,不给任何回应。这种情况下,发送方将会一直等待超时,然后重新发送数据包。DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡,对应报错为Connection timed out。
REJECT动作是指向发送方发送一个错误响应包,告诉它数据包被阻止了。这样发送方就不会一直等待超时,而是可以继续向其他设备发送数据包。REJECT动作会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作,对应报错为Connection refused。
底层逻辑是,当一个数据包到达网络设备时,iptables会将其与规则链中的每条规则进行匹配,如果匹配成功,则执行规则链中的相应动作。当iptables执行DROP动作时,它会直接丢弃数据包,而当执行REJECT动作时,它会给发送方发送一个错误响应包。
举个例子来说,假设你想阻止所有来自IP地址为192.168.1.10的主机的SSH连接。可以使用以下规则:
iptables -A INPUT -s 192.168.1.10 -p tcp --dport 22 -j REJECT
这条规则将所有来自192.168.1.10的主机的SSH连接拒绝,并向发送方发送一个错误响应包。
1、在host-34主机上设置DROP规则
[root@host-34 ~]# iptables -t filter -I INPUT -p tcp –dport 80 -s 192.168.1.48 -j DROP
2、在host-48主机上测试
[root@host-48 ~]# nc -vz 192.168.1.34 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection timed out.
1、在host-34主机上设置REJECT规则
[root@host-34 ~]# iptables -t filter -I INPUT -p tcp –dport 80 -s 192.168.1.48 -j REJECT
2、在host-48主机上测试
[root@host-48 ~]# nc -vz 192.168.1.34 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.