openwrt - iptables 命令、例子、日志

目录

IPTables 和 Netfilter

IPTables 的表(Tables)

IPTables 的链(Chains)

基本命令

filter表的几个重要命令

例子:禁止自己被ping

nat表的几个重要命令

选择匹配模式(pattern)

匹配后的动作(action)

nat机器的配置

例子:将私有网络通过 NAT 连接到互联网(路由nat原理)

例子:通过 NAT 从外网访问内网服务(端口映射)

例子:透明代理

例子:通过跳板机绕过某端口

IPTables 日志:

例子:记录所有ssh服务的登录的日志

日志级别

日志位置

如何读取IPTables日志

OpenWrt 内置防火墙介绍

配置文件 /etc/init.d/firewall


参考

[译] NAT - 网络地址转换(2016)https://arthurchiao.art/blog/nat-zh/
[译] 深入理解 iptables 和 netfilter 架构 https://arthurchiao.art/blog/deep-dive-into-iptables-and-netfilter-arch-zh/
iptables使用总结 - https://www.cnblogs.com/wn1m/p/10919742.html
详解 OpenWrt 防火墙配置、NAT配置 - https://blog.csdn.net/weixin_38387929/article/details/117828113

Netfilter中的数据包流向和各hook点位置配图

原图:https://arthurchiao.art/assets/img/deep-dive-into-iptables-netfilter/Netfilter-packet-flow.svg

简化图:数据包过滤匹配流程

目录

IPTables 和 Netfilter

IPTables 的表(Tables)

IPTables 的链(Chains)

基本命令

filter表的几个重要命令

例子:禁止自己被ping

nat表的几个重要命令

选择匹配模式(pattern)

匹配后的动作(action)

nat机器的配置

例子:将私有网络通过 NAT 连接到互联网(路由nat原理)

例子:通过 NAT 从外网访问内网服务(端口映射)

例子:透明代理

例子:通过跳板机绕过某端口

IPTables 日志:

例子:记录所有ssh服务的登录的日志

日志级别

日志位置

如何读取IPTables日志

OpenWrt 内置防火墙介绍

配置文件 /etc/init.d/firewall



IPTables 和 Netfilter


netfilter(官网:https://netfilter.org/)顾名思义是一个网络数据包过滤框架。它提供了 5 个 hook 点,每个进入网络系统的包(接收或发送)在经过协议栈时都会触发这些 hook。触发哪个 hook 取决于包的方向(是发送还是接收)、包的目的地址、以及包在上一个 hook 点是被丢弃还是拒绝等等。

iptables 是使 用很广泛的防火墙工具之一,它基于内核的包过滤框架(packet filtering framework) netfilter。

包 - 网络层
帧 - 数据链路层
段 - 传输层

iptables 相关的内核模 块在这些 hook 点注册了处理函数,因此可以通过配置 iptables 规则来使得网络流量符合 防火墙规则。

防火墙虽然可以过滤互联网的数据包,但是无法过滤内部网络的数据包。

IPTables 的表(Tables)


iptables 使用 table 来组织规则,根据用来做什么类型的判断(the type of decisions they are used to make)标准,将规则分为不同 table。例如,如果规则是处理 网络地址转换的,那会放到 nat table;如果是判断是否允许包继续向前,那可能会放到 filter table。

具体看看这些 table 是如何按规则类型区分的。

  • Filter(常用)(流量过滤)

filter table 是最常用的 table 之一,用于判断是否允许一个包通过

在防火墙领域,这通常称作“过滤”包(”filtering” packets)。这个 table 提供了防火墙 的一些常见功能。

  • NAT (Network Address Translation 网络地址转换)(常用)(流量转发)

nat table 用于实现网络地址转换规则

当包进入协议栈的时候,这些规则决定是否以及如何修改包的源/目的地址,以改变包被 路由时的行为。nat table 通常用于将包路由到无法直接访问的网络。

  • Mangle(碾压)(流量跟踪)

mangle (修正)table 用于修改包的 IP 头。

例如,可以修改包的 TTL,增加或减少包可以经过的跳数。

这个 table 还可以对包打只在内核内有效的“标记”(internal kernel “mark”),后 续的 table 或工具处理的时候可以用到这些标记。标记不会修改包本身,只是在包的内核 表示上做标记。

  • Raw(生的、原始的)(流量整形)

iptables 防火墙是有状态的:对每个包进行判断的时候是依赖已经判断过的包。

建立在 netfilter 之上的连接跟踪(connection tracking)特性使得 iptables 将包 看作已有的连接或会话的一部分,而不是一个由独立、不相关的包组成的流。连接跟踪逻 辑在包到达网络接口之后很快就应用了。

raw table 定义的功能非常有限,其唯一目的就是提供一个让包绕过连接跟踪的框架。

  • Security

security table 的作用是给包打上 SELinux 标记,以此影响 SELinux 或其他可以解读 SELinux 安全上下文的系统处理包的行为。这些标记可以基于单个包,也可以基于连接。

IPTables 的链(Chains)


在IPTablse的每个 table 内部,规则被进一步组织成 chain(分别为:PREROUTING 路由前FORWARD 转发POSTROUTING 路由后INPUT 入站OUTPUT 出站),内置的 chain 是由内置的 hook 触发 的。chain 基本上能决定(basically determin)规则何时被匹配。

例如:和 NAT 相关的最重要的规则,都在 nat 这个table 里。这个表有三个预置的 chain:PREROUTING, OUTPUT 和 POSTROUTING。

包经过 PREROUTING chain 之后,将进行路由判 断。如果目的是本机,那接下来的过程将不涉及 NAT;如果目的是网络内的其他机器,那包 将会被转发到那台机器,前提是这台机器配置了允许转发。
.
在转发包离开本机之前,它会经过 POSTROUTING chain。对于本机生成的包,这里还有一 点不同:它会先经过 OUTPUT chain,然后再经过 POSTROUTING chain。

Tables/ChainsPREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
(路由判断)Y
rawYY
(连接跟踪)YY
mangleYYYYY
nat (DNAT) YY
(路由判断) YY
filterYYY
securityYYY
nat (SNAT)YYY

上面的表格展示了 table 和 chain 的关系。横向是 table, 纵向是 chain,Y 表示 这个 table 里面有这个 chain。例如,第二行表示 raw table 有 PRETOUTING 和 OUTPUT 两 个 chain。具体到每列,从上倒下的顺序就是 netfilter hook 触发的时候,(对应 table 的)chain 被调用的顺序。
.

有几点需要说明一下。在下面的图中,nat table 被细分成了 DNAT (修改目的地址) 和 SNAT(修改源地址),以更方便地展示他们的优先级。另外,我们添加了路由决策点 和连接跟踪点,以使得整个过程更完整全面

结合最开始的包流向图,我们可以得到如下不同场景下包的游走流程:

  • 收到的、目的是本机的包:PRETOUTING -> INPUT
  • 收到的、目的是其他主机的包:PRETOUTING -> FORWARD -> POSTROUTING
  • 本地产生的包:OUTPUT -> POSTROUTING

再综合前面讨论的 table 顺序问题,我们可以看到对于一个收到的、目的是本机的包:首先依次经过 PRETOUTING chain 上面的 raw、mangle、nat table;然后依次经 过 INPUT chain 的 mangle、filter、security、nat table,然后才会到达本机 的某个 socket。

基本命令

# Abstract structure of an iptables instruction:
iptables [-t table] [-command chain] [match pattern] [-j action]

-t table 表名,默认filter
-comman chain 管理选项,如:添加A、插入I、删除D、查看L
match pattern 数据包特征,如:ip、端口等
-j action 控制类型(数据包的处理方式),如:ACCEPT 允许、REJECT 拒绝、DROP 丢弃、LOG 记录日志

  • 查询
iptables -t filter -L -n 
# -t table 对指定的表进行操作(默认-t filter)
# -L list 列出指定表的数据
# -n 数字的输出地址和端口

$ sudo iptables -t filter   -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 
  • 添加规则(APPEND)
iptables -t filter -A INPUT -p tcp --dport 8081 -j DROP

# --append  -A chain            Append to chain
# DROP 丢弃数据包
# --jump -j target for rule (may load target extension)
# --protocol  -p proto        protocol: by number or name, eg. `tcp'
# dport:目的端口  destination
# sport:来源端口  source

$ iptables -t filter -A INPUT -j DROP -p tcp --dport 8081
$ iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  anywhere             anywhere             tcp dpt:8081

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

# 这时候,如果8081有监听一个web服务器在监听,那么数据包进入(INPUT)8081端口时会被丢弃
  • 删除规则
#   --delete  -D chain rulenum
#                                Delete rule rulenum (1 = first) from chain

# 删除INPUT 规则集合中的第一条规则
$ iptables -D INPUT 1
$ iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
  • 插入规则(INSERT)
# 如果有多条规则,则条目越前,优先级越高
# 为了插入优先级较高的条目,这里需要INSERT
iptables -I INPUT 5 -p tcp -dport 8081 -t filter -j DROP

  • 多端口指定
iptables -A INPUT -p tcp -m multiport --dport 80,21 -j DROP 

  • 多ip指定
iptables -I INPUT -p tcp -m iprange --src-range 192.168.49.184-192.168.49.200 DROP 

  • mac指定
iptables -I INPUT -m mac --mac-source 00:0C:29:64:E3:8D -j ACCEPT 

  • tpc状态
iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT 


filter表的几个重要命令


Ubuntu18.04的网络配置(静态IP和动态IP) - https://www.cnblogs.com/opsprobe/p/9979234.html

例子:禁止自己被ping


自己可以ping别人,别人不能ping自己

$ sudo iptables -t filter -I INPUT -p icmp --icmp-type 8 -j DROP
$ sudo iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       icmp --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination


别人ping我,INPUT,icmp-type=8,被丢弃


使用ipv6的话,命令要改改

ip6tables -t filter -A input_wan_rule -p ipv6-icmp --icmpv6-type 128 -j DROP

IPv6基础篇(三):ICMPv6的整体介绍 https://zhuanlan.zhihu.com/p/109694886
使用 ip6tables 配置一个用于拨号上网的 ipv6 防火墙 https://blog.sbw.so/u/use-ip6tables-config-fire-wall-for-ipv6.html


nat表的几个重要命令

默认的 table 是 filter table,因此我们接下来每次都要指定 -t nat

最重要的几个命令:

# In the following "chain" represents
# one of the chains PREROUTING, OUTPUT and POSTROUTING

# add a rule:
$> iptables -t nat -A chain [...]

# list rules:
$> iptables -t nat -L

# remove user-defined chain with index 'myindex':
$> iptables -t nat -D chain myindex

# Remove all rules in chain 'chain':
$> iptables -t nat -F chain


完整 iptables 命令可以查看 man page:

# manual pages of iptables
$> man iptables

按 q 退出帮助。

选择匹配模式(pattern)

要对特定包进行处理需要指定匹配模式。如下是几个重要的例子,完整模式信息请参阅 iptables man page。

# actions to be taken on matched packets
# will be abbreviated by '[...]'.
# Depending on the match pattern the appropriate chain is selected.

# TCP packets from 192.168.1.2:
$> iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.2 [...]
# s source

# UDP packets to 192.168.1.2:
$> iptables -t nat -A POSTROUTING -p udp -d 192.168.1.2 [...]
# d destination

# all packets from 192.168.x.x arriving at eth0:
$> iptables -t nat -A PREROUTING -s 192.168.0.0/16 -i eth0 [...]
# i interface

# all packets except TCP packets and except packets from 192.168.1.2:
$> iptables -t nat -A PREROUTING -p ! tcp -s ! 192.168.1.2 [...]

# packets leaving at eth1:
$> iptables -t nat -A POSTROUTING -o eth1 [...]

# TCP packets from 192.168.1.2, port 12345 to 12356
# to 123.123.123.123, Port 22
# (a backslash indicates contination at the next line)
$> iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.2 \
   --sport 12345:12356 -d 123.123.123.123 --dport 22 [...]

大部分选项都有长短两种格式,例如 --source 和 -s,长格式写起来麻烦,但更易 阅读。

匹配后的动作(action)


至此,我们已经可以指定匹配模式来过滤包了,接下来就是选择合适的动作。对于 nat table,有如下几种动作:SNAT, MASQUERADE, DNAT, REDIRECT,都需要通过 -j 指定。它们的格式如下(表示的意思将在下一节介绍):

# In the following the table selection, the command and the match pattern
# will be abbreviated using [...]

# 修改源 IP 为固定新 IP (静态)
# Source-NAT: Change sender to 123.123.123.123
$> iptables [...] -j SNAT --to-source 123.123.123.123
# --------------------------
# 因为 SNAT 只对离开路由器的包有意义,因此它只用在 POSTROUTING chain 中。

# 修改源 IP 为动态新 IP(动态获取网络接口 IP)
# Mask: Change sender to outgoing network interface
$> iptables [...] -j MASQUERADE
# --------------------------
# 和 SNAT 类似,但是对每个包都会动态获取指定输出接口(网卡)的 IP,因此如果接口 的 IP 地址发送了变化,MASQUERADE 规则不受影响,可以正常工作;而对于 SNAT 就必须重新调整规则。
# 和 SNAT 一样,MASQUERADE 只对 POSTROUTING chain 有意义。但和 SNAT 不同, MASQUERADE 不支持更详细的配置项了。

# 修改目的 IP
# Destination-NAT: Change receipient to 123.123.123.123, port 22
$> iptables [...] -j DNAT --to-destination 123.123.123.123:22
# --------------------------
# 如果想修改包的目的 IP 地址,那需要使用 Destination NAT(DNAT)。
# DNAT 可以用于运行在防火墙后面的服务器。
# 显然,接收端修改必须在做路由决策之前,因此 DNAT 适用于 PREROUTING 和 OUTPUT (本地生成的包)chain。


# 将包重定向到本机另一个端口
# Redirect to local port 8080
$> iptables [...] -j REDIRECT --to-ports 8080
# --------------------------
# REDIRECT 是 DNAT 的一个特殊场景。包被重定向到路由器的另一个本地端口,可以实现, 例如透明代理的功能。和 DNAT 一样,REDIRECT 适用于 PREROUTING 和 OUTPUT chain 。


nat机器的配置


要使用 NAT,我们首先需要配置机器。下面的例子中,# 开头的是注释,$> 开头的是命 令。

# IMPORTANT: Activate IP-forwarding in the kernel!

# 开启ip转发功能,默认关闭。关闭时,遇到非本地ip会直接丢弃
# Disabled by default!
$> echo "1" > /proc/sys/net/ipv4/ip_forward
# centos可以改成执行下面命令,然后重启以下
echo "net.ipv4.ip_forward=1">>/usr/lib/sysctl.d/50-default.conf
# 检察,看到net.ipv4.ip_forward = 1 就ok了
sysctl -a | grep ip_forward 


# Load various modules. Usually they are already loaded 
# (especially for newer kernels), in that case 
# the following commands are not needed.
 
# Load iptables module:
$> modprobe ip_tables

# activate connection tracking
# (connection's status are taken into account)
$> modprobe ip_conntrack

# Special features for IRC:
$> modprobe ip_conntrack_irc

# Special features for FTP:
$> modprobe ip_conntrack_ftp

以上配置应该足够了。如果遇到错误,可能是因为你的内核在编译时没有指定路由相关的选 项,请参考这里 http://www.comptechdoc.org/os/linux/usersguide/linux_ugipmasq.html

例子:将私有网络通过 NAT 连接到互联网(路由nat原理)


从本地网络发出的、目的是互联网的包,将发送方地址修改为路由器 的地址。

接下来假设路由器的本地网络走 eth0 端口,到因特网的网络走 eth1 端口。那么如 下命令就能完成我们期望的功能:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE
# https://www.bilibili.com/video/BV15541157wS?p=12

解释:

  • -t nat 指定对名为 nat 的 iptables table 配置 NAT 规则
  • -A POSTROUTING 追加(A: Append)规则到 iptables 的 POSTROUTING chain
  • -o eth1 指定只对从 eth1 发出的数据包做操作(o: output)
  • -j MASQUERADE 规则匹配成功后的动作是 masquerade (伪装)数据包,将源地址修改为路由器地址

如果路由器配置的是静态 IP 地址,那 SNAT 是最合适的选择,因为它比 MASQUERADE 更 快,后者对每个包都需要检查指定的输出端口上配置的 IP 地址。

# Options for SNAT (abstract of manual page)
iptables -t nat -A POSTROUTING -o eth0 -j DNAT --to-source <ipaddr>[-<ipaddr>][:port-port]


例子:通过 NAT 从外网访问内网服务(端口映射)


运行在 NAT 路由器后面的内网服务器,默认是不能被外部网络直接访问的。例如,假设我 们有一个 HTTP 服务运行在内网机器 192.168.1.2,NAT 路由器的地址是 192.168.1.1 ,并通过另一张有公网 IP 123.123.123.123 的网卡连接到了外部网络。

要使得外网机器可以访问 192.168.1.2 的服务,需要执行:

# redirect http traffic to 192.168.1.2:
$> iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to 192.168.1.2

然后,就可以通过公网 IP 123.123.123.123 的 80 端口访问 192.168.1.2 的 HTTP 服务了。

更换映射的服务端口,可以防止别人盯着一个端口一直ping

# 把10机子的ssh服务端口更换到3333
iptables -t nat -A PREROUTING -i ens34 -d 192.168.200.10 -p tcp --dport 3333 -j DNAT --to-destination 192.168.100.10:22


例子:透明代理


假设我们有一个本地网络,通过 NAT 连接到因特网。我们需要在路由器的 8080 端口运行 一个 HTTP 代理,处理本地网络 HTTP 流量。

首先想到的解决方案是:让每个用户设置他们的浏览器使用代理服务器,然后禁止所有 80 端口的出流量。对于很小的网络,这种方式可能让人满意,但无法扩展到很大的网络,因为 这种方式需要对每个客户端进行配置。(也失去了“透明代理”的意义)。

使用 NAT,我们有另一种可能:所有从 80 端口进来的流量,重定向到 8080 端口。相应 的命令:

# Transparent proxying:
# (local net at eth0, proxy server at port 8080)
$> iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
   -j REDIRECT --to-ports 8080 

当然,8080 端口要有 HTTP 代理运行。另外,你的服务器可能做一些特殊配置(甚至特殊 编译)才能支持透明代理。

透明代理的缺点是 CPU load 会升高(尤其是大型网络),对太新或太旧的浏览器可能有兼 容性问题。

例子:通过跳板机绕过某端口


假设110端口坏了,我们使用 NAT 可以绕过它。

找一个110端口好的跳板机,在它上寻找一个可用端口,例如:111.111.111.111:5001,做透明代理。

首先,在你自己的(内网)机器上执行:

# redirect http-Traffic going to Port 110 to 111.111.111.111:5001:
$> iptables -t nat -A OUTPUT -p tcp --dport 110 \
   -j DNAT --to-destination 111.111.111.111:5001

然后,在跳板机上执行

# redirect port 5001 to port 110 (POP3) at 123.123.123.123:
$> iptables -t nat -A PREROUTING -p tcp --dport 5001 \
   -j DNAT --to-destination 123.123.123.123:110
   
# Change sender to redirecting machine:
$> iptables -t nat -A POSTROUTING -p tcp --dport 110 \
   -j MASQUERADE

这样就成功绕过了坏了的110端口。


或者,不需要 iptables 规则,你可以设置浏览器的默认端口是 5001,但是这可能有一些 潜在的问题。

IPTables 日志:


⭐️ 【笔记】openwrt - 日志 logger、syslog/rsyslog

https://lawsssscat.blog.csdn.net/article/details/103377807

如何在Linux上启用iptables日志:https://www.howtoing.com/enable-logging-in-iptables-on-linux

iptables防火墙如何记录日志:https://www.linuxprobe.com/iptables-record-log.html

openwrt日志用logger、logd、logread进行管理查看。下面希望引入rsyslog进行日志管理

首先,我们需要了解如何将所有的iptables的INPUT链数据包记录到/var/log/messages中。如果你已经有一些iptables规则了,那么将记录日志的规则放在这些规则的顶部,如果放在规则的后面,将不会记录日志。

例子:记录所有ssh服务的登录的日志

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 4/min -j LOG --log-prefix "Iptables-SSH-IN: " --log-level 4
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

上面第一条规则解释:

  • -m limit:使用limit模块。使用此选项,可以使用–limit选项限制访问速率。
  • --limit 4/min:这表示记录的最大平均访问速率。在此示例中,对于类似的数据包,它将日志记录限制为每分钟4个。还可以设置为2/second, 2/minute, 2/hour, 2/day。
  • -j LOG:这表示此数据包的目标是LOG。即写入日志文件。
  • --log-prefix "Iptables-SSH-IN: ” 可以指定任何日志前缀,这些前缀将写入到/var/log/messages日志文件中。
  • --log-level 4这是标准的系统日志级别。4是警告(warning)。可以使用0到7之间的数字。0是emerg,1是alert,2是crit,3是err,4是warning,5是notice,6是info,7是debug。


日志级别


man syslog的8种级别,这里面的日志级别要与iptables的–log-level 的日志级别要对应.

$ iptables -A INPUT -s 192.168.10.0/24 -j LOG --log-level 4

这是标准的系统日志级别。4是警告(warning)。可以使用0到7之间的数字。0是emerg,1是alert,2是crit,3是err,4是warning,5是notice,6是info,7是debug。

日志位置


(默认情况下,iptables将使用/var/log/messages记录所有消息。)
(更多syslog.conf配置细节参考man syslog)

# 前提需要安装rsyslog服务:
# yum -y install rsyslog
# systemctl enable rsyslog --now

# 修改日志位置
vi /etc/syslog.conf
# 添加以下行
kern.warning /var/log/iptables.log

# 重新启动rsyslog服务。
$ service rsyslog restart


如何读取IPTables日志

[root@localhost ~]# cat /var/log/iptables.log 

Feb  9 10:46:20 localhost kernel: Iptables-SSH-IN: IN=ens160 OUT= MAC=00:0c:29:ae:7d:09:00:50:56:c0:00:08:08:00 SRC=192.168.43.1 DST=192.168.43.137 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=49928 DF PROTO=TCP SPT=16512 DPT=22 WINDOW=64240 RES=0x00 SYN URGP=0
  • 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=: 目标端口


OpenWrt 内置防火墙介绍


Openwrt是一个GNU/Linux的发行版,Openwrt的防火墙与Linux的防火墙是通过netfilter内核模块,加上用户空间的iptables管理工具实现的 ── 同样是五链四张表、五元素的管理框架。

OpenWRT开发了一套与iptables同地位的netfilter管理工具fw3,这个工具侧重于从uci格式的配置文件中获取过滤信息下发到内核的netfilter中去。

配置文件 /etc/init.d/firewall


防火墙文件总会在/etc/init.d/firewall启动的时候由UCI解码并且生成iptables规则生效。

OpenWrt关于NAT、DMZ、防火墙规则等等都是由配置文件/etc/config/firewall文件控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值