iptables防火墙
Netfilter内核模块

Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在Linux内核中。
Netfilter是Linux2.4.X之后新一代防火墙机制,是Linux内核的一个子系统,Netfilter采用模块化设计,具有良好的可扩充性。提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据进行过滤,地址转换,处理等操作。
Netfilter官网文档:
https://netfilter.org/documentation/index.html
iptables防火墙原理
Linux的防火墙是内核中的netfilter模块在起作用.
iptables是用户的空间工具,将用户输入的策略,告诉内核中的netfilter模块,哪些IP允许通过,那些IP不允许通过.
RHEL8系列使用nftables防火墙工具。

防火墙的四个核心功能:
- 报文过滤(filter)、
- 地址转换(NAT)、
- 报文处理(mangle)
- 连接跟踪(conntrack)。
netfilter内核防火墙模块主要负责:
- firewalling(转发)
- nat(IP地址转换)
- packet mangling(数据包处理)
Centos7.7及以上 版本的iptables实际上是xtables-multi的软链接。


加载防火墙内核模块
查看内核编译时是否启用netfilter内核模块
# 从内核编译文件中查看是否启用netfilter内核模块
grep -m 10 NETFILTER /boot/config-4.18.0-425.10.1.el8_7.x86_64

加载br_netfilter网桥过滤模块
# 开机自动加载netfilter网桥过滤模块
cat <<EOF | sudo tee /etc/modules-load.d/netfilter.conf
br_netfilter
EOF
# 手动加载br_netfilter网桥过滤模块
sudo modprobe br_netfilter
加载ip_conntrack连接跟踪模块
cat <<EOF | sudo tee /etc/modules-load.d/ip_conntrack.conf
ip_conntrack
EOF
# 加载连接跟踪模块
modprobe ip_conntrack
Netfilter中的五个勾子函数和报文流向
Netfilter在内核中选取五个位置放了五个hook(勾子) 函数:
这五个钩子函数也就是iptables的链(chain).
INPUT(入)OUTPUT(出)FORWARD(转发)PREROUTING(预路由)POSTROUTING(后路由)
这五个钩子函数(hook function)向用户开放,用户可以通过iptables命令工具向其写入规则。
由信息过滤表(tables)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上.

提示:LInux kernel 4.2版以后,Netfilter在prerouting(预路由)前加了一个ingress勾子函数,可以使用这个新的入口挂钩来过滤来自第2层的流量,这个新挂钩比prerouting(预路由)要早,基本上是tc命令(流量控制工具)的替代品。
三种报文流向

- 流入本机:
PREROUTING(预路由)—>INPUT—>用户空间进程 - 流出本机:
用户空间进程—>OUTPUT—>POSTROUTING - 转发:
POSTROUTING—>FORWARD—>POSTROUTING
防火墙优先级
iptables优先级最高,是内核级别的
firewalld 防火墙策略优先级次之
tcpd服务器配置文件优先级最低
https://blog.csdn.net/omaidb/article/details/120091222
iptables的五链五表
https://blog.csdn.net/qq_42707739/article/details/106032722
iptables由五个表table和五个链chain以及一些规则组成.

五个内置链chain
内置链:每个内置链对应于一个钩子函数

PREROUTING(预路由):数据包进入路由表之前,用于DNAT。INPUT(入):通过路由表后目的地为本机FORWARD(转发):通过路由表后,目的地不为本机OUTPUT(出):由本机产生,向外转发POSTROUTING(后路由):发送到网卡接口之前,用于转发数据SNAT,MASQUERADE
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效。
设置链的默认策略
# 设置默认表(filter 表)的 INPUT 链的默认策略为 ACCEPT,即允许所有进入的数据包
## -P 设置链的默认策略,INPUT链的默认策略设置为ACCEPT,表示允许所有进入的数据包。
sudo iptables -P INPUT ACCEPT
# 设置默认表(filter 表)的 FORWARD 链的默认策略为 ACCEPT,即允许所有转发的数据包
sudo iptables -P FORWARD ACCEPT
# 设置默认表(filter 表)的 OUTPUT 链的默认策略为 ACCEPT,即允许所有发出的数据包
sudo iptables -P OUTPUT ACCEPT
创建自定义链
注意:链名必须大写。在Linux系统上,命令的大小写很敏感。
# 创建自定义链
## -N 自定义链名
### 自定义链的名称为”IN_WEB”
iptables -N IN_WEB
删除自定义链
# delete 删除所有用户“自定义”的链(tables)
## -X 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
iptables -X
五个表

最常用的是fiter和nat表.
filter:过滤规则表,根据预定义到规则过滤复合条件的数据包,默认表nat:network address translation 地址转换规则表mangle:修改数据标记位规则表raw:关闭启用的链接跟踪机制,加快封包穿越防火墙速度security:用于强制访问控制(MAC)网络规则,由SELinux实现
Iptables防火墙表的优先级顺序:
如果定义了冲突的规则,表的优先级为:
security —> raw —> mangle —> nat —> filter

表和链的对应关系


各个链对应的表有那些:
| 对应的表名 | 链名 |
|---|---|
| mangle、nat、filter | INPUT |
| raw、mangle、nat、filter | OUTPUT |
| mangle、filter | FORWARD |
| raw、mangle、nat | PREROUTING |
| mangle、nat | POSTROUTING |
规则表:
-
raw
- raw 表的 PREROUTING 链
- raw 表的 OUTPUT 链
-
mangle
- mangle表的 PREROUTING 链
- mangle 表的 POSTROUTING 链
- mangle 表的 INPUT 链
- mangle 表的 OUTPUT 链
- mangle表的 FORWARD 链
-
nat
- nat 表的 PREROUTING 链
- nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT
- nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT
- nat 表的 INPUT 链
-
filter
- filter 表的 INPUT 链
- filter 表的 FORWARD 链
- filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤
查看表支持哪些Chain链
# iptables -t 表名 -L
## -t 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。
## -L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
iptables -t filter -L
# filter表是默认表,可以不写
## -L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
iptables -L -n | grep 'Chain'

# 显示所有链名
iptables-save | grep '^:'

# 查看表支持哪些链---详细模式
# iptables -t 表名 -vnL
iptables -t nat -vnL

管理链和表规则
# 查看当前的 iptables 规则
## -L 列出当前iptables配置的所有规则,包括默认表(filter 表)的INPUT、FORWARD和OUTPUT链的规则
sudo iptables -L
# 清空默认表(filter 表)的所有规则
## -F 清空指定表的所有规则
sudo iptables -F
# 删除默认表(filter 表)的所有链
## -X 用于删除指定表的所有自定义链。默认表是filter表,该命令不会删除内置链(如INPUT、FORWARD、OUTPUT)
sudo iptables -X
# 清空 nat 表的所有规则
## -t nat 选项指定操作nat表
sudo iptables -t nat -F
# 删除 nat 表的所有链
sudo iptables -t nat -X
# 清空 mangle 表的所有规则
sudo iptables -t mangle -F
# 删除 mangle 表的所有链
sudo iptables -t mangle -X
开启iptables防火墙服务
Centos7中的iptables默认没有service文件,无法使用systemctl管理.
可以自行安装iptables-services服务。
iptables命令不需要service服务也能正常工作,生产环境安装service没有实际意义。
iptables-services服务会加载默认的规则。
# 安装iptables-devel
yum install -y iptables-devel
# 安装iptables防火墙服务
yum install -y iptables-services
systemctl enable --now iptables.service
systemctl status iptables.service
# 停止并禁止开机自启iptables服务
systemctl disable --now iptables
# Centos6停止iptabtles服务
service iptables stop
# Centos6禁止iptables开机启动
chkconfig iptables off
配置防火墙的默认策略
- 默认
拒绝所有,只添加允许策略 - 默认
允许所有,只添加拒绝策略
白名单模式—高安全性
设置默认拒绝策略,添加只允许策略。除非你在机房,否则不要配置。
1设置默认拒绝策略
# 先清空现有的所有策略
## -F 清空所有规则
iptables -F
# 设置默认拒绝策略,会丢包不响应(所有input流量都丢弃)
# 设置filter表INPUT默认规则是 DROP
## -P 定义规则链中的默认目标(策略)
### 这里是固定写法,不能用REJECT,会报错
iptables -P INPUT DROP
# 允许lo回环接口(必须)
## 否则ping不同127.0.0.1
iptables -A INPUT -i lo -j ACCEPT
# 查看是不是默认DROP模式
iptables -vnL

2添加允许策略
# 添加允许指定ip指定协议 策略,立即生效
## -I --insert 向规则链中插入条目,这条规则会被放到最后
## -s 源地址
## -p 指定协议
## -j 动作:ACCEPT(允许)|DROP(丢弃)|REJECT(拒绝)
## iptables -I INPUT -s 允许的ip -p 允许的协议名称 -j(下个请求生效) ACCEPT
iptables -I INPUT -s 192.168.10.1 -p icmp -j ACCEPT
# 添加允许指定ip指定端口 策略,立即生效
## -I --insert 向规则链中插入条目,这条规则会被放到最后
## -s 源地址
## -p 指定协议
## 匹配目标端口号
## -j 动作:ACCEPT(允许)|DROP(丢弃)|REJECT(拒绝)
iptables -I INPUT -s 192.168.10.1 -p tcp --dport 22 -j ACCEPT
# 允许22/tcp 并添加注释
iptables -A INPUT -p tcp --dport 22 -j ACCEPT -m comment --comment "允许ssh"
黑名单模式
设置默认允许策略,添加只拒绝策略
1设置默认允许策略
# 先清空现有的所有策略
## -F 清空所有规则
iptables -F
# 设置默认允许策略--这里是固定写法
# 设置filter表INPUT默认规则是 ACCEPT
## -P 定义规则链中的默认目标(策略)
iptables -P INPUT ACCEPT
2添加拒绝策略
# 拒绝 指定ip 指定协议 ,立即生效
## -I 链名
## -s 源ip
## -p 协议
## -j 拒绝/丢失/允许/记录
iptables -I INPUT -s 192.168.10.1 -p icmp -j REJECT
# 拒绝 指定ip 指定端口号 ,立即生效
iptables -I INPUT -s 192.168.10.1 -p tcp --dport 22 -j REJECT
## 拒绝 指定网段 指定端口号段 ,立即生效
iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 1000:1500 -j REJECT
iptables常用参数
参考:
https://wangchujiang.com/linux-command/c/iptables.html
https://www.linuxcool.com/iptables
- 命令:
-A--append 向规则链中追加条目,链名必须大写-I--insert 向规则链中插入条目,不加规则编号默认为1,链名必须大写-D--delete 在指定的链 chain 中删除一个或多个指定规则-R规则编号 Replays替换/修改第几条规则-L显示所有规则列表-F清空所有规则-P定义规则链中的默认目标(策略)
- 参数:
-w等待xtables锁时间-tnat 指定nat表-n以数字解析域名-s源地址-d目的地址-p指定协议--sport来源端口--dport匹配目标端口号-i指定数据包进来的网络接口,它只对 INPUT,FORWARD,PREROUTING 这三个链起作用-o指定数据包出去的网络接口,它只对 INPUT,FORWARD,PREROUTING 这三个链起作用--line--line-number 显示规则的编号
跳跃 -j:
ACCEPT: 接收数据包。DROP: 丢弃数据包。REJECT: 拒绝数据包。REDIRECT: 重定向、映射、透明代理。MASQUERADE: IP伪装(NAT),改写封包来源 IP 为防火墙 NIC IPSNAT: 源地址转换。DNAT: 目标地址转换。LOG: 日志记录。TOS:设置匹配的流量的 TOS(Type of Service)字段。TRACE:记录有关该数据包的跟踪信息,并将它发送到系统日志MIRROR: 镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。QUEUE: 中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用RETURN: 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当提早结束子程序并返回到主程序中。MARK: 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。SEMARK: 添加SEMARK标记以供网域内强制访问控制(MAC)
其他特定于不同模块和扩展的目标参数:
CONNMARK(连接标记):CONNMARK目标用于在连接跟踪过程中设置或修改连接的标记。它可以与匹配条件结合使用,以便在网络连接的生命周期中为连接设置标记,并在后续的规则中引用该标记。CONNMARK目标通常与CONNMARK匹配条件一起使用。CONNTRACK(连接跟踪):CONNTRACK目标用于对连接跟踪状态进行操作。它可以用于创建、删除或修改连接跟踪条目。CONNTRACK目标通常与CONNTRACK匹配条件结合使用,以根据连接的状态执行特定操作。ULOG(用户空间日志):ULOG目标用于将匹配的流量发送到用户空间的日志处理程序。它允许用户空间程序捕获和处理特定的流量。ULOG目标通常与用户空间的日志处理程序(如ulogd)一起使用,以便将流量记录到自定义日志文件或进行其他处理操作。
查看当前已有的所有防火墙策略
查看所有防火墙规则
默认显示的是 filter 表中的规则以及 INPUT、FORWARD、OUTPUT 链的规则。
# 显示默认链所有当前已有的防火墙策略
## -L 不指定则显示所有规则列表
iptables -L
查看规则的编号次序
# 查看规则的编号次序
## -n 以数字解析域名
## -L 不指定则显示所有规则列表
## --line --line-numbers 查看规则的编号次序(常用于删除规则前)
iptables -vnL --line

## 显示规则编号
iptables -nL --line-number

查看所有防火墙详细规则
# 详细查看(L参数必须在最后)
## -n 以数字解析域名
## -v 详细显示
## -L 不指定则显示所有规则列表
## --line 显示规则编号
iptables -nvL --line
查看最后几条规则
# 查看最后几条规则
iptables -nL --line|tail
查看所有{允许\拒绝}的规则
# 查看所有允许的规则
iptables -nL --line|grep 'ACCEPT'
# 查看所有拒绝的规则
iptables -nL --line|grep 'REJECT'
# 查看所有丢弃的规则
iptables -nL --line|grep 'DROP'

查看指定表的规则
# 查看 nat 配置
## -t nat 指定nat表
## -n 以数字解析域名
## -v 显示详细
## -L 不指定则显示所有规则列表
iptables -t nat -nvL
查看指定链的规则
## -t 指定表
## -L 指定链
## -n 以IP显示
## --line 显示规则编号
iptables -t filter -L OUTPUT -n --line

查看ip是否在iptables规则中
# 查看这个IP是否在iptables规则中
iptables-save | grep 113.201.50.83

# 查这个ip规则的编号
iptables -L ${链名} --line | grep ${ip}
# 按照规则编号删除这个ip规则
iptables -D ${链名} ${规则编号}
# 查看规则是否成功删除
iptables -L ${链名} | grep ${ip}

删除iptables的规则
删除指定IP的规则
# iptables -t <tales> -D <CHAIN> -s <IP> -j <TARGET>
## <CHAIN>是要删除规则的链的名称
## <IP>是要删除规则的源IP地址
## <TARGET>是要删除规则的目标
iptables -D INPUT -s 192.168.1.100 -j ACCEPT
删除指定编号的规则
# iptables -D 链名 规则编号
## -D 从指定链名中删除
iptatbles -D INPUT 2
## -t 指定nat表
## -D 从指定链名中删除
iptables -t nat -D PREROUTING 2
清空现有的所有策略
# 清空现有的所有策略
## -F 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
iptables -F
Centos7禁用firewalld服务后所有策略也会被清空
# delete 删除所有用户“自定义”的链(tables)
## -X 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
iptables -X
# zero 将所有的chain的计数与流量统计都归零
## -Z 把表中的指定链(不指定则为所有链)上的所有计数器清零。
iptables -Z
添加常用规则
http://blog.51yip.com/linux/1404.html
检查规则是否重复
https://blog.csdn.net/whatday/article/details/112093322
# iptables新版本中有 -C 选项进行检测
iptables -C INPUT -p tcp --dport 8080 --jump ACCEPT
检查ip是否在iptabels规则中
# 检查ip是否在iptabels规则中
iptables-save | grep 1.1.1.1

放行指定IP/放行指定网段
# iptables -A <链名> -s <IP> -j <TARGET>
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# 放行指定网段
iptables -A INPUT -s 172.220.0/24 -j ACCEPT
放行指定端口
# 放行21端口
## 不指定协议,默认会匹配所有协议类型的数据包--Centos7低版本iptables不可用
iptables -A INPUT --dport 21 -j ACCEPT
## -p 指定协议
iptables -A INPUT -p udp --dport 21 -j ACCEPT
## -A INPUT:在INPUT链的末尾追加一条规则
## -p tcp:指定协议为TCP
## -m tcp:使用TCP模块,以便使用TCP相关的扩展匹配条件
## --dport 21:指定目标端口为21,即FTP数据传输的端口
## -j ACCEPT:将匹配的数据包目标设置为ACCEPT,即允许通过
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
阻止IP或端口
# 阻止IP
## —A 追加规则到INPUT链
## -s 源IP
## -j ACCEPT(允许)|DROP(丢弃)|REJECT(拒绝)
iptables -A INPUT -s "$ip" -j DROP
更高效的阻止方法
https://blog.csdn.net/liukuan73/article/details/78631851
# 更高效的阻止方式
## 其他表处理之前,-j NOTRACK跳过其它表处理
iptables -t raw -A PREROUTING -s "$ip" -j NOTRACK
iptables配置NAT规则
# 开启NAT
## 等价于 firewall-cmd --add-masquerade
iptables -t nat -A POSTROUTING -j MASQUERADE
# 指定源网段开启NAT
## -t 指定nat表
## -A 添加,添加规则到POSTROUTING链
## -s 指定来源地址
## -o 指定数据包出口
## -j MASQUERADE IP伪装(NAT)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
# 指定网卡开启NAT
## -t 指定nat表
## -I 插入,插入规则到POSTROUTING链
## -s 指定来源地址
## -o 指定数据包出口
## -j MASQUERADE IP伪装(NAT)
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
# 查看nat规则
iptables -t nat -vnL

端口重定向
# 把本机的tcp81端口转发到 8080端口
## -t nat 指定nat表
## -A 追加到PREROUTING链
## -p 指定tcp协议
## –dport 81 匹配目标端口号81
## -j REDIRECT(-j不能写在后面) 重定向
### --to-ports 重定向到指定端口
iptables -t nat -A PREROUTING -p tcp --dport 81 -j REDIRECT --to-ports 8080
# 示例2
iptables -t nat -A PREROUTING -i 网卡名 -d 目的地IP -p udp --dport 目的地端口 -j REDIRECT --to-ports 要重定向到的端口
## 如果需要本机也可以访问,则需要配置OUTPUT链:
## -j REDIRECT 不能在后面
iptables -t nat -A OUTPUT -p tcp --dport 81 -j REDIRECT --to-ports 8080
将一组端口转发到指定端口
# 将本地的udp端口段转发到指定端口
## -t nat 指定nat表
## -A 追加到PREROUTING链
## -p 指定tcp协议
## –dport 匹配目标端口号段
## -j REDIRECT(-j不能写在后面) 重定向
### --to-ports 要重定向到的端口
iptables -t nat -A PREROUTING -p udp --dport 51821:52829 -j REDIRECT --to-ports 51820
# 查看策略
## --line-number 查看规则编号
iptables -t nat -vnL --line-number

端口转发到其他服务器
https://www.zhangguangtong.cn/2016/03/用iptables将流量转发到另外一台机器/
# 将本地172.16.0.151:51830的端口转发到1.1.1.1:51820
# 1.先在PREROUTING上修改目的地址
## -t nat 指定nat表
## -A 追加到PREROUTING链
## -p 指定udp协议
## -m 匹配udp协议
## –dport 匹配目标端口号段
## -j DNAT(-j不能写在后面) 目的地地址转换
## --to-destination 要转发到的目的地ip
iptables -t nat -A PREROUTING -p udp -m udp --dport 51830:52839 -j DNAT --to-destination 1.1.1.1:51820
在POSTROUTING上修改源地址
# 2.在POSTROUTING上修改源地址
## -t nat 指定nat表
## -d 目的地地址IP
## -p 指定udp协议
## -m 匹配udp协议
## –dport 匹配目标端口号
## -j SNAT(-j不能写在后面) 来源地址转换
## to-source 要转发到的来源ip(本机IP)
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 51820 -j SNAT --to-source 172.16.0.151
修改DSCP值
# 出方向的POSTROUTING链调整DSCP
iptables -t mangle -I POSTROUTING -j DSCP --set-dscp 46 -m comment --comment "出方向POSTROUTING链的DSCP值设为46"
# 入方向的PREROUTING链调整DSCP
iptables -t mangle -I PREROUTING -j DSCP --set-dscp 46 -m comment --comment "入方向PREROUTING链的DSCP值为46"
查看DSCP配置
# 查看出方向的POSTROUTING链 上的规则
iptables -t mangle -L POSTROUTING -vn
# 查看入方向的PREROUTING链 上的规则
iptables -t mangle -L PREROUTING -vn

iptables添加注释信息
## -m comment --comment "注释信息"
iptables -A INPUT -s 138.185.2.106 -j DROP -m comment --comment "Block ip"

iptables修改注释-R
非常不推荐,建议的方法是删除这条策略,然后重新添加即可。
# -R 修改注释
## -m comment --comment "注释信息"
iptables -R INPUT 11 -p tcp --dport 25 -j DROP -m comment --comment "Block port 25"
iptables日志
默认情况下,RHEL发行版iptables将使用/var/log/messages记录所有消息。
Debian发行版iptables将使用/var/log/kern.log记录所有消息。
# 查看iptables日志
grep iptables /var/log/messages
# 查找特定时间内的iptables日志
grep iptables /var/log/messages | grep "YYYY-MM-DD"
配置 netfilter 使用日志
https://imkira.com/netfiler-log/
# 加载iptables调试内核模块
modprobe nf_log_ipv4
# 查看iptables调试内核模块是否启用
sysctl net.netfilter.nf_log.2
## 回显
net.netfilter.nf_log.2 = nf_log_ipv4

使用rsyslog记录iptables日志
修改iptables日志保存位置:
https://www.linuxprobe.com/iptables-record-log.html
# 安装rsyslog服务
yum -y install rsyslog
# 设置开机启动、并立即启动
systemctl enable rsyslog --now
# 编辑/etc/rsyslog.conf文件
[root@localhost ~]# vim /etc/rsyslog.conf
# 添加下面内容到文件底部
kern.warning /var/log/iptables.log
读取iptabtles日志
# 读取iptabtles日志
cat /var/log/iptables.log

- Iptables-SSH-IN: 通过指定–log-prefix选项,这是我们在日志记录中使用的前缀
- IN=ens160 OUT=: 这表示从该接口传入数据包。对于传出数据包将为空。
- IN= OUT=: 这表示从该接口传出数据包。对于传入的数据包将为空。
- MAC=: 00:0c:29:ae:7d:09 是目标MAC地址,
- :00:50:56:c0:00:08为源MAC地址,08:00为上层协议代码,表示IP协议。
- SRC=: 源IP地址
- DST=:目的IP地址
- LEN=: 数据包的长度
- PROTO=: 使用什么类型协议
- SPT=: 源端口
- DPT=: 目标端口

iptables-save保存防火墙策略–配置完必须执行!!!
不执行save,防火墙策略是临时的,重启就丢失了.
任何改动之前先备份,请保持这一优秀的习惯
https://www.linuxcool.com/iptables-save
iptables-save默认将防火墙配置文件保存在/etc/sysconfig/iptables-config中。
# 任何改动之前先备份,请保持这一优秀的习惯
# 备份iptables-config配置文件
cp /etc/sysconfig/iptables-config{,.`date +%Y_%m_%d_%H_%M_%S`.bak}
手动备份iptable规则
# 备份iptables规则文件--如果有
cp /bak/etc/iptables/old.rules{,.`date +%Y_%m_%d_%H_%M_%S`.bak}
# 打印iptables规则
## iptables-save 命令不加参数时会将当前的 IPtables 规则输出到终端上,而不是保存到文件中
iptables-save
# 创建iptable策略备份目录
mkdir -p /bak/etc/iptables
# 备份iptables策略
# 将当前防火墙策略规则信息输出重定向到文件
iptables-save > /bak/etc/iptables/old.rules
# nft规则
iptables-nft-save > /bak/etc/iptables/old.rules.nft
自动保存iptables规则
安装iptables-services服务会将iptables规则自动保存在/etc/sysconfig/iptables文件中
# 安装iptables-services服务
yum install -y iptables-services
# 启动iptables服务
systemctl enable --now iptables
# 保存iptables规则
service iptables save

清理重复iptables规则
# 清理重复的规则
uniq /bak/etc/iptables/old.rules >/bak/etc/iptables/old.rules.clean
# 清理重复的规则
uniq /bak/etc/iptables/old.rules.nft > /bak/etc/iptables/old.rules.nft.clean
还原iptables策略
https://www.linuxcool.com/iptables-restore
# 从备份文件还原iptables表的配置
iptables-restore < /bak/etc/iptables/old.rules.clean
iptalbes-nft-restore </bak/etc/iptables/old.rules.nft.clean
将iptables从nf_tables切换到legacy
https://www.linuxcool.com/update-alternatives
# 查看系统中的替代方案
update-alternatives --list

# 设置iptables-legacy设置为默认的iptables
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
# 设置arptables-legacy设置为默认的arptables
update-alternatives --set arptables /usr/sbin/arptables-legacy
# 设置ebtables-legacy设置为默认的ebtables
update-alternatives --set ebtables /usr/sbin/ebtables-legacy
xtables锁
## -w 5:等待锁的时间为5秒。如果在规定时间内无法获取到锁,将会报错
## -W 100000:尝试获取锁的最大次数为100000次。如果超过此次数仍无法获取到锁,将会报错
iptables -w 5 -W -A INPUT -s "$ip" -j DROP
本文详细介绍了iptables防火墙的工作原理、模块、钩子函数、报文流向、表和链的概念,以及如何配置规则、查看和删除规则。重点讲解了白名单和黑名单模式的设置,并提供了NAT规则、端口转发、日志配置等高级用法。此外,还讨论了iptables的持久化保存和恢复策略,以及如何从nf_tables切换到legacy模式。

1853

被折叠的 条评论
为什么被折叠?



