iptables防火墙

本文详细介绍了iptables防火墙的工作原理、模块、钩子函数、报文流向、表和链的概念,以及如何配置规则、查看和删除规则。重点讲解了白名单和黑名单模式的设置,并提供了NAT规则、端口转发、日志配置等高级用法。此外,还讨论了iptables的持久化保存和恢复策略,以及如何从nf_tables切换到legacy模式。

iptables防火墙

Netfilter内核模块

在这里插入图片描述
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在Linux内核中。
NetfilterLinux2.4.X之后新一代防火墙机制,是Linux内核的一个子系统Netfilter采用模块化设计,具有良好的可扩充性。提供扩展各种网络服务的结构化底层框架。NetfilterIP协议栈是无缝契合,并允许对数据进行过滤,地址转换,处理等操作。
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版以后,Netfilterprerouting(预路由)前加了一个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(后路由):发送到网卡接口之前,用于转发数据SNATMASQUERADE

自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有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

五个表

在这里插入图片描述

最常用的是fiternat表.

  • filter:过滤规则表,根据预定义到规则过滤复合条件的数据包,默认表
  • nat:network address translation 地址转换规则表
  • mangle:修改数据标记位规则表
  • raw:关闭启用的链接跟踪机制,加快封包穿越防火墙速度
  • security:用于强制访问控制(MAC)网络规则,由SELinux实现

Iptables防火墙优先级顺序:

如果定义了冲突的规则,表的优先级为:
security —> raw —> mangle —> nat —> filter
在这里插入图片描述


表和链的对应关系

在这里插入图片描述
在这里插入图片描述
各个链对应的表有那些:

对应的表名链名
mangle、nat、filterINPUT
raw、mangle、nat、filterOUTPUT
mangle、filterFORWARD
raw、mangle、natPREROUTING
mangle、natPOSTROUTING

规则表

  • 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锁时间
    • -t nat 指定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 IP
  • SNAT : 源地址转换。
  • 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 表中的规则以及 INPUTFORWARDOUTPUT 链的规则。

# 显示默认链所有当前已有的防火墙策略
## -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

iptablesnf_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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

您的赞赏,是我深夜码字时最亮的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值