k8s iptables 学习笔记
程序员文章站
2024-03-13 09:57:03
...
一、iptables 概念
1、iptables 概述
netfilter/iptables: IP 信息包过滤系统,由netfilter和iptables组成
netfilter组件:称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表是内核用来控制信息包过滤处理的规则集
iptables组件是一种工具,也称为用户空间,方便插入、修改和除去信息包过滤表中的规则。
netfilter/iptables 后期简称iptables,iptables是基于内核的防火墙
iptables内置了 filter,nat和 mangle 三张表
所有规则配置后,立马生效
2、三张表
- filter:负责过滤数据包,包括的规则链有,input,output和forward
- nat 则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output
- mangle表主要应用在修改数据包内容上,用来做流量整形的,给数据包打标,默认规则链有 input,output,nat,postrouting,prerouting
3、五个链
- input:匹配目标ip 是本机的数据包
- output 出口数据包,一般不在此链做配置
- forward 匹配流经本机的数据包
- prerouting 用来修改目的地址用来做DNAT,如把内网的80端口映射到路由器外网端口上
- postrouting 用来修改源地址用来做SNAT,如内网通过路由器NAT转换功能实现内网PC机通过一个公网ip地址上网
-数据结构
表 --》 链–》 规则
Iptables 过滤封包流程
graph LR
request--> prerouting
prerouting--> Route
Route--> forward
forward--> postrouting
postrouting--> response
Route--> input
input--> output
output--> postrouting
request:来源机器
response:目的机器
Route:不是链
4、数据包分类
- 发给防火墙本身的数据包
- 需要经过防火墙的软件包
5、链上执行顺序
- 表间的优先顺序
raw > mangle > nat > filter
- 链间的匹配顺序
入站数据:prerouting,input
出站数据:putput,postrouting
转发数据:prerouting,forward,postrouting
- 链内的匹配顺序
自上而下按顺序依次进行检查,找到相匹配的规则即停止
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改情况,默认策略为允许)
6、iptables 安装
- 检查是否安装iptables
rpm -qf `which iptables`
- 安装iptables
yum install iptables
- iptables 配置文件路径
/etc/sysconfig/iptables-config
- iptables 服务启动
/etc/init.d/iptables start
- iptables 是否开机启动
chkconfig --list iptables
二、iptables 操作
1、iptables 语法
1.1. iptables 命令的语法格式
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
# 不指定表名时,默认表示filter表
# 不指定链名时,默认表示该表内所有链
# 除非设置规则链的缺省策略,否则需要制定匹配条件
举例:
iptables | table | command | chain | parameter | target |
---|---|---|---|---|---|
iptables | -t filter | -A | input | -p | -j ACCEPT |
- command 选项
-A :增加
-D: 删除
-I
-R
-L
-F: 清空规则
-Z
-N
-X
-P : 设置某个链的默认规则
- parameter选项
-P:协议类型
-s:来源地址
-d:目的地址
-i:流入
-o:流出
-sport:来源端口
-dport:目标端口
- target
-j ACCEPT
-j DROP
-j REJECT
2、命令(command)相关
2.1.增加一条规则
在filter 表的input 链里追加一条规则,匹配所有访问本机IP的数据包,匹配到的丢弃
# 拒绝所有人访问服务器
iptables -t filter -A INPUT -j DROP
2.2.查看规则
iptables -L
2.3.删除规则
- 按照序号 删除规则
# 方式1,按照序号
# 删除filter表的input 链的第一条规则
iptables -t filter -D INPUT 1
- 按内容删除规则
# 方式2,按内容
# 删除filter表的input链中内容为 "-s 192.168.0.1 -j DROP" 的规则
iptables -t filter -D INPUT -s 192.168.0.1 -j DROP
2.4.设置某个链的默认规则
iptables -p INPUT DROP
2.5. 查看默认规则
iptables -L
2.6. 清空规则
# 清空filter表INPUT链的所有规则
iptables -t filter -F INPUT
# 清空filter表的所有链的规则
iptables -t filter -F
注意事项
- -F 不清除默认规则
- -P 设置了DROP后,使用-F 一定要小心
- 如不写链名,默认清空某表里所有链里的所有规则
2.7. 查看指定链的所有规则(iptalbes -[vnx]L)
# nat 表PREROUTING 链的所有规则
iptables -t nat -vnL PREROUTING
3. 匹配条件
3.1. 按流入网络接口匹配(-i)
-i 匹配数据进入网络接口 #主要用于nat表
# 例子
-i eth0 匹配是否从网络接口eth0进来
-i ppp0 匹配是否从网络接口ppp0进来
3.2. 按流出网络接口匹配(-o)
iptables -t nat -o eth0 条件 动作
3.3. 按来源地址匹配(-s)
-s 匹配来源地址,可以是ip,net,domain ,也可空(任何地址)
例如:
-s 192.168.0.1 匹配来自192.168.0.1的数据包
-s 192.168.1.0/24 匹配来自192.168.1.0/24 的数据包
-s 192.168.0.0/16 匹配来自192.168.0.0/16 的数据包
3.4. 按目的地址匹配(-d)
-d 匹配来源地址,可以是ip,net,domain ,也可空(任何地址)
例如:
-d 192.168.0.1 匹配去往192.168.0.1的数据包
-d 192.168.1.0/24 匹配去往192.168.1.0/24 的数据包
-d 192.168.0.0/16 匹配去往192.168.0.0/16 的数据包
3.5. 按协议匹配(-p)
-p 匹配来源地址,可以是TCP、UDP,ICMP,也可为空
例如:
-p tcp 匹配协议为 tcp的数据包
-p udp 匹配协议为 udp的数据包
-p icmp 匹配协议为 icmp的数据包
3.6. 按来源端口匹配(sport)
例如:
--sport 1000 匹配源端口是1000的数据包
--sport 1000:3000 匹配源端口是1000-3000的数据包
--sport :3000 匹配源端口是3000以下的数据包
--sport 1000: 匹配源端口是1000以上的数据包
3.7. 按来源端口匹配(dport)
例如:
--dport 1000 匹配目的端口是1000的数据包
--dport 1000:3000 匹配目的端口是1000-3000的数据包
--dport :3000 匹配目的端口是3000以下的数据包
--dport 1000: 匹配目的端口是1000以上的数据包
注意:
1. --sport 和 --dport 必须和 -p 配合使用
2. 条件越多,匹配越精确,范围越小
数据包结构
目标端口 | 目标ip地址 | 内容址 | 源端口 | 源ip地址 |
---|---|---|---|---|
80 | 192.168.1.64 | xxx | 3211 | 192.168.1.65 |
4. 动作(处理方式)
4.1. ACCEPT(接受)
通过,允许数据包通过本链而不拦截
格式: -j ACCEPT
# 允许所有访问本机ip的数据包通过
iptables -A INPUT -j ACCEPT
4.2. DROP (丢弃,不给对方任何回应)
丢弃,不允许数据包通过本链而丢弃它
格式: -j DROP
# 阻止来源地址为192.168.80.39的数据包通过本机
iptables -A FORWARD -s 192.168.80.39 -j DROP
4.3. REJECT (拒绝,给对方一个回应)
4.4. SNAT(上网)
原地址转化,snat 支持转化为单ip,也支持转化到ip地址池
格式: -j SNAT --to IP[-IP][:端口-端口]
适用范围: nat表的 postrouting
- 单个地址情况
# 将内网 192.168.0.0/24的源地址修改为公网IP地址 1.1.1.1
iptables -t nat -A POSTROUNTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
- 多个地址情况
# 将内网 192.168.0.0/24的源地址修改为公网IP地址 1.1.1.1- 1.1.1.10
iptables -t nat -A POSTROUNTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
4.5. DNAT(端口映射)
目标地址转化,DNAT 支持转化为单ip,也支持转化到ip地址池
格式: -j DNAT --to IP[-IP][:端口-端口]
适用范围: nat表的 prerouting
- 单个地址情况
# 把eth0进来的要访问TCP/80的数据包目的地址改为192.168.0.1
iptables -t nat -A PREROUNTING -i eth0 -p tcp -dport 80 -j SNAT --to 192.168.0.1
- 多个地址情况
# 把eth0进来的要访问TCP/80的数据包目的地址改为192.168.0.1-192.168.0.10
iptables -t nat -A PREROUNTING -i eth0 -p tcp -dport 80 -j DNAT --to 192.168.0.1-192.168.0.10
4.6. MASQUERADE(伪装ip地址)
动态源地址转换(动态ip的情况下使用)
# 将源地址是192.168.0.0/24的数据包进行地址伪装,转换成eth0上的ip地址,eth0为路由器外网IP地址
iptables -t nat -A POSTROUNTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
5. 附加模块
5.1 按包状态匹配
#格式
-m state --state 状态
状态:NEW、RELATED、ESTABLIShED、INVALID
NEW: 有别于tcp的syn
RELATED: 衍生态
ESTABLISHED: 连接状态
INVALID: 不能被识别属于哪个连接或没有任何状态
# 将连接状态为RELATED 和ESTABLISHED 的访问数据包通过
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
5.2 按来源MAC匹配
#格式
-m mac --mac-source mac地址
#阻断来自某mac 地址数据包通过本机
iptables -A FORWARD -m mac --mac-source xxxx -j DROP
5.3 按包速率匹配
#格式
-m limit --limit 匹配速率 [--burst 缓冲数量]
# 只允许192.168.0.1 一秒发送50个数据包
iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP
5.4 多端口匹配
#格式
-m multport <--sports|--dports|--ports>
一次行匹配多个端口,可以区分源端口,目的端口或不制定端口
# 允许所有客户端访问本服务器的21、22、 25和 80端口的服务
iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80 -j ACCEPT
注意: 必须与 -p 参数一起使用
三、网络基本拓扑图
graph LR
终端用户--> 互联网
互联网--> 防火墙
防火墙--> 路由器
路由器--> 交换机
交换机--> 服务器
四、案例
- 对web服务器保护
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m mutiport --dports 22,80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT DROP
- 让内网pc机上网
192.168.1.63 公网ip
192.168.2.0/24 网络不能直接上网
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63
参考
https://www.bilibili.com/video/av22230927?p=1
https://www.bilibili.com/video/av22230927?p=2
https://www.bilibili.com/video/av22230927?p=3
https://www.bilibili.com/video/av22230927?p=4
https://www.bilibili.com/video/av22230927?p=5
https://www.bilibili.com/video/av22230927?p=6
https://www.bilibili.com/video/av22230927?p=7
https://www.bilibili.com/video/av22230927?p=8
其他
使修改网络生效
sysctl -p