客户端和服务端均属于内网分别是
客户端: 10.173.32.75/21
服务端: 10.173.32.78/21
目前客户希望内网的 10.173.32.78 的3306端口 只能被10.173.32.75 连接。
开启防火墙并配置规则如下:
[root@server ~]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.21 on Fri Oct 20 10:01:35 2017 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [41:4460] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A INPUT -s 10.173.32.75/32 -p tcp -m tcp --dport 3306 -j ACCEPT COMMIT # Completed on Fri Oct 20 10:01:35 2017
|
然后经过测试发现,对端10.173.32.75 无法连接到服务端的3306端口
服务端
[root@server ~]# nc -l 3306 < 1.txt
|
客户提示没有路由
[root@client ~]# nc -n 10.173.32.78 3306 Ncat: No route to host.
|
解决
1.关闭防火墙测试没问题。说明99.9%是和防火墙的设置有关系。
2.测试上面配置文件中的第二条规则,连接22端口
[root@client ~]# nc -n 10.173.32.78 22 SSH-2.0-OpenSSH_6.6.1
|
发现没有问题,猜测是下面的2条规则出现了问题
-A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited
|
3.调整规则顺序,因为 iptables的规则是按顺序匹配的。
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s 10.173.32.75/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited
|
调整为如上规则后重启防火墙
[root@server ~]# vim /etc/sysconfig/iptables [root@server ~]# systemctl restart iptables [root@server ~]# nc -l 3306 < 1.txt 111
|
客户端测试,OK了。
[root@client ~]# nc -n 10.173.32.78 3306 111
|
那为什么为这样呢?我们先来看这两条规则的含义
-A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited
|
REJECT:拒绝请求,详见:DROP 和REJECT的区别
–reject-with 后面跟上的是 icmp-host-prohibited。
这两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited 的消息给被拒绝的主机。
host prohibited 是icmp 协议状态的一种,其他的如:
icmp-net-unreachable ICMP network unreachable net-unreach alias icmp-host-unreachable ICMP host unreachable host-unreach alias icmp-proto-unreachable ICMP protocol unreachable proto-unreach alias icmp-port-unreachable ICMP port unreachable (default) port-unreach alias icmp-net-prohibited ICMP network prohibited net-prohib alias icmp-host-prohibited ICMP host prohibited host-prohib alias tcp-reset TCP RST packet tcp-rst alias icmp-admin-prohibited ICMP administratively prohibited (*) admin-prohib alias
|
因为这两条规则的存在,其他任何数据包只要在其下面的都会被拒绝。所以需要调整期执行顺序。
文章作者:阿文
版权声明:本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0 许可协议。转载请注明来自
阿文的博客!