iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-I:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源IP地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口;
-m: 匹配扩展模块;
-h:显示帮助信息。
表名包括:
raw:高级功能,如:网址过滤。mangle:数据包修改(QOS),用于实现服务质量。net:地址转换,用于网关路由器。filter:包过滤,用于防火墙规则。
规则链名包括:
INPUT链:处理输入数据包。OUTPUT链:处理输出数据包。PORWARD链:处理转发数据包。PREROUTING链:用于目标地址转换(DNAT)。POSTOUTING链:用于源地址转换(SNAT)。
动作包括:
ACCEPT:接收数据包。DROP:丢弃数据包。REDIRECT:重定向、映射、透明代理。SNAT:源地址转换。DNAT:目标地址转换。MASQUERADE:IP伪装(NAT),用于ADSL。 LOG:日志记录。
安装iptables-services并启动服务,保存防火墙规则。
yum -y install iptables-services systemctl start iptables.service systemctl enable iptables.service service iptables save 防火墙规则存放文件:/etc/sysconfig/iptables
实例:K8S添加iptables防火墙策略
#a) 查看当前iptables规则 iptables -L -n --line-number #b) 插入禁止访问的端口规则并允许本机访问 iptables -I INPUT -p tcp -m multiport --dports 6443,2379:2381,10250:10259 -j DROP iptables -I INPUT -p tcp -s 127.0.0.1 -m multiport --dports 6443,2379:2381,10250:10259 -j ACCEPT iptables -I INPUT -p tcp -s `hostname -i` -m multiport --dports 6443,2379:2381,10250:10259 -j ACCEPT #c) 对特定IP解除6443访问限制(Flannel和工作节点) iptables -I INPUT -p tcp -s 10.244.0.0/16 --dport 6443 -j ACCEPT iptables -I INPUT -p tcp -s 10.3.61.189,10.3.61.192 --dport 6443 -j ACCEPT #d) 开机自动添加防火墙规则(k8s_iptables.sh为上述命令) chmod +x /etc/rc.d/rc.local echo ". /etc/kubernetes/k8s_iptables.sh" >>/etc/rc.d/rc.local
常见的模块拓展-m iprange 、-m multiport
1)指定-m multiport就可以使用--dports、--sports
标准的--dport与--sport使用方式: 80、80:90、:80、90:
扩展的--dports与--sports使用方式:以上组合,使用冒号来分离。
iptables -I INPUT -p tcp -m multiport --dports 6443,2379:2380,10250:10259 -j DROP
2)指定-m iprange就可以使用--src-range 、--dst-range
标准的-s 使用方式:192.168.1.1、192.168.1.0/24、192.168.1.2,10.1.1.1、(192.168.1.1,10.1.1.0/24)
扩展的--src-range使用方式:192.168.1.5-192.168.1.6
iptables -A INPUT -p tcp --dport 6443 -m iprange --src-range 10.3.61.189-10.3.61.192 -j ACCEPT