solr的访问权限管理及ubuntu下iptables的设置

时间:2022-02-26 22:31:23

Apache Solr 是一个开源的搜索服务器,该平台默认允许匿名访问,攻击者可读取平台中各类敏感信息。之前考虑过增加账号密码访问,但是没有搞定,所以采用了曲线救国的方式,设置solr服务器只允许部分IP访问。

ubuntu下iptables的设置参见: https://www.tuicool.com/articles/QvQNZbu

iptables -I INPUT -p tcp --dport  -j DROP
iptables -I INPUT -s 114.55.**.*** -p tcp --dport -j ACCEPT
iptables -I INPUT -s 210.12.***.**/ -p tcp --dport -j ACCEPT
iptables -I FORWARD -p tcp --dport -j DROP
iptables -I FORWARD -s 114.55.**.*** -p tcp --dport -j ACCEPT
iptables -I FORWARD -s 210.12.***.**/ -p tcp --dport -j ACCEPT

第一条命令是插入命令,禁止所有ip访问12580端口

第二条命令是插入命令,允许线上服务器 114.55.**.*** 访问solr服务器

第三条命令是插入命令,允许公司ip段访问solr服务器

设置完成后,测试发现,公司ip和线上服务均不能访问solr服务。想起因为为了部署方便,我们的程序一直是通过域名访问的。我们把host:12580端口映射到了solr.project.company.cn。当访问solr.project.company.cn时,dns服务会把请求转发到solr服务器host:80端口,solr服务器上的nginx服务把这个请求/solr 下的请求转发到12580端口。

# /etc/nginx/conf.d/solr.conf

server {
server_name localhost;
location /solr/ {
proxy_pass http://127.0.0.1:12580;
}
}

因此要允许本机访问12580端口

iptables -I INPUT -s 127.0.0.1 -p tcp --dport  -j ACCEPT

再次测试,线上服务器和公司ip都可以访问solr服务了。不过既然是通过nginx转发请求,那么仍然限制不住其他ip不加端口访问。用手机测试了一下,果然这样。

在确保没有其他服务在使用转发服务后。同样对80端口限制了ip访问,那么问题解决了。

为了是iptables的配置生效,需要保存配置,并且能够重启后自动生效。使用

# 保存
/etc/rc.d/init.d/iptables save
# 重启服务
service iptables restart

结果发现分别报:

# 保存
no such file or directory: /etc/rc.d/init.d/iptables
# 重启
iptables: unrecognized service

因为ubuntu下配置不同。

参考http://blog.phiy.me/debian-iptables-persistent/ 安装iptables-persistent

apt-get install iptables-persistent

安装过程中需要点击两次yes。这会在/etc/iptables/下生产rules.v4 和rules.v6两个文件,分别保存ipv4和ipv6下的规则。

以后再次修改的话,保存

iptables-save > /etc/iptables/rules.v4

OK。