iptables(10)target(REJECT、LOG)

简介

前面文章介绍iptables的匹配条件,并且已经用到了一些常用动作,比如ACCEPT、DROP、REJECT等。

以下是 iptables 中常用的一些目标(target)及其原理和时机:

ACCEPT
原理:允许数据包通过,并停止对后续规则的匹配。
时机:当你想允许特定的数据包通过防火墙时。

DROP
原理:丢弃数据包,并不返回任何错误消息给发送者。
时机:当你想阻止特定的数据包通过防火墙,并且不想让发送者知道数据包已被丢弃时。

REJECT
原理:拒绝数据包,并返回一个错误消息给发送者(通常是 ICMP 类型的消息)。
时机:当你想阻止特定的数据包通过防火墙,并希望发送者知道数据包已被拒绝时。

LOG
原理:记录数据包的信息到系统日志(通常是 /var/log/syslog 或 /var/log/messages),然后根据下一个目标(通常是 DROP 或 REJECT)来处理数据包。
时机:当你想记录通过或未通过防火墙的数据包信息时。

RETURN
原理:结束当前链中的处理,并返回到调用它的链继续处理。
时机:当你使用用户定义的链(user-defined chains)时,并且在处理完特定条件后想返回到主链(如 INPUT、OUTPUT、FORWARD)继续处理。

QUEUE
原理:将数据包放入用户空间队列,以便应用程序(如防火墙脚本)可以进一步处理。
时机:当你想在用户空间中对数据包进行更复杂的处理时。

MARK
原理:设置数据包的 NFMARK 字段。这通常与路由和其他更高级的功能一起使用。
时机:当你需要为数据包设置特定的标记以进行后续处理时。

GOTO
原理:跳转到另一个用户定义的链进行进一步处理。与 RETURN 类似,但不返回,而是继续在新的链中处理。
时机:当你想在一个复杂的用户定义的链结构中进行控制流处理时。

DNAT(目标地址转换)和 SNAT(源地址转换)
原理:修改数据包的源或目标 IP 地址。通常用于 NAT(网络地址转换)场景。
时机:当你想在防火墙级别进行地址转换时,例如,将外部 IP 地址映射到内部服务器。

MASQUERADE(或MASQUERADE-SAVE)
原理:对源地址进行伪装,通常用于从私有网络到公共网络的NAT。
时机:在私有网络中的主机需要访问公共网络时。

TOS 或 TCLASS
原理:修改数据包的Type of Service(TOS)字段(IPv4)或Traffic Class(IPv6)。
时机:根据数据包的优先级或服务类型进行路由决策。

TTL
原理:修改数据包的TTL(Time to Live)字段。
时机:需要控制数据包在网络中的生存时间时。

CT(Connection Tracking)
原理:允许为数据包或其相关连接设置参数,如修改连接的状态或超时值。
时机:需要更精细地控制连接跟踪的行为时。

SECMARK
原理:设置安全标记,用于安全相关的决策。
时机:在需要基于安全标记进行数据包处理时。

CLUSTERIP
原理:配置一个简单的节点集群,这些节点共享特定的IP和MAC地址。
时机:设置负载均衡集群或简单的故障转移配置时。

每个目标都有其特定的用途和适用场景,并且可以根据需要组合使用。当数据包匹配一个规则时,iptables 
会根据该规则的目标来执行相应的操作。iptables的功能和可用的target可能会随着Linux内核版本和
iptables/netfilter项目的更新而发生变化。

REJECT动作

REJECT动作的常用选项为--reject-with,使用该选项,可以设置提示信息,当对方被拒绝时,会提示对方为什么被拒绝。

icmp-port-unreachable
描述:目标端口不可达。
用途:当数据包的目标端口在目标主机上不存在或未打开时,可以使用此选项。

icmp-proto-unreachable
描述:协议不可达。
用途:当数据包使用的协议在目标主机上不支持时,可以使用此选项。

icmp-net-unreachable
描述:网络不可达。
用途:当目标网络不可达时(例如,路由问题),可以使用此选项。

icmp-host-unreachable
描述:主机不可达。
用途:当目标主机不可达时(例如,主机已关闭或崩溃),可以使用此选项。

icmp-net-prohibited
描述:网络被禁止。
用途:当出于某种策略原因(如防火墙规则)拒绝数据包时,可以使用此选项。

icmp-host-prohibited
描述:主机被禁止。
用途:当出于某种策略原因(如防火墙规则)拒绝特定主机的数据包时,可以使用此选项。

icmp-admin-prohibited
描述:管理禁止。
用途:这是一个较通用的错误消息,表示出于管理原因数据包被拒绝。

icmp-fragmentation-needed (在某些iptables版本中可能不可用)
描述:需要分片但设置了不分片位。
用途:当数据包太大而无法在不需要分片的情况下传输时,可以使用此选项(在iptables中可能不直接支持)。

icmp-fragmentation-failed (在某些iptables版本中可能不可用)
描述:分片失败。
用途:当数据包在分片过程中失败时,可以使用此选项(在iptables中可能不直接支持)。

当不设置任何值时,默认值为icmp-port-unreachable
当直接配置REJECT时,默认就是icmp-port-uunreachable
当我们在ping该主机的时候就会显示port unreachable
新增一条,reject-with修改为icmp-host-unreachable
此时再ping该主机就会显示host unreachable

LOG动作

iptables中的LOG动作主要用于记录与防火墙规则匹配的数据包的相关信息到日志文件中,但它本身并不决定数据包是被接受还是被拒绝。

默认情况下,LOG动作会将日志信息记录到系统的/var/log/messages文件中(具体存放在什么位置取决于自己的系统和使用的日志系统),通常这是通过rsyslog或syslogd服务来实现的。也可以将LOG动作的日志信息记录到指定的文件中,以避免与其他日志信息混淆。这可以通过修改rsyslog或syslogd的配置文件(如/etc/rsyslog.conf/etc/syslog.conf)来实现

--log-level:指定记录日志的日志级别。可用的日志级别包括emerg、alert、crit、error、warning、notice、info、debug等。

--log-prefix:给记录到的相关信息添加前缀信息,以便区分不同的日志。前缀信息最多可以是29个字符

此处直接使用LOG,即访问本机80端口会记录LOG,默认会存储到/var/log/messages文件中(我使用的是Debian,日志使用的是systemd-journald,所以直接通过journalctl查看日志),默认的日志级别是warning
访问140.250的80端口,此时应该有日志信息被记录下来

此时就能看到有对应的日志信息被记录,由于上例中使用的匹配条件过于宽泛,所以匹配到的报文数量将会非常之多,记录到的信息也不利于分析,所以在使用LOG动作时,匹配条件应该尽量写的精确一些,匹配到的报文数量也会大幅度的减少,这样冗余的日志信息就会变少,同时日后分析日志时,日志中的信息可用程度更高。

由于我使用的是systemd-journald如果要区分iptables的日志信息,可以使用iptables的systemd-journald,也可以将iptables的日志发送到特定的日志平台如ELK堆栈,graylog等。

上图中,我门在上篇文章介绍了网络防火墙所配置的规则,现在我给这些规则添加上日志记录,查看下日志记录的信息,可以在自定义链的具体规则中设置日志规则,也可以直接引用自定义链设置日志规则

如果你想要给 FRW-A-C 链中的每个规则都加上日志记录功能,你需要使用 LOG 目标来为每个规则添加日志。但请注意,直接在每个规则前添加 LOG 目标可能会导致日志记录非常频繁,这可能会对你的系统性能产生影响。

在 iptables 中,你可以在每个规则前添加一个 LOG 目标。但是,由于 iptables 的限制,你不能在一个 -A(追加)操作中同时添加多个目标。因此,你需要为每个规则单独执行 iptables -A 命令。

在自定义链引用到FROWARD链时添加日志规则,并且添加--log-prefix前缀信息
在主机A对主机C进行访问,此时由于iptables的自定义链我们设置了日志信息, 所以会记录对应的日志信息。
可以通过journalctl -n显示最新的多少行日志信息,然后最上面是我们没有设置--log-prefix的日志信息,下面是我们设置了--log-prefix的日志信息,可以通过筛选,对前缀进行筛选,只显示对应--log-prefix的日志信息
通过grep命令可以对我们设置的--log-prefix进行筛选,也可以进行更精细的筛选,具体的日志配置和筛选方式取决于具体的使用环境和使用需求。

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值