启用iptables(可选)
在Linux系统上,您可以配置并启用 iptables 防火墙,来与Greenplum数据库一起使用。
注意:启用iptables可能会导致Greenplum数据库性能受到影响。您应该在启用iptables的情况下测试应用程序的性能,以确保性能是可以接受的。
有关iptables的更多信息,请参见iptables和操作系统的防火墙文档。另请参见禁用SELinux和防火墙软件。
如何启用iptables
- 以gpadmin用户身份,在Greenplum数据库master主机上运行以下命令,来停止Greenplum数据库:
$ gpstop -a
- 在Greenplum数据库主机上:
- 基于iptables规则示例,更新 /etc/sysconfig/iptables文件。
- 以root用户身份运行以下命令以启用 iptables:
# chkconfig iptables on # service iptables start
- 以gpadmin用户身份,在Greenplum数据库master主机上运行以下命令以启动Greenplum数据库:
$ gpstart -a
警告:启用iptables后,/var/log/messages文件中的如下错误,表示 iptables 表的设置太低,需要增加。
ip_conntrack: table full, dropping packet.
以root用户身份,运行以下以查看 iptables 表值:
# sysctl net.ipv4.netfilter.ip_conntrack_max
为确保Greenplum数据库工作负载不会溢出iptables表,以root用户身份,设置其为以下值:
# sysctl net.ipv4.netfilter.ip_conntrack_max=6553600
该值可能需要针对您的主机进行调整。要在重启后保持该值,您可以更新/etc/sysctl.conf文件,如设置Greenplum推荐的OS参数的讨论。
iptables规则示例
当启用iptables后,iptables基于配置设置(规则)来管理主机系统上的IP通信。用于配置iptables规则示例,适用于Greenplum数据库master主机,备用master和segment主机。
两组规则解释了Greenplum数据库在master(主masterr和备用master)主机和segment主机上期望的不同通信类型。规则应添加到Greenplum数据库主机的/etc/sysconfig/iptables文件。对于Greenplum数据库,iptables 规则应允许进行以下通信:
- 对于Greenplum数据库master面对客户的通信,请至少允许 Postgres 和 28080 (示例中的eth1接口)。
- 对于Greenplum数据库系统互连,允许使用 tcp, udp和 icmp 协议(示例中的eth4 和 eth5 接口)。
您在iptables指定的网络接口,是您在hostfile_gpinitsystem文件中列出的、Greenplum数据库主机的网络接口 。您在运行 gpinitsystem命令初始化Greenplum数据库系统时,指定了此文件。有关 hostfile_gpinitsystem 文件和 gpinitsystem 命令的信息,请参阅 初始化Greenplum数据库系统。
- 对于Greenplum DCA上的管理网络,允许使用 ssh, ntp和 icmp 协议。(示例中的eth0 接口)。
在iptables 文件里,每一个appen rule命令(以-A开头的行)就是单独的一行。
应根据您的配置,调整该示例规则。例如:
- append命令,那些以-A开头的行和连接参数 -i,应与您的主机连接相匹配。
- source参数-s的CIDR网络掩码信息,应该与您的网络IP地址相匹配。
master和备用master的iptables规则示例
以下是一个Greenplum数据库master和备用master上/etc/sysconfig/iptables文件中的、带注释的规则示例。
*filter
# Following 3 are default rules. If the packet passes through
# the rule set it gets these rule.
# Drop all inbound packets by default.
# Drop all forwarded (routed) packets.
# Let anything outbound go through.
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Accept anything on the loopback interface.
-A INPUT -i lo -j ACCEPT
# If a connection has already been established allow the
# remote host packets for the connection to pass through.
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# These rules let all tcp and udp through on the standard
# interconnect IP addresses and on the interconnect interfaces.
# NOTE: gpsyncmaster uses random tcp ports in the range 1025 to 65535
# and Greenplum Database uses random udp ports in the range 1025 to 65535.
-A INPUT -i eth4 -p udp -s 192.0.2.0/22 -j ACCEPT
-A INPUT -i eth5 -p udp -s 198.51.100.0/22 -j ACCEPT
-A INPUT -i eth4 -p tcp -s 192.0.2.0/22 -j ACCEPT --syn -m state --state NEW
-A INPUT -i eth5 -p tcp -s 198.51.100.0/22 -j ACCEPT --syn -m state --state NEW
# Allow udp/tcp ntp connections on the admin network on Greenplum DCA.
-A INPUT -i eth0 -p udp --dport ntp -s 203.0.113.0/21 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport ntp -s 203.0.113.0/21 -j ACCEPT --syn -m state --state NEW
# Allow ssh on all networks (This rule can be more strict).
-A INPUT -p tcp --dport ssh -j ACCEPT --syn -m state --state NEW
# Allow Greenplum Database on all networks.
-A INPUT -p tcp --dport postgres -j ACCEPT --syn -m state --state NEW
# Allow Greenplum Command Center on the customer facing network.
-A INPUT -i eth1 -p tcp --dport 28080 -j ACCEPT --syn -m state --state NEW
# Allow ping and any other icmp traffic on the interconnect networks.
-A INPUT -i eth4 -p icmp -s 192.0.2.0/22 -j ACCEPT
-A INPUT -i eth5 -p icmp -s 198.51.100.0/22 -j ACCEPT
# Allow ping only on the admin network on Greenplum DCA.
-A INPUT -i eth0 -p icmp --icmp-type echo-request -s 203.0.113.0/21 -j ACCEPT
# Log an error if a packet passes through the rules to the default
# INPUT rule (a DROP).
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
COMMIT
segment主机iptables规则示例
以下是一个Greenplum数据库segment主机上/etc/sysconfig/iptables文件中的规则示例。segment主机的规则与master的规则类似,但网络接口要少一些,udp 和 tcp 服务的数量要少一些。
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth2 -p udp -s 192.0.2.0/22 -j ACCEPT
-A INPUT -i eth3 -p udp -s 198.51.100.0/22 -j ACCEPT
-A INPUT -i eth2 -p tcp -s 192.0.2.0/22 -j ACCEPT --syn -m state --state NEW
-A INPUT -i eth3 -p tcp -s 198.51.100.0/22 -j ACCEPT --syn -m state --state NEW
-A INPUT -p tcp --dport ssh -j ACCEPT --syn -m state --state NEW
-A INPUT -i eth2 -p icmp -s 192.0.2.0/22 -j ACCEPT
-A INPUT -i eth3 -p icmp -s 198.51.100.0/22 -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type echo-request -s 203.0.113.0/21 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
COMMIT