-
介绍
- 用来设置一些防火墙规则
- netfilter 位于内核,真正干活的
- iptables 配置工具,利用 netfiletr 工作
-
参数
-
-j 指定处理动作,如 ACCEPT,REJECT,DROP,REDIRECT 等
- ACCEPT:直接放行
- REJECT:拒绝,并返回通知包,可以使用 --reject-with 指定通知
- ICMP port-unreachable
- ICMP echo-reply
- tcp-reset(这个数据包会要求对方关闭联机)
- DROP:拒绝,直接丢弃包
- REDIRECT:转发端口,–to-ports 指定端口
shell iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
-
chain 上 rule 增删改查
在删除,修改的时候可以使用行号,可以使用 --line-numbers 查看,当然也可以数一数
- -A 在 chain 上添加 rule
- -D 删除 chain 上的 rule
- -F 清空 chain 上的规则
- -R 修改 chain 上的 rule
- -I 在 chain 上插入 rule
- -L 查看 chain 上的规则,不指定 chain,就列出所有 chain 规则
-
chain 增删改查
- -N 新建 chain
- -X 删除 chain
- -P 设置 chain 默认策略,默认为 ACCEPT
- -E 修改 chain 名称
-
匹配规则
- -p 指定协议,如 TCP,UDP,all 表示所有,! TCP 表示除 TCP 之外
- -i -o 进入,输出的网卡名称
- -s -d 指定来源 ip ,目标 ip
- –sport --dport 来源 port,目标 port,用在 -p 之后
- -m 使用模块规则来匹配,可以使用 owner, mac, multiport 等模块
-
-m mac --mac-source 使用来源 mac 地址来匹配
shell iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 -j ACCEPT
-
-m multiport 散列匹配端口
- -m multiport --source-port 指定多个散列的来源端口
- -m multiport --destination-port 指定多个散列的目标端口
- -m multiport --port 指定多个端口,要求来源和目标使用相同端口
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110 -j ACCEPT
-
-m owner 匹配特定的用户,组,进程,session 的 id
- -m owner --uid-owner 匹配用户 ID
- -m owner --gid-owner 匹配组 ID
- -m owner --pid-owner 匹配进程 ID
- -m owner --sid-owner 匹配连接的 session ID
# 防止 uid=500(root) 的用户输出数据 iptables -A OUTPUT -m owner --uid-owner 500
-
-m state 匹配连接的状态
有 4 种状态
- ESTABLISHED:数据包属于某个已经建立的联机
- INVALID:数据包的联机编号(Session ID)无法辨识或编号不正确
- NEW:数据包尝试创建新的连接
- RELATED:数据包是属于某个已经建立的联机,所建立的新联机
-
-
输出格式
- -v 详细输出,包括网卡,bytes 等信息,默认是省略的
- -n 不进行 DNS,原始输出
- –line-numbers 输出规则的行号,方便 -I,-D 等操作
-
-
例子🌰
-
其他相关命令
- iptables-restore 从 iptables-save 的文件从回复读取
- iptables-save 将当前策略序列化,用于存储
- iptables-apply
-
一些知识
-
ubuntu 使用 iptables
- 默认有 iptables
- 默认没有 iptables 配置文件,使用
iptables-save > /etc/network/iptables.up.rules
创建 iptables-apply
使 iptables 规则生效,默认文件就是 /etc/network/iptables.up.rules,可以使用 -w 指定- iptables 重启后自动清空,修改配置文件 /etc/network/interfaces 进行配置,使其开机生效
- 添加配置:
pre-up iptables-restore < /etc/network/iptables.up.rules
- 添加配置:
-
连接慢,iptables -L 卡顿
- 原因
- 禁用全部服务,只允许默写端口,如 443,可能导致收到 sshd 时,会尝试反向解析,但是只能发出,无法收到 DNS 的回复,所以一直尝试
- 解决
- 为 iptables 添加 state 规则,允许所有 ESTABLISHED 数据包
- state ESTABLISHED:只要发送端或接收端只要有一方已经成功建立了连接,那么我们就认为这个状态是 ESTABLISHED
iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
- 为 iptables 添加 state 规则,允许所有 ESTABLISHED 数据包
- 原因
-
table,chain 和 rule
-
table
5 张表(表不能删除新增)
- nat 用于网络地址转换 NAT
- filter 默认 ,最常用,一般 rule 都定义在这张表上
- mangle
- raw
- security
-
chain
默认 5 条链,可以进行修改
- PREROUTING
- INPUT
- FORWARD
- OUTPUT
- POSTOUTING
-
rule
- rule 定义在 chain 上,chain 又在某些 table 上,所以,如果要查看某个 chain 的 rule,必须要指定 chain 所关联的 table 才行,例如 nat chain 上的规则,必须要到表 PREROUTING 才能看到
-
-
iptables
最新推荐文章于 2023-03-27 11:20:43 发布