iptables 防火墙(二)

目录

1. SNAT 策略及应用

1.1 SNAT策略概述

 1. 只开启路由转发,未设置地址转换的情况

2. 开启路由转发,并设置SNAT转换的情况

1.2 SNAT策略的应用

1. 2.1 共享固定IP上网

(1)打开网关的路由转发

(2)设置正确的SNAT策略

(3)测试SNAT共享接入结果

1.2.2 共享动态IP 地址上网

2. DNAT策略及应用

2.1 DNAT 策略概述

2.2 DNAT策略的应用

2.2.1  发布企业内部的Web服务器

(1)打开网关的路由转发

(3)测试DNAT发布结果

2.2.2 发布企业内部的 OpenSSH服务器

(1)配置OpenSSH服务

  (2)打开网关的路由转发

  (3) 正确设置DNAT策略

(4)测试DNAT发布结果

3. 规则的导入、导出

3.1 规则的备份及还原

3.1.1 iptables-save 命令

3.1.2  iptables-restore 命令

3.2 使用iptables服务

3.2.1 自动启用防火墙规则

3.2.2 清空所有防火墙规则

4. 使用防火墙脚本

4.1 防火墙脚本的构成

4.1.1 定义基本变量

4.1.2 加载内核模块

4.1.3 调整/proc 参数

4.1.4 设置具体的iptables规则

(1)清理已有规则

(2)设置规则链的默认策略

(3)设置nat表中的各种规则

(4)设置filter表的各种规则


1. SNAT 策略及应用

Linux 防火墙在很多时候承担着连接企业内、外网的重任,除了提供数据包过滤功能以外,还提供一些基本的网关应用。本章将学习 Linux 防火墙的 SNAT DNAT 策略,分别掌握两个典型的应用:局域网共享一个公网 IP 地址接入 Internet ;向 Internet 发布位于内网的应用服务器。
SNAT Source Network Address Translation ,源地址转换)是 Linux 防火墙的一种地址转换操作,也是 iptables 命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的源 IP 地址。

1.1 SNAT策略概述

随着 Internet 网络在全世界范围内的快速发展, IPv4 协议支持的可用 IP 地址资源逐渐变少,资源匮乏使得许多企业难以申请更多的公网 IP 地址,或者只能承受一个或者少数几个公网 IP 地址的费用。而与此同时,大部分企业面临着将局域网内的主机接入 Internet 的需求。
通过在网关中应用 SNAT 策略,可以解决局域网共享上网的问题。下面以一个小型的企业网络为例。 Linux 网关服务器通过两块网卡 ens33 ens37 分别连接 Internet 和局域网,如图 3.1 所示,分析局域网主机访问 Internet 的情况。

 1. 只开启路由转发,未设置地址转换的情况
正常情况下,作为网关的 Linux 服务器必须打开路由转发,才能沟通多个网络。未使用地址转换策略时,从局域网 PC (如 192.168.1.234 )访问 Internet 的数据包经过网关转发后其源 IP 地址保持不变,当 Internet 中的主机收到这样的请求数据包后,响应数据包将无法正确返回(私有地址不能在 Internet 中正常路由),从而导致访问失败,如图 3.2 所示。

2. 开启路由转发,并设置SNAT转换的情况
如果在网关服务器中正确应用 SNAT 策略,数据包转发情况就不一样了。当局域网 PC访问 Internet 的数据包到达网关服务器时,会先进行路由选择,若发现该数据包需要从外网接口(如 ens33 )向外转发,则将其源 IP 地址(如 192.168.1.234)修改为网关的外网接口地址(如 218.29.30.31 ),然后才发送给目标主机(如 58.63.236.45)。相当于从网关服务器的公网 IP 地址提交数据访问请求,目标主机也可以正确返回响应数据包,如图 3.3 所示。最终实现局域网 PC 共享同一个公网 IP 地址接入 Internet

在上述 SNAT 转换地址的过程中,网关服务器会根据之前建立的 SNAT 映射,将响应数据包正确返回局域网中的源主机。因此,只要连接的第一个包被 SNAT 处理了,那么这个连接及对应数据流的其他包也会自动地被进行 SNAT 处理。另一方面,Internet 中的服务器并不知道局域网 PC 的实际 IP 地址,中间的转换完全由网关主机完成,一定程度上也起到了保护内部网络的作用。    


1.2 SNAT策略的应用

SNAT 的典型应用是为局域网共享上网提供接入策略,处理数据包的切入时机是在路由选择之后( POSTROUTING)进行。关键操作是将局域网外发数据包的源 IP 地址(私有地址)修改为网关服务器的外网接口 IP 地址(公有地址)。
SNAT 策略只能用在 nat 表的 POSTROUTING 链,使用 iptables 命令编写 SNAT 策略时,需要结合 “--to-source IP 地址 选项来指定修改后的源 IP 地址(如-j SNAT --to-source 218.29.30.31 )。下面通过两个实例来说明 SNAT 策略的具体用法。
1. 2.1 共享固定IP上网
案例环境如图 3.1 所示,需求描述如下。
  • Linux 网关服务器通过两块网卡 ens33ens37 分别连接 Internet 和局域网,其中 ens33的 IP 地址为 218.29.30.31ens37 IP 地址为 192.168.1.1
  • 所有局域网 PC 的默认网关设为 192.168.1.1,且已经设置了正确的 DNS 服务器。
  • 要求 192.168.1.0/24 网段的 PC 能够通过共享方式正常访问 Internet

根据上述环境,推荐的操作步骤如下。

(1)打开网关的路由转发
对于 Linux 服务器, IP 转发是实现路由功能的关键所在,对应为 /proc 文件系统中的ip_forward 设置,当值为 1 时表示开启,为 0 时表示关闭。若要使用 Linux 主机作为网关设备,必然需要开启路由转发。例如,可以修改 sysctl.conf 配置文件,永久打开路由转发功能。
[root@node1 ~]# cat /etc/sysctl.conf 
...... ## 省略
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@node1 ~]# 
在测试过程中,若只希望临时开启路由转发,也可以执行以下操作。
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

或者

[root@node1 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@node1 ~]# 

(2)设置正确的SNAT策略
通过分析得知,需要针对局域网 PC 访问 Internet 的数据包采取 SNAT 策略,将源地址更改为网关的公网 IP 地址,参考以下操作在网关中设置防火墙规则。若要保持 SNAT 策略长期有效,应将相关命令写入到 rc.local 配置文件,以便开机后自动设置。
[root@node1 ~]# iptables -t nat -A POSTROUTING -s 192.168.136.131/24 -o ens33 -j SNAT --to-source 218.39.30.31
[root@node1 ~]# 

(3)测试SNAT共享接入结果
上述操作完成以后,使用局域网中的 PC 就可以正常访问 Internet 中的网站了。对于被访问的网站服务器来说,将会认为是网关主机 218.29.30.31 在访问(可观察 Web 日志获知),而并不知道实际上是企业内网的 PC 192.168.1.234 在访问。

1.2.2 共享动态IP 地址上网
在某些情况下,网关的外网 IP 地址可能并不是固定的,如使用 ADSL 宽带接入时。那么在这种网络环境下,应该如何设置 SNAT 策略呢?针对这种需求, iptables 命令提供了一个名为 MASQUERADE (伪装)的数据包控制类型, MASQUERADE 相当于 SNAT 的一个特例,同样用来修改(伪装)数据包源 IP 地址,只不过它能够自动获取外网接口的 IP 地址,而无须使用 “--to-source” 指定固定的 IP 地址。
参照上一个 SNAT 案例,若要使用 MASQUERADE 伪装策略,只需去掉 SNAT 策略中的 “--to-source IP 地址 ,然后改用 “-j MASQUERADE” 指定数据包控制类型。对于 ADSL 宽带连接,连接名称通常为 ppp0 ppp1 等。
[root@node1 ~]# iptables -t nat -A POSTROUTING -s 192.168.136.131/24 -o ppp0 -j MASQUERADE
[root@node1 ~]# 
当然,如果网关使用固定的公网 IP 地址,最好选择 SNAT 策略而不是 MASQUERADE策略,以减少不必要的系统开销。

2. DNAT策略及应用

DNATDestination Network Address Translation,目标地址转换)是 Linux 防火墙的另一种地址转换操作,同样也是 iptables 命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的目标 IP 地址和目标端口。


2.1 DNAT 策略概述

DNAT 策略与 SNAT 非常相似,只不过应用方向相反。 SNAT 用来修改源 IP 地址,而DNAT 用来修改目标 IP 地址和目标端口; SNAT 只能用在 nat 表的 POSTROUTING 链,而DNAT 只能用在 nat 表的 PREROUTING 链和 OUTPUT 链(或被其调用的链)中。
下面仍以上一节的小型企业网络为例,考虑到应用的安全和稳定性,公司将对外的网站服务器架设在一个内部网络中,如图 3.4 所示,公司对外只有一个公网 IP 地址,又需要使Internet 中的客户机能够访问公司的网站。

Internet 环境中,企业所注册的网站域名(如 www.benet.com)必须对应合法的公网 IP 地址(如 218.29.30.31)。在这种情况下,Internet 中的客户机将无法访问公司内网的服务器,除非在网关服务器中正确设置 DNAT 策略。

使用 DNAT 策略的效果如下:当 Internet 中的客户机提交的 HTTP 请求到达企业的网关服务器时,网关首先判断数据包的目标地址和目标端口,若发现该数据包需要访问本机的80 端口,则将其目标 IP 地址(如 218.29.30.31)修改为内网中真正的网站服务器的 IP 地址(如 192.168.1.6),然后才发送给内部的网站服务器,如图 3.5 所示。

 在上述 DNAT 转换地址的过程,网关服务器会根据之前建立的 DNAT 映射,修改返回的 HTTP 应答数据包的源 IP 地址,最后再返回给 Internet 中的客户机。Internet 中的客户机并不知道企业网站服务器的真实局域网地址,中间的转换完全由网关主机完成。通过设置恰当的 DNAT 策略,企业内部的服务器就可以面向 Internet 提供服务了。


2.2 DNAT策略的应用

DNAT 的典型应用是在 Internet 中发布企业内部的服务器,处理数据包的切入时机是在路由选择之前(PREROUTING)进行。关键操作是将访问网关外网接口 IP 地址(公有地址)的数据包的目标地址修改为实际提供服务的内部服务器的 IP 地址(私有地址)
使用 iptables 命令设置 DNAT 策略时,需要结合 “--to-destination IP 地址 ”选项来指定内部服务器的 IP 地址(如 -j DNAT --to-destination 218.29.30.31)。下面将通过两个实例来说明 DNAT 策略的用法。

2.2.1  发布企业内部的Web服务器
案例环境如图 3.4 所示,需求描述如下。
  • 公司注册的网站域名为 www.benet.comIP 地址为 218.29.30.31(网卡 ens33)。
  • 公司的网站服务器位于局域网内,IP 地址为 192.168.1.6
  • 要求能够从 Internet 中通过访问 www.benet.com 来查看公司的网站内容。 

根据上述环境,推荐的操作步骤如下。

(1)打开网关的路由转发
[root@node1 ~]# cat /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@node1 ~]# 

 (2)正确设置DNAT策略

通过分析得知,需要针对 Internet 中的任意主机访问网关 80 端口的数据包,将目标地址修改为位于内网的网站服务器的 IP 地址,网关的防火墙参考规则如下所示。
[root@node1 ~]# iptables -t nat -A PREROUTING -i ens33 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.201.131
[root@node1 ~]# 

(3)测试DNAT发布结果
在网站服务器 192.168.1.6 中正确配置、启动 Web 服务,并提供测试网页,如在首页文件 index.html 中加入 “Here is 192.168.1.6” 的识别标记。然后通过 Internet 中的客户机访问网站 http://www.benet.com (如果没有做 DNS 解析,也可以直接访问 http://218.29.30.31或者直接通过绑 host 方式实现),在浏览器中看到的将会是实际由网站服务器 192.168.1.6提供的页面内容。

2.2.2 发布企业内部的 OpenSSH服务器
大多数情况下, DNAT 策略只是用来修改数据包的目标 IP 地址,但在需要时也可以修改目标端口号。例如,在图 3.4 所示的案例结构中,为了方便服务器的远程管理,网关、网站服务器都配置了 OpenSSH 服务,分别授权给不同的用户从 Internet 远程登录。
在这种情况下,需要通过同一个公网 IP 地址 218.29.30.31 发布位于多台主机中的同一种服务,为了避免发生冲突,就必须从端口上进行区分。案例环境如图 3.4 所示,需求描述如下。
  • 网关的公网 IP 地址为 218.29.30.31,在 2345 端口启用 OpenSSH 服务。
  • 网站服务器位于局域网内,IP 地址为 192.168.1.6,在 22 端口启用 OpenSSH 服务。要求能够从 Internet 中远程管理网关服务器和网站服务器,访问 218.29.30.31 的 2345端口时对应网关服务器,而访问 218.29.30.31 2346 端口时对应网站服务器。
上述需求中,通过公网 IP 地址 218.29.30.31 2345 2346 端口分别提供服务,均未
使用默认的 22 端口,安全性要更好一些。推荐的操作步骤如下。

(1)配置OpenSSH服务
在网关、网站服务器中均开启 OpenSSH 服务,分别使用 2345 22 端口。其中网关的
sshd 服务因直接面向 Internet ,因此不使用默认端口。

  (2)打开网关的路由转发
[root@node1 ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl -p

  (3) 正确设置DNAT策略
通过分析得知,网关本机的 sshd 服务直接面向 Internet,因此不需要地址转换,但网站服务器位于内网,必须通过 DNAT 策略进行发布。在网关中设置防火墙规则,修改访问外网 IP 地址 2346 端口的数据包,将目标地址改为 192.168.1.6 ,将目标端口改为 22,以便转发给网站服务器。
[root@node1 ~]# iptables -t nat -A PREROUTING -i ens33 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.201.131:22
[root@node1 ~]# 

(4)测试DNAT发布结果
前述步骤完成以后,可以在 Internet 中进行 SSH 登录测试。例如,可以使用 Linux 客户机,通过 ssh 命令分别访问 218.29.30.31 2345 2346 端口,观察登录情况。

3. 规则的导入、导出

Linux 系统中, iptables 为我们提供了批量备份与恢复规则的命令,也提供了标准的系统服务以便开启、关闭防火墙功能。

3.1 规则的备份及还原

防火墙规则的批量备份、还原用到两个命令,即 iptables-save iptables-restore,分别用来保存( Save 恢复( Restore)。

3.1.1 iptables-save 命令
iptables-save 命令用来批量导出 Linux 防火墙规则。直接执行 iptables-save 命令时,将显示出当前启用的所有规则。
[root@node1 ~]# iptables-save
# Generated by iptables-save v1.4.21 on Fri Dec 29 10:06:31 2023
*mangle
:PREROUTING ACCEPT [1161:92458]
:INPUT ACCEPT [1161:92458]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [723:64195]
:POSTROUTING ACCEPT [756:69795]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Fri Dec 29 10:06:31 2023
# Generated by iptables-save v1.4.21 on Fri Dec 29 10:06:31 2023
*nat
:PREROUTING ACCEPT [3:687]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [14:1064]
:POSTROUTING ACCEPT [14:1064]
-A PREROUTING -d 218.29.30.31/32 -i ens33 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.201.131
-A PREROUTING -d 218.29.30.31/32 -i ens33 -p tcp -m tcp --dport 2346 -j DNAT --to-destination 192.168.201.131:22
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
......
iptables-save 命令的输出信息中,以 “#” 号开头的内容表示注释, “* 表名 ”表示所在的表, “: 链名 默认策略 表示相应的链及默认策略,具体的规则部分省略了命令名 “iptables”,后面的 “COMMIT” 表示提交前面的规则设置。
由于 iptables-save 命令只是把规则内容输出到屏幕上,因此当需要保存为固定的文件时,还应该结合重定向输出的操作以完成备份。例如,若要将当前已设置的所有防火墙规则备份为 /opt/iprules_all.txt 文件,可以执行以下操作。
[root@node1 ~]# iptables-save > /opt/iprules_all.txt   ###备份所有表的规则

3.1.2  iptables-restore 命令
iptables-retore 命令用来批量导入 Linux 防火墙规则,如果已经使用 iptables-save 命令导出的备份文件,则恢复规则的过程在一瞬间就能完成。与 iptables-save 命令相对的ptables-restore 命令应结合重定向输入来指定备份文件的位置。
[root@node1 ~]# iptables-restore < /opt/iprules_all.txt   ###从备份文件恢复规则

3.2 使用iptables服务

通过名为 iptables 的系统服务,可以快速启用、清空防火墙规则。 iptables 服务使用的规则文件位于 /etc/sysconfig/iptables 文件中,配置格式与 iptables-save 命令输出的一致。

3.2.1 自动启用防火墙规则
在服务器中调试好各种 iptables 规则以后,使用 iptables-save 备份为默认的规则配置文件 /etc/sysconfig/iptables ,然后就可以通过 iptables 服务来调用。例如,执行以下操作将保存当前的防火墙规则,并设置在每次开机后根据已保存的规则内容自动进行重建。
[root@node1 ~]# iptables-save > /etc/sysconfig/iptables
[root@node1 ~]# systemctl enable iptables
[root@node1 ~]# systemctl list-unit-files | grep iptables
iptables.service                              enabled 
[root@node1 ~]# 
当需要启用 /etc/sysconfig/iptables 文件中的规则设置时,只需要启动 iptables 服务即可。
[root@node1 ~]# systemctl start iptables  ## 启动防火墙服务
[root@node1 ~]# service iptables start
Redirecting to /bin/systemctl start iptables.service
## 也支持service iptables start 方式启动,实际上还是跳转到了systemctl 方式

3.2.2 清空所有防火墙规则
在调试各种防火墙规则的过程中,为了排除其他规则的干扰,有时候需要清空某些表的规则。当需要一次清空所有表的规则时,停用 iptables 服务是最快捷的方法,也是最彻底的方法。
[root@node1 ~]# systemctl stop iptables.service 
[root@node1 ~]# systemctl status iptables.service 
● iptables.service - IPv4 firewall with iptablesLoaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)Active: inactive (dead) since 五 2023-12-29 10:15:39 CST; 6s agoProcess: 2575 ExecStop=/usr/libexec/iptables/iptables.init stop (code=exited, status=0/SUCCESS)Main PID: 631 (code=exited, status=0/SUCCESS)12月 29 09:40:52 node1 systemd[1]: Starting IPv4 firewall with iptables...
12月 29 09:40:52 node1 iptables.init[631]: iptables: Applying firewall rules: [  确定  ]
12月 29 09:40:52 node1 systemd[1]: Started IPv4 firewall with iptables.
12月 29 10:15:39 node1 systemd[1]: Stopping IPv4 firewall with iptables...
12月 29 10:15:39 node1 iptables.init[2575]: iptables: Setting chains to policy ACCEPT: mangle nat filter [  确定  ]
12月 29 10:15:39 node1 iptables.init[2575]: iptables: Flushing firewall rules: [  确定  ]
12月 29 10:15:39 node1 systemd[1]: Stopped IPv4 firewall with iptables.
[root@node1 ~]# 

4. 使用防火墙脚本

本章介绍防火墙脚本的应用,防火墙脚本实际上是一个 Shell 脚本程序。

4.1 防火墙脚本的构成

防火墙脚本的优势是便于使用 Shell 变量、程序控制逻辑,另外其作为独立的文件在需要重用、移植使用时会非常方便,这也是作为 Shell 脚本的强大之处。
常见的 Linux 防火墙脚本中,通常包括变量定义、模块加载、 /proc 调整、规则设置等
多个部分(过于简化的脚本可能仅包括规则设置部分),下面分别进行介绍。

4.1.1 定义基本变量
将防火墙的网卡、 IP 地址、局域网段、 iptables 命令的路径等定义为变量,便于对脚本程序的维护和移植使用,特别是当规则较多的时候。一旦网络环境发生变化(如公网 IP 地址变更),只需对变量值稍做修改就可以投入使用了。
[root@node1 ~]# vim /opt/myipfw.sh  //创建脚本文件
#!/bin/bash                          
INET_IF= "ens33"                    //外网接口
INET_IP= "218.29.30.31"             //外网接口地址    
LAN_IF= "ens37"                     //内网接口   
LAN_IP= "192.168.1.1"               //内网接口地址
LAN_NET= "192.168.1.0/24"           //内网网段
LAN_WWW_IP= "192.168.1.6"           //网站服务器的内部地址
IPT= "/sbin/iptables"               //iptables 命令的路径
MOD= "/sbin/modprobe"               //modprobe 命令的路径
CTL= "/sbin/sysctl"                 //sysctl 命令的路径
设置好相关的变量以后,在后续的脚本内容中就可以直接引用了。为了提高脚本代码的可读性,除了添加必要的注释之外,变量名称最好使用有一定含义的字符串。

4.1.2 加载内核模块
CentOS 7.3 系统中, iptables 命令的大部分模块都可以根据需要动态载入内核,只有个别模块需要手动进行加载(如与 FTP 发布相关的 ip_nat_ftp 、ip_conntrack_ftp)。但如果需要启用的规则数量较多,为了提高规则设置的效率,保持防火墙的稳定性,建议将用到的各种模块提前加载到内核中。
$MOD ip_tables   //iptables 基本模块
$MOD ip_conntrack   //连接跟踪模块
$MOD ipt_REJECT   //拒绝操作模块
$MOD ipt_LOG   //日志记录模块
$MOD ipt_iprange   //支持 IP 范围匹配
$MOD xt_tcpudp   //支持 TCP、UDP 协议
$MOD xt_state   //支持状态匹配
$MOD xt_multiport   //支持多端口匹配
$MOD xt_mac   //支持 MAC 地址匹配
$MOD ip_nat_ftp   //支持 FTP 地址转换
$MOD ip_conntrack_ftp   //支持 FTP 连接跟踪

4.1.3 调整/proc 参数
/proc Linux UNIX 系统中的一种伪文件系统机制,提供了访问内核运行结构、改变内核设置的实时数据。与 EXT3 FAT32 等本地文件系统不同, /proc 中的数据存放在内存中而不是硬盘上。
在文件夹 /proc/sys 下存放着与系统相关的一些可控参数,可以直接用来改变内核的行为,通常作为 Linux 内核调优的实时入口。其中包括是否打开 IP 转发、是否响应 ICMP 广播、设置好 TCP 响应超时等,使用 echo sysctl 命令都可以修改相关参数,当然也可以写到 /etc/sysctl.conf 文件(执行 sysctl -p 后生效)。
下面仅列出常用的几个 /proc 参数调整,更多细节、调优操作此处不做过多介绍。
$CTL -w net.ipv4.ip_forward=1   //打开路由转发功能
$CTL -w net.ipv4.ip_default_ttl=128   //修改 ICMP 响应超时
$CTL -w net.ipv4.icmp_echo_ignore_all=1   //拒绝响应 ICMP 请求
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts   //拒绝响应 ICMP 广播
$CTL -w net.ipv4.tcp_syncookies=1   //启用 SYN Cookie 机制
$CTL -w net.ipv4.tcp_syn_retries=3   //最大 SYN 请求重试次数
$CTL -w net.ipv4.tcp_synack_retries=3   //最大 ACK 确认重试次数
$CTL -w net.ipv4.tcp_fin_timeout=60   //TCP 连接等待超时
$CTL -w net.ipv4.tcp_max_syn_backlog=3200   //SYN 请求的队列长度
上述脚本内容中, ICMP 相关的参数调整可使本机忽略其他主机的 ping 测试, TCP
关的内核参数调整可适当提高本机抵抗 DoS 攻击的能力。

4.1.4 设置具体的iptables规则
在脚本文件中,建议按照不同的表、链来分块组织各种防火墙规则,具体内容应根据用
户的实际需求决定。

(1)清理已有规则
为了避免已有的防火墙规则造成干扰,通常会预先安排一个 清理 操作,删除所有表中
用户自定义的链,清空所有链内的规则。
$IPT -t filter –X   //删除各表中自定义的链
$IPT -t nat -X
$IPT -t mangle -X
$IPT -t raw -X
$IPT -t filter –F   //清空各表中已有的规则
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t raw -F

(2)设置规则链的默认策略
在实际生产环境中,防火墙过滤规则建议采取 默认拒绝 的策略,可以获得更好的安全
性。这就要求我们充分熟悉相关应用服务、网络协议,才能够识别合法数据包,制定出既防护严格又行之有效的防火墙方案。
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
学习过程中建议采用 默认允许 的策略,将默认策略中的 DROP 改为 ACCEPT ,以免
在使用不完整的防火墙脚本时引起网络故障。

(3)设置nat表中的各种规则
iptables nat 表主要用在 Linux 网关服务器中,一般的主机型防火墙方案很少会用到nat 表。根据实际情况编写相应的 SNAT DNAT 规则(如局域网共享上网、发布内部 Web服务器),如果没有则跳过此部分。
$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-dest
ination $LAN_WWW_IP

(4)设置filter表的各种规则
iptables filter 表主要用来过滤数据包,无论是 Linux 网关还是一般的 Linux 服务器都可能用到。主机型的防火墙主要使用 INPUT OUTPUT 链,而对于网络型的防火墙主要使用 FORWARD 链。
 以 Linux 网关为例,在 默认拒绝 的前提下,若要实现共享上网,除了正常的 SNAT 策略以外,还需要放行内网 PC Internet DNS Web FTP 等服务的通信。
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 20:21 -j ACCEPT
$IPT -A FORWARD -d $LAN_NET -i $INET_IF -m state --state ESTABLISHED, RELATED
-j ACCEPT
......
需要说明的是,在实际应用过程中,不要过于生硬地照搬他人脚本内容,应根据实际情况进行有针对性的设计,并做好整体测试,避免因规则不当而导致网络通信故障。
脚本文件编写完成以后,为其添加 “x”可执行权限,就可以用来批量设置防火墙规则了。若要使脚本文件在每次开机后自动运行,可以将脚本路径写入 /etc/rc.local 文件中。
[root@node1 ~]# chmod +x /opt/myipfw.sh //添加执行权限
[root@node1 ~]# /opt/myipfw.sh //执行脚本文件
[root@node1 ~]# iptables -nL FORWARD //查看部分防火墙规则
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 192.168.1.0/24 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpts:20:21
ACCEPT all -- 0.0.0.0/0 192.168.1.0/24 state RELATED,ESTABLISHED

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB 概念介绍

1、MongoDB 应用场景 传统的关系型数据库&#xff0c;在数据操作的"三高"需求以及应对Web2.0的网站需求面前&#xff0c;显得力不从心。 High performance -对数据库高并发读写的需求。Huge Storage -对海量数据的高效率存储和访问的需求。High Scalability &&…

Java核心知识点1-java和c++区别、隐式和显示类型转换

java和c区别 java通过虚拟机实现跨平台特性&#xff0c;但c依赖于特定的平台。java没有指针&#xff0c;它的引用可以理解为安全指针&#xff0c;而c和c一样具有指针。java支持自动垃圾回收&#xff0c;而c需要手动回收。java不支持多重继承&#xff0c;只能通过实现多个接口来…

C++进阶--二叉树进阶(二叉搜索树)

二叉树进阶&#xff08;二叉搜索树&#xff09; 一、二叉搜索树1.1 二叉搜索树的概念 二、二叉搜索树的结构2.1 结点结构2.2 树结构 三、二叉搜索树的操作&#xff08;非递归&#xff09;3.1 二叉搜索树的插入3.2 二叉搜索树的查找3.3 二叉搜索树的中序遍历3.4 二叉搜索树的删除…

c++学习笔记-提高篇-STL-函数对象

目录 一、函数对象 二、函数对象使用 三、谓词 1、概念 2、一元谓词 3、二元谓词 插入一条sort函数源码 四、内建函数对象 1.基本概念 2、算数仿函数 3、关系仿函数 4、逻辑仿函数 一、函数对象 函数对象概念 &#xff08;1&#xff09;重载函数调用操作符的类&a…

WPF+Halcon 培训项目实战(11):HS组件封装

文章目录 前言相关链接项目专栏运行环境匹配图片封装组件新增类库项目选择依赖顺序并添加Nuget修改原本矩形方法运行结果&#xff1a; 对矩形进行抽象封装抽象基类矩形抽象改造 圆形抽象封装代码运行结果 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固定…

harmonyOS Column组件通过space属性设置内部元素间距

例如 我们代码如下 import router from ohos.router Entry Component struct Index {build() {Row() {Column() {Text("年后")Text("一起")Text("旅游")}.width(100%)}.height(100%)} }运行之后 元素都粘连到一起 显然不太好看 我们就可以通过…

PM大逃亡

欢迎来到程序小院 PM大逃亡 玩法&#xff1a;点击白色的小鬼&#xff0c;滑动鼠标移动&#xff0c;不要碰到黑色的怪物&#xff0c; 怪物会越来越多&#xff0c;看看你能坚持多久&#xff0c;快去大逃亡吧^^。开始游戏https://www.ormcc.com/play/gameStart/233 html <div…

分享Python采集40个NET整站程序源码,总有一款适合您

分享Python采集40个NET整站程序源码&#xff0c;总有一款适合您 Python采集的40个NET整站程序源码下载链接&#xff1a;https://pan.baidu.com/s/1z54JHJkFYa4Kx2oBtPrn_w?pwd2ta4 提取码&#xff1a;2ta4 商品评论网站系统 小孔子内容管理系统XkCms V2.0 友间别墅整站程…

【win10】解决重装系统后笔记本无法调节亮度的问题

问题描述 笔记本重装系统后发现之前的fn快捷键调节亮度的功能無了&#xff0c;检查过后发现n卡控制面板&#xff0c;电源选项这些能调节屏幕亮度的地方一个都不行。笔记本一直是最强亮度非常伤眼睛。 问题分析 重装系统后发生这种情况大概率是因为之前的显卡驱动没了&#…

【rar转zip】如何将rar文件轻松转换成zip

今天和大家分享三个rar压缩包改成zip格式的方法&#xff0c;希望能够帮助到大家&#xff01; 方法一&#xff1a; 直接修改rar压缩包的后缀名变为zip&#xff0c;就可以修改压缩包文件格式了 方法二&#xff1a; 先将rar压缩包解压出来&#xff0c;然后再将解压出的文件进行…

【MATLAB】BiGRU神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 BiGRU神经网络时序预测算法是一种基于双向门控循环单元&#xff08;GRU&#xff09;的多变量时间序列预测方法。该方法结合了双向模型和门控机制&#xff0c;旨在有效地捕捉时间序列数据中…

git 常用操作合集

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

CCSK认证:开启云安全领域的黄金大门

&#x1f31f;你是否对云安全领域充满热情&#xff1f;是否希望提升自己在云安全领域的专业性和竞争力&#xff1f;CCSK认证是你的不二之选&#xff01; &#x1f525;CCSK简介&#xff1a; CCSK是国际云安全联盟&#xff08;Cloud Security Alliance&#xff0c;CSA&#xff…

【前端基础】——原型与原型链详解,看一篇即可【图文版】

前言 本文旨在通过图文的方式&#xff0c;一步步回顾原型链的整个流程是如何运作的&#xff0c;如果你刚好在电脑旁边&#xff0c;不妨跟着我的思路&#xff0c;一起走一遍敲一遍代码流程&#xff0c;你会发现原型链并没有你想的那么复杂。 new关键字 我们先看这一个代码&am…

RIS 系列 See-Through-Text Grouping for Referring Image Segmentation 论文阅读笔记

RIS 系列 See-Through-Text Grouping for Referring Image Segmentation 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 Semantic Segmentation and Embeddings3.2 Referring Expression Comprehension3.3 Referring Image Segmentation 四、方法4.1 视觉表示4.2 文本表示…

【yolofastest上手】

一、前言 yolofastest网上资料比较少&#xff0c;也没有视频教学&#xff0c;所以想要使用参考了很多资料&#xff0c;只能说各资料都不尽全&#xff0c;让刚接触的小白无从下手。 参考资料: github地址 yolo-fastest 快速上手 修改参数遇到的问题 能在ARM-CPU上实时识别图像的…

销售转行上位机编程:我的学习与职业经历分享

同学们好&#xff0c;我是杨工&#xff0c;原先是一名销售。 通过在华山编程培训中心学习&#xff0c;成功转行上位机编程&#xff0c;对此我想分享学习和职业经历。 在职业生涯的早期&#xff0c;我并没有考虑将技术融入到我的工作中。然而&#xff0c;在几次创业的失败后&a…

{MySQL}索引事务和JDBC

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次&#xff0c;继续讲下MySQL 提示&#xff1a;以下是本篇文章正…

Jmeter吞吐量控制器总结

吞吐量控制器(Throughput Controller) 场景&#xff1a; 在同一个线程组里, 有10个并发, 7个做A业务, 3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现。 添加吞吐量控制器 用法1: Percent Executions 在一个线程组内分别建立两个吞吐量控制器, 分别放业务A和业务B …