我已经在 CentOS 7.2 上安装了 Elastic Search 1.7.4,方法如下:
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.4.noarch.rpm
sudo rpm -ivh elasticsearch-1.7.4.noarch.rpm
服务已启动并且 ES 可以运行(已通过 curl 验证),但是,它仅使用默认配置监听 IPv6。netstat -na 显示以下内容:
tcp6 0 0 :::9200 :::* LISTEN
tcp6 0 0 :::9300 :::* LISTEN
从其他服务器使用 nmap 我发现端口 9200 和 9300 已被过滤,防火墙已被禁用。
编辑 /etc/elasticsearch/elasticsearch.yml 并设置:
network.bind_host: 0.0.0.0
不会改变任何东西。将其设置为服务器的外部 IPv4 地址确实会在 netstat -na 输出中添加额外的两个条目,但我需要 ES 可供我的本地网络访问,因此这毫无用处,并且 netstat 仍将其注册为 tcp6。
tcp6 0 0 192.168.0.54:9200 :::* LISTEN
tcp6 0 0 192.168.0.54:9300 :::* LISTEN
环境:
network.bind_host: _eth0:ipv4_
导致 ES 绑定到本地 IPv4,然后当然只能从本地服务器使用。省略“ipv4”部分会导致 ES 绑定到 NIC 的 IPv6 地址。
如何使 ES 绑定到 IPv4?我没有其他选择,我的网络只有 IPv4,而且我必须使用这个旧版本的 ES,因为我正在运行一些需要此版本的应用程序。
答案1
发生这种情况的原因是,默认情况下,AF_INET6 套接字实际上适用于 IPv4 和 IPv6。请参阅 RFC 3493 - IPv6 基本套接字接口扩展中的第 3.7 节 - 与 IPv4 节点的兼容性
但正如您所知,firewalld 是开箱即用的。
创建此文件到您的/etc/firewalld/services/elasticsearch.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Elasticsearch</short>
<description>Elasticsearch is a distributed, open source search and analytics engine, designed for horizontal scalability, reliability, and easy management.</description>
<port protocol="tcp" port="9300"/>
<port protocol="tcp" port="9200"/>
</service>
更新权限
chmod 0400 /etc/firewalld/services/elasticsearch.xml
chown root: /etc/firewalld/services/elasticsearch.xml
运行这些命令
firewall-cmd --zone=public --add-service=elasticsearch --permanent
firewall-cmd --reload
答案2
这是 ES 的一个常见陷阱,因为二需要设置的网络设置:network.bind_host
AND network.publish_host
。因此,ES 开发人员添加了此快捷方式:
network.host: 0.0.0.0
当启用但未配置 IPv6 时,我在 ES 中遇到了一些其他问题,因此您可能需要编辑 sysctl.conf:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
然后去做sysctl -p
。
答案3
尝试禁用 centos 自带的防火墙
systemctl disable firewalld
systemctl stop firewalld
https://bytefreaks.net/gnulinux/how-to-startstop-or-enabled-firewalld-on-centos-7
我建议在机器前安装专用的硬件防火墙,我不会依赖你正在使用的机器上的软件防火墙。如果攻击者正在攻击机器,那就太晚了。