需求A服务器要访问B服务器的数据库
问题:mysql 连接超时
服务器:Ubuntu、iptables内部防火墙
注释:A服务器 B服务器 ,用A和B来代替服务器的IP地址。A服务器作为访问服务器,B服务器作为被访问服务器
1:首先在B服务器上查询防火墙规则
iptables -nL --line-number
一般会有一条禁用任何服务器都可以访问3306的规则,具体长什么样子,我当时没在意。这里就不列举了。
2:删除那条禁用任何服务器访问3306端口的规则
iptables -D INPUT 规则编号
3:删除后增加一条让A可以访问的规则
iptables -I INPUT -s A -p tcp --dport 3306 -j ACCEPT
4:增加后用A访问B发现可以访问数据库,但是为了安全,我又试着用C服务器访问了B发现也可以访问,这并不是我想要的效果,我想要的只是让A访问。
5:那么便在增加一条让其他服务器不能访问的规则
iptables -I INPUT -p tcp --dport 3306 -j DROP
增加后,发现我的A服务器又不能访问了,我就郁闷了,搜了资料才知道防火墙是按照优先级执行的,我这样的规则插入方法,会让这条规则在第一个,导致我对A服务器的规则不起作用。
6:删除刚才加的那条禁用其他服务器访问的规则,删除命令和上面一样,换编号就行了。
7:在增加一条禁用3306端口的规则优先级低一点。
iptables -A INPUT -p tcp --dport 3306 -j DROP
然后用C在访问发现不能访问了,用A访问可以访问,到此就配置成功了。其实走到最后我发现,就没那么麻烦,直接新建一条优先级高于禁用所有3306端口的规则就好了。
因为是阿里云服务器,首先需要排除你在阿里云的安全组设置开禁用3306端口的策略哟~
因为我不是专业运维,对此也只是仅仅以解决需要为主,写的比较浅,希望可以帮助到一些道友。