kubernetes集群节点主机白名单iptables过滤

1. 初始化iptables配置文件

echo "# Manual customization of this file is not recommended." > /etc/sysconfig/iptables
echo "*filter" >> /etc/sysconfig/iptables
echo ":INPUT DROP [0:0]" >> /etc/sysconfig/iptables
echo ":FORWARD ACCEPT [0:0]" >> /etc/sysconfig/iptables
echo ":OUTPUT ACCEPT [0:0]" >> /etc/sysconfig/iptables
echo ":PORTAL-INPUT - [0:0]" >> /etc/sysconfig/iptables
echo ":PRIVATE-INPUT - [0:0]" >> /etc/sysconfig/iptables
echo ":REJECT-INPUT - [0:0]" >> /etc/sysconfig/iptables

这部分代码会初始化/etc/sysconfig/iptables文件,首先写入一行警告信息,提醒用户不要手动修改此文件。然后,它设置了一些默认的iptables链:

  • INPUT链设置为DROP,意味着默认丢弃所有输入流量。
  • FORWARD链设置为ACCEPT,意味着默认接受所有转发流量。
  • OUTPUT链设置为ACCEPT,意味着默认接受所有输出流量。
  • 定义了三个自定义链:PORTAL-INPUT、PRIVATE-INPUT和REJECT-INPUT,它们的默认策略是空(- [0:0])。

2. 读取当前的iptables规则并过滤

iptables_rules=$(iptables-save | awk '
  /^#/ {next}
  /^$/ {next}
  /^COMMIT$/ {next}
  /\[[^]]*\]/ {$0 = gensub(/\[[^]]*\]/, "", "g", $0)}
  !/kube/ && !/cali/ && /^-A (INPUT|PORTAL-INPUT|PRIVATE-INPUT|REJECT-INPUT)/ {print}
')
  • iptables-save:保存当前的iptables规则并输出。
  • awk:通过awk命令对iptables规则进行筛选:
    • 忽略注释行(/^#/ {next})和空行(/^$/ {next})。
    • 忽略COMMIT行,它是iptables规则文件的结束标志。
    • 使用gensub去除规则中[]里的内容。
    • 排除包含kube和cali的规则,这通常是与Kubernetes或Cilium等网络插件相关的规则。
    • 只保留属于INPUT、PORTAL-INPUT、PRIVATE-INPUT、REJECT-INPUT链的规则。

3. 将规则按行分割成数组

readarray -t iptables_rules_array <<< "$iptables_rules"
readarray将iptables_rules中的每一行读取到一个数组iptables_rules_array中。

4. 分类规则:接受规则与拒绝规则

accept_rule_lines=$(printf '%s\n' "${iptables_rules_array[@]}" | grep -E "^-A[[:blank:]]+.*[[:blank:]]-j[[:blank:]]+ACCEPT$" | sort -u)
reject_rule_lines=$(printf '%s\n' "${iptables_rules_array[@]}" | grep -E "^-A[[:blank:]]+REJECT-INPUT[[:blank:]]+.*" | sort -u)
  • accept_rule_lines:筛选出所有带有-j ACCEPT动作的规则,即允许的流量。通过正则表达式匹配所有以-A开头,并且包含-j ACCEPT的规则。
  • reject_rule_lines:筛选出所有带有REJECT-INPUT的规则,即拒绝输入流量的规则。通过正则表达式匹配所有以-A开头,并且包含REJECT-INPUT的规则。
    sort -u:对筛选出的规则进行排序,并移除重复的规则。

5. 将过滤后的规则写入iptables配置文件

printf '%s\n%s\n' "$accept_rule_lines" "$reject_rule_lines" >> /etc/sysconfig/iptables

将之前筛选并分类的接受规则( a c c e p t r u l e l i n e s )和拒绝规则( accept_rule_lines)和拒绝规则( acceptrulelines)和拒绝规则(reject_rule_lines)按顺序追加到/etc/sysconfig/iptables文件中。

6. 添加COMMIT行

echo "COMMIT" >> /etc/sysconfig/iptables

COMMIT是iptables规则的结束标志,告诉iptables在加载配置文件时应用这些规则。

总结
这个脚本的作用是:
初始化iptables规则配置文件,确保文件存在并添加一些默认的iptables链。
过滤当前系统中已加载的iptables规则,只保留一些特定链(如INPUT、PORTAL-INPUT、PRIVATE-INPUT、REJECT-INPUT)的规则。
按规则类型分类:将ACCEPT类型的规则和REJECT-INPUT类型的规则分开,去重并排序。
更新iptables配置文件,将这些规则写入到/etc/sysconfig/iptables中。
这可以帮助管理员管理iptables规则,确保只保留重要的规则,并按特定顺序存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值