天天看點

使用iptables實作etcd叢集白名單功能

1.概述

由于etcd自身不提供ip白名單功能,當在生産環境運作etcd,且當該etcd簡體監聽外網時,應該通過ip白名單來允許能夠通路的外網ip,拒絕非法的ip通路,進而提高生成環境etcd叢集的安全性,這裡将使用iptables來實作該功能。

2.iptables使用

在centos中,iptables可以通過服務方式進行運作,使用服務方式運作相對來說更加友善使用,除了可以更加友善控制iptables外,也提供了配置檔案方式,更加便于配置添加及管理。

  • 安裝
yum install iptables-services
           
  • 配置開機自啟動
  • 修改配置檔案

安裝iptables後如果預設啟動,iptables會将除ssh的其他端口的資料包直接drop掉,這時如果是在有業務的伺服器上進行啟動的話是會業務産生影響的,解決方法是修改配置檔案,将drop配置去掉再啟動。

vi /etc/sysconfig/iptables
           

内容如下,去掉INPUT鍊中的REJECT

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport  -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
           
  • 啟動
  • 檢視iptables配置

3. 添加iptables白名單

這裡有兩種方式,一種是使用指令行,一種是直接修改配置檔案。指令行添加後還需要執行儲存指令将添加結果儲存到配置檔案,否則機器重新開機時,配置的資訊會丢失。而直接修改配置檔案則需要對iptables進行重新開機。

3.1 指令行

  • 添加端口(2379)白名單
iptables -A INPUT -s / -p tcp -m tcp --dport  -j ACCEPT
           
  • 拒絕其他
iptables -A INPUT -s /  -p tcp -m tcp --dport  -j DROP
           
  • 儲存到 /etc/sysconfig/iptables
/usr/libexec/iptables/iptables.init save
           

3.2 直接修改配置檔案

  • 直接編輯 /etc/sysconfig/iptables

指令行指令去掉iptables直接寫入到檔案中。

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport  -j ACCEPT
-A INPUT -s / -p tcp -m tcp --dport  -j ACCEPT
-A INPUT -s /  -p tcp -m tcp --dport  -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
           
  • 重新開機iptables服務

4. 批量生成添加腳本

如果存在批量添加,則可以使用腳本進行檢測,以下腳本批量檢查檔案中的位址是否在iptables中,如果沒有則生成添加語句,生成添加語句後,直接寫入到/etc/sysconfig/iptables中INPUT鍊的2379端口的REJECT前面,然後重新開機即可。

cat $1 | while read line
do
 has=`iptables -L INPUT -n|grep $line|wc -l`
 if [ $has -eq  ];then
   echo "-A INPUT -s $line/32 -p tcp -m tcp --dport 2379 -j ACCEPT"
 fi
done
           
  • 使用方式
sh gen.sh ip.txt   //ip.txt中ip按行排列
           

繼續閱讀