运维安全05,iptables规则保存与恢复

一:网络安全

1.1、昨日功能优化

配置后引发的问题:

配置iptables后防火墙起到了防护作用,但使用127.0.0.1访问不了数据库了

[root@localhost /]# mysql -u admin -p -h 127.0.0.1
Enter password:

思考:如果使用localhost可以访问吗? 是什么原因?

localhost127.0.0.1 的区别

  • localhost:通常被解析为127.0.0.1,但它的访问方式不使用网卡,不受防火墙和网卡限制。它通过内存中的套接字(socket)进行通信。

  • 127.0.0.1:是一个具体的IP地址,访问时会通过网卡传输数据,受防火墙和网卡设置的限制。

当设置了iptables规则后,这些规则可能会影响网络流量,特别是针对特定IP地址或端口的流量。

  • 使用127.0.0.1无法登录:

    • 当您尝试通过127.0.0.1连接MySQL时,数据包会通过网卡发送,并受到iptables规则的检查。如果iptables规则中包含了阻止127.0.0.1访问MySQL端口(通常是3306)的规则,那么连接就会被拒绝。

  • 使用localhost可以登录:

    • 使用localhost连接MySQL时,数据不会通过网卡传输,而是直接在内存中通过套接字进行通信,因此不受iptables规则的影响。这样即使iptables有阻止127.0.0.1的规则,也不会影响到localhost的连接。

配置iptables解决问题:

[root@localhost /]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost /]# iptables -A OUTPUT -o lo -j ACCEPT
​# 查看规则
[root@localhost /]# iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes) 
pkts bytes target     prot opt in     out     source 
destination         
1153 68876 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22   
4   176 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80   
0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           ​Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) 
pkts bytes target     prot opt in     out     source               
destination         
​Chain OUTPUT (policy DROP 0 packets, 0 bytes) 
pkts bytes target     prot opt in     out     source               destination        630 49672 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp spt:22  
24  1056 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0                      tcp spt:80   
0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0   

iptables -A INPUT -i lo -j ACCEPT

允许所有从本地回环接口(lo)进入本机的网络流量。简单来说,就是让本机可以接收来自自己内部的服务请求。

iptables -A OUTPUT -o lo -j ACCEPT

允许所有通过本地回环接口(lo)向外发送的网络流量。也就是说,让本机能正常回应自己内部发出的请求。

再次测试mariadb

[root@localhost /]# mysql -u admin -p -h 127.0.0.1
Enter password: 
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>

1.2、规则的保存与恢复

配置的防火墙规则如果不保存,在重启之后规则需要重新配置,规则的保存命令如下:

# 将规则保存到etc/iptables-script
[root@localhost ~]# iptables-save > /etc/iptables-script# 恢复规则
[root@localhost ~]# iptables-restore /etc/iptables-script

1.3、安全加固

配置 MariaDB 以允许远程主机访问数据库服务,并通过防火墙规则进一步限制只有特定 IP 范围的客户端可以访问。

# 配置mariadb允许远程访问
MariaDB [mysql]> grant all privileges on *.* to 'admin'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

此操作虽然开放了远程访问权限,但并没有限制具体的访问源 IP。

如果仅需要特定 IP 可以访问,应将 % 替换为具体的 IP 或子网(如 'admin'@'192.168.114.0/24'

# 配置防火墙规则,允许访问3306
[root@localhost ~]# iptables -A INPUT -p tcp --dport 3306 -m iprange --src
-range 192.168.114.100-192.168.114.150 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 3306 -m iprange--dst-range 192.168.114.100-192.168.114.150 -j ACCEPT

iptables -A INPUT -p tcp 允许指定 IP 范围访问 MariaDB 端口(3306)

iptables -A OUTPUT -p tcp 允许 MariaDB 向指定 IP 范围发送响应数据

注意事项

  1. 最小权限原则:不要随意使用 GRANT ALL PRIVILEGES,应根据实际需求授予最小权限。

  2. IP 白名单限制:尽量避免使用 admin@%,改为使用 admin@192.168.114.0/24 等方式限制具体来源。

  3. 保存防火墙规则:执行完 iptables 命令后,使用 service iptables saveiptables-save > /etc/iptables/rules.v4 保存规则,防止重启后失效。

1.4、状态过滤

状态过滤(Stateful Packet Inspection,SPI)是一种防火墙技术,它不仅检查数据包的头部信息(如源IP、目标IP、端口号等),还会跟踪和维护连接的状态信息。

通过这种方式,它可以更智能地判断数据包是否合法,从而提高安全性。

假设已经配置了以下基本的 iptables 规则:

# 允许 80 端口的入站(INPUT)流量
iptables -A INPUT -p tcp --dport 80 -j ACCEPT# 允许 80 端口的出站(OUTPUT)流量
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT# 默认拒绝所有其他入站流量
iptables -P INPUT DROP
iptables -P OUTPUT DROP

思考配置存在的问题

步骤数据方向源 IP:端口目标 IP:端口
1. 请求发起客户端 → 服务器192.168.1.10:54321203.0.113.45:80
2. 响应返回服务器 → 客户端203.0.113.45:80192.168.1.10:54321

但这只是“无状态”的规则 —— 它不会区分这个流量是否是主动发起连接后返回的响应

情况:A服务器不能远程访问其他服务器资源

A服务器主动连接C服务器

  • A服务器 主动向 C服务器 的 80 端口发起HTTP请求。

  • 源端口 是 5623(一个非特权端口),目标端口 是 80

  • 连接被 拒绝。

问题:

  • iptables 规则中,只允许目标端口为 80 的入站流量,但没有明确允许从 A服务器 发起的出站流量。

  • 因此,即使 A服务器 使用非特权端口(如 5623)发起请求,这个连接也会被默认的 DROP 策略拒绝。

那能不能将5623设置为开放呢? 同学们请思考:

当服务器(或客户端)主动发起一个 TCP 连接时(比如访问网页、API 等),它会使用一个 临时非特权端口(ephemeral port)作为源端口。

这些端口通常在 Linux 上是范围在 32768 到 60999 或 49152 到 65535 之间(不同系统略有差异)。

所以每次建立新连接时,源端口都可能是不同的,而且是非特权端口。

如果想让从A服务器主动发起访问外部 80 端口的服务,并能接收到响应

# 允许主动发起访问远程 80 端口的请求
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT# 允许远程服务器返回给的响应数据包进来
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
[ 本地程序 ]
|
| 使用 TCP 协议发起请求
| 源地址: 192.168.1.10:5623
| 目标地址: 203.0.113.45:80
v
[ OUTPUT 链 - 出站规则 ]
|
| 检查 iptables 规则:
| -A OUTPUT -p tcp --dport 80 -j ACCEPT
| 匹配目标端口为 80 → 放行
v
[ 发送请求到远程服务器 ]
|
| 数据包到达远程 Web 服务器
| Web 服务器处理请求并准备返回响应
v
[ 远程 Web 服务器发送响应 ]
|
| 源地址: 203.0.113.45:80
| 目标地址: 192.168.1.10:5623
v
[ INPUT 链 - 入站规则 ]
|
| 检查 iptables 规则:
| -A INPUT -p tcp --sport 80 -j ACCEPT
v
[ 响应数据包交付给本地程序 (端口 5623) ]

情况:A服务器不能ping其他服务器 (同理)

情况:B服务器与A服务器之间的正常通信

B服务器 向 A服务器 的 80 端口发起请求,源端口 是 6534

A服务器 响应 B服务器,源端口 是 80,目标端口 是 6534

连接成功(绿色箭头)。

情况:黑客可以通过自己的80端口,连接A服务器中的一个随机端口

当从 A 服务器访问一个 Web 服务器(如 B 服务器的 http://b.example.com:80),通信过程如下:

步骤数据包方向源端口目标端口
1. A 发起请求A → B随机非特权端口(如 54321)80
2. B 返回响应B → A8054321

当我们在上面设置针对80的过滤规则之后,就会出现问题

  1. IP欺骗:黑客构造一个TCP/IP数据包,并将该数据包的源IP地址设置为目标服务器信任的另一台服务器的IP地址。这样做的目的是让目标服务器误以为收到的数据包是来自一台它信任的机器。

  2. 端口伪装攻击:在上述的基础上,黑客进一步将源端口设为80(HTTP服务的默认端口)或其它常见的、被允许通过防火墙的服务端口。许多网络管理员会开放这些端口以确保正常的服务通信,但这同样可能成为攻击者的入口。

  3. 绕过防火墙规则:如果防火墙规则配置不当,例如仅基于目的端口(--dport)或者源端口(--sport)进行过滤,而没有考虑连接的状态或其他安全策略,那么黑客就有可能通过这种方式发送恶意流量并成功绕过防火墙限制。

1、处理方案:tcp协议标记位

使用tcp协议的标记位,阻止从外部进来的第一次握手请求

[root@localhost ~]# iptables -I INPUT -p tcp -m tcp --sport 80 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j DROP# 简化写法,只检查SYN标记位
[root@localhost ~]# iptables -I INPUT -p tcp -m tcp -sport 80 --sync -j DROP# 但这样做也是有问题的,比如协议时UDP是没有标记位的,无法通过标记位去判断来自外部的第一次请求

TCP 是面向连接的协议,通信前需要建立连接,过程如下:

  1. 客户端 → 服务端:SYN(同步标志位)=1

  2. 服务端 → 客户端:SYN=1, ACK=1

  3. 客户端 → 服务端:ACK=1

所以:

  • 第一次握手:只有 SYN=1

  • 后续才是 SYN+ACKACK

如果黑客试图伪装成 Web 服务器,主动发起连接(比如想攻击本地的 SSH、MySQL 等服务),他会发送一个 SYN 包,源 IP 和源端口伪造为可信服务器的 80 端口。

通过上面的规则:

  • 只拦截 SYN 请求(也就是“主动发起连接”的请求)

  • 不影响正常的响应流量(因为正常响应是 SYN,ACK 或者只是 ACK

这样就能有效防止黑客伪装成 Web 服务器发起连接请求。

UDP 没有 TCP 的标记位,所以不能使用 --syn 这类判断。

UDP 是无连接协议,没有三次握手,所以这类规则对 UDP 无效。

有些合法服务可能会从源端口 80 发起连接,如果不加区分地丢弃所有来自源端口 80 的 SYN 请求,可能会导致某些正常连接失败。

2、处理方案:state扩展

对于静态的无状态的防火墙,将每个数据包都看作是独立的数据包,并不知道数据包之间的关系,

使用 state扩展,可以分析出数据包之间的关系,不再将每个数据包只看做孤立的,

所以使用了state扩展后 netfilter可以用作有状态防火墙,相对于无状态防火墙,有状态防火墙可以定义更加精准的过滤条件。

state说明
NEW新创建连接的数据包。这是指那些试图建立新连接的初始数据包,通常包含TCP三次握手的第一个SYN包。
ESTABLISHED已连接状态下的数据包。这些是已经成功建立连接后,在连接中传输的数据包,包括正常的数据交换和ACK确认等。
RELATED新建的,且与现有连接相关的数据包,典型的如ICMP数据包,FTP数据传输数据包。这类数据包虽然不是直接属于某个已建立的连接,但与之相关联,例如FTP的控制连接和数据连接、ICMP错误消息等。
INVALID没有与现有连接相关的数据,像一匹孤狼,直接DROP。这类数据包无法被识别为任何已知连接的一部分,可能是由于网络错误、攻击或配置问题导致的无效数据包,通常会被丢弃以防止潜在的安全威胁。

NEW:当一个数据包试图建立一个新的连接时,它会被标记为NEW。例如,当使用浏览器访问一个网站时,计算机发送的第一个SYN包就是NEW状态。

ESTABLISHED:一旦连接成功建立,后续在这个连接中传输的所有数据包都会被标记为ESTABLISHED。这包括从网站下载的数据、向网站发送的请求等。

RELATED:有些数据包虽然不是直接属于某个已建立的连接,但与之相关联。例如,当使用FTP下载文件时,除了控制连接外,还会有一个数据连接用于实际的数据传输,这个数据连接的数据包就会被标记为RELATED。再比如,ICMP错误消息也是与某个已建立的连接相关的,因此也会被标记为RELATED

INVALID:如果一个数据包无法被识别为任何已知连接的一部分,它就会被标记为INVALID。这种情况可能是由于网络错误、攻击或配置问题导致的。为了安全起见,这类数据包通常会被直接丢弃(DROP)。

使用state扩展来配置防火墙

配置之前,无法ping外部主机

[root@localhost ~]# ping 192.168.114.1
PING 192.168.114.1 (192.168.114.1) 56(84) bytes of data.
ping: sendmsg: 不允许的操作
ping: sendmsg: 不允许的操作

结果显示 ping 操作被拒绝,提示“不允许的操作”。这表明当前的网络策略或防火墙设置阻止了 ICMP 请求。

无法访问外部 web 服务

这个执行之前请去除源端口80规则(讲解A-C的时候设置的)

[root@localhost ~]# wget www.baidu.com--2021-08-18 17:16:26--  http://www.baidu.com/
正在解析主机 www.baidu.com (www.baidu.com)... 失败:未知的名称或服务。wget: 无法解析主机
地址 “www.baidu.com”

配置 state 扩展

[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

这里添加了两条 iptables 规则来配置状态扩展模块:

INPUT 链规则:允许所有已建立(ESTABLISHED)和相关联(RELATED)的入站数据包通过。

这意味着任何与现有连接相关的数据包都会被接受,例如响应数据包、ICMP 错误消息等。

OUTPUT 链规则:允许所有新建(NEW)、已建立(ESTABLISHED)和相关联(RELATED)的出站数据包通过。

这意味着新的连接请求、现有连接的数据传输以及与现有连接相关的数据包都会被接受。

配置后,验证

可以执行 ping

[root@localhost ~]# ping 192.168.114.1
PING 192.168.114.1 (192.168.114.1) 56(84) bytes of data.
64 bytes from 192.168.114.1: icmp_seq=1 ttl=128 time=0.165 ms

配置完成后,再次尝试使用 ping 命令访问外部 IP 地址 192.168.114.1

这次成功收到了回应,显示 ICMP 数据包已经能够正常发送和接收,说明出站和入站的 ICMP 流量已经被允许。

可以访问外部资源

[root@localhost ~]# wget www.baidu.com
--2021-08-18 17:22:34--  http://www.baidu.com/
正在解析主机 www.baidu.com (www.baidu.com)... 14.215.177.39, 14.215.177.38
正在连接 www.baidu.com (www.baidu.com)|14.215.177.39|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2381 (2.3K) [text/html]

配置完成后,再次尝试使用 wget 命令访问百度网站 www.baidu.com

这次成功解析了主机地址并建立了连接,收到了 HTTP 200 OK 响应,说明出站和入站的 HTTP 流量已经被允许,可以正常访问外部 Web 服务。

配置时需要注意规则的顺序,如果将新加的state扩展规则,放到了前面,则可能回造成远程客户机 不能访问本地web服务的问题。

nmap扫描

C:\Users\lisensir>nmap -sS -O 192.168.114.140
Starting Nmap 7.92 ( https://nmap.org ) at 2021-08-18 17:44 中国标准时间
Nmap scan report for 192.168.114.140
Host is up (0.00044s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT       STATE    SERVICE
22/tcp     open     ssh
80/tcp     closed   http
3306/tcp   closed   mysql
MAC Address: 00:0C:29:BC:31:9A (VMware)
Device type: general purpose
Running: Linux 3.x|4.x
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

更严谨一些的方式

# 1. 允许 TCP 协议、源端口为 1024-65535 的出站流量(NEW, ESTABLISHED, RELATED)
iptables -A OUTPUT -p tcp -m multiport --sports 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT# 2. 允许 UDP 协议、源端口为 1024-65535 的出站流量(NEW, ESTABLISHED, RELATED)
iptables -A OUTPUT -p udp -m multiport --sports 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT# 3. 允许 ICMP 协议的出站流量(NEW, ESTABLISHED, RELATED)
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT# 4. 允许所有已建立和相关连接的入站流量
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

第一个: 允许TCP协议的出站流量,满足以下条件:

  • 源端口在 1024 到 65535 范围内(即非特权端口,客户端常用)

  • 并且连接状态是:新建 (NEW)、已建立 (ESTABLISHED) 或相关 (RELATED)

客户端发起请求时,通常使用随机非特权端口(如浏览器访问网页、curl、wget 等),这些端口一般都在 1024~65535

  • 使用 -m multiport --sports 可以限制只放行这类客户端使用的源端口。

  • 结合状态模块,确保只放行合法的新建连接或已有连接的后续通信。

用途:允许本机主动发起 TCP 连接(如访问 Web、SSH、数据库等)

第二个: 允许UDP协议的出站流量,满足以下条件:

  • 源端口在 1024~65535

  • 连接状态是:新建、已建立或相关

解释:

  • 与第一条类似,但适用于 UDP 协议(如 DNS 查询、NTP 时间同步、VoIP 等)

  • UDP 是无连接协议,但仍可通过状态模块追踪会话

用途:允许本机主动发起 UDP 请求(如解析域名)

第三个: 允许ICMP协议(如 ping)的出站流量

  • 连接状态为:新建、已建立或相关

解释:

  • ICMP 不涉及端口,所以不需要用到 multiport 模块

  • 放行 ICMP 流量是为了允许执行 pingtraceroute 等网络诊断命令

用途:允许本机使用 ping 和 traceroute 等工具测试网络连通性

第四个: 允许所有已建立连接和相关连接的入站流量

解释:

  • 这是最关键的一条安全规则!

  • 当服务器主动发起一个请求(如访问某个网站、更新系统包),远程服务器会返回响应数据包,这些响应包进入服务器时走的是 INPUT 链。

  • 如果不放行这些响应数据包,就收不到任何回复。

  • 使用状态模块可以自动识别哪些是“自己发起的连接”的返回数据包,并安全地放行它们。

用途:让服务器能正常接收自己请求的响应(比如 curl 返回结果)

二:FTP的防火墙配置

FTP分为主动模式和被动模式。

在主动模式下ftp服务器防火墙配置

# 允许入站的TCP连接到端口21(FTP控制端口),状态为NEW或ESTABLISHED时接受
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT# 允许出站的TCP连接,源端口为21,目标端口在1024-65535之间,状态为ESTABLISHED时接受
iptables -A OUTPUT -p tcp --sport 21 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT# 允许入站的TCP连接到端口20(FTP数据端口),状态为ESTABLISHED时接受
iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT# 允许出站的TCP连接,源端口为20,目标端口在1024-65535之间,状态为NEW或ESTABLISHED时接受
iptables -A OUTPUT -p tcp --sport 20 --dport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

功能:允许入站的TCP连接到端口21(FTP控制端口)。

说明:当客户端尝试与FTP服务器建立新的连接(NEW)或者已经建立了连接(ESTABLISHED)时,允许这些连接通过防火墙。这是为了确保客户端能够成功地连接到FTP服务器并进行命令交互。

iptables -A OUTPUT -p tcp --sport 21 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

功能:允许出站的TCP连接,源端口为21,目标端口在1024-65535之间,状态为ESTABLISHED时接受。

说明:当FTP服务器响应客户端请求时,它会从端口21发送数据到客户端的高随机端口(1024-65535)。这条规则确保了这些响应数据包能够顺利通过防火墙返回给客户端。

iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

功能:允许入站的TCP连接到端口20(FTP数据端口),状态为ESTABLISHED时接受。

说明:在主动模式下,FTP服务器会使用端口20来传输数据。这条规则确保了当数据传输已经开始(ESTABLISHED)时,数据包能够顺利通过防火墙到达客户端。

iptables -A OUTPUT -p tcp --sport 20 --dport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT

功能:允许出站的TCP连接,源端口为20,目标端口在1024-65535之间,状态为NEW或ESTABLISHED时接受。

说明:在主动模式下,FTP服务器会从端口20发起新的数据传输连接(NEW)或者继续已有的数据传输(ESTABLISHED)。这条规则确保了这些数据传输连接能够顺利通过防火墙。

在设置客户端防火墙时,比较麻烦: 在入站规则中,服务器的20端口号需要对客户机的一个随机的非特权端口发起连接请求。为方便客户机设置,出现了被动模式。

在被动模式下ftp服务器防火墙配置

# 1. 允许 FTP 控制连接(端口 21)
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT# 2. 允许 FTP 被动模式使用的端口范围(5000-5100)
iptables -A INPUT -p tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 5000:5100 -m state --state ESTABLISHED -j ACCEPT# 3. 允许 FTP 主动模式下的数据连接(服务器端口 20)
iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -m state --state NEW,ESTABLISHED -j ACCEPT# 4. 允许客户端发起的数据连接(客户端使用随机非特权端口)
iptables -A INPUT -p tcp --sport 1024:65535 --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 1024:65535 --sport 20 -m state --state ESTABLISHED -j ACCEPT

2.1、连接跟踪助手(了解即可)

它是 Netfilter(即 iptables/nftables)框架下的一个模块,专门用于跟踪 FTP 协议的连接状态,尤其是被动模式下由服务器主动打开的额外数据连接。

若使用连接跟踪模块(nf_conntrack_ftp):

对于主动模式:

ftp服务器20端口号连接客户端特定端口号的第一次握手信息(SYN)将被连接跟踪模块视为相关性的 (RELATED),客户端的返回的(SYN,ACK)就是已连接(ESTABLISHED)的。

对于被动模式:

客户端主动发起连接到ftp服务器的第一次握手信息(SYN)将被连接跟踪模块视为相关性的 (RELATED),ftp服务器的返回(SYN,ACK)则为已连接的(ESTABLISHED)

[root@localhost ~]# modprobe nf_conntrack_ftp
[root@localhost ~]# modinfo nf_conntrack_ftp
filename:       /lib/modules/3.10.0-1160.15.2.e17.x86_64/kernel/net/netfilter/nf_conntrack_ftp.ko.xz
alias:          nfct-helper-ftp
alias:          ip_conntrack_ftp
description:    ftp connection tracking helper
author:         Rusty Russell <rusty@rustcorp.com.au>
license:        GPL
retpoline:      Y
rhelversion:    7.9
srcversion:     F21861D5AD43080B93CC4DD
depends:        nf_conntrack
intree:         Y
vermagic:       3.10.0-1160.15.2.e17.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        02:FB:1B:20:B0:39:E3:CD:C7:59:93:8B:A9:58:53:84:81:77:80:31
sig_hashalgo:   sha256
parm:           ports:array of ushort
parm:           loose:bool
[root@localhost ~]#

2.2、实验过程

安装vsftp服务器

停用firewalld

使用nmap扫描,查看没有设置防火墙的情况

首先设置防火墙允许22端口号,否则没法使用远程客户端

[root@localhost /]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost /]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

设置默认规则,除明确允许的端口,禁止其他所有的端口

[root@localhost /]# iptables -P INPUT DROP
[root@localhost /]# iptables -P OUTPUT DROP

  允许客户端发起到ftp服务器21命令端口号的连接

[root@localhost /]# iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED \
> -j ACCEPT -m comment --comment "ftp21命令端口"
# 允许外部客户端通过 TCP 协议访问本机的 FTP 控制端口(21),无论是新发起的连接还是已经建立的连接。[root@localhost /]# iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT \
> -m comment --comment "ftp21端口出站"
# 允许本机 FTP 服务通过 TCP 端口 21 发送响应数据包,但只允许那些属于已建立连接的流量,防止非法出站行为。

主动模式下,允许服务器从20端口发起数据连接

[root@localhost /]# iptables -A OUTPUT -p tcp --sport 20 -m state --state RELATED,ESTABLISHED \
> -j ACCEPT -m comment --comment "允许ftp20端口出站"
# 允许服务器通过端口 20 向客户端发送数据包,但只允许那些属于已有 FTP 控制连接(端口 21)
或其关联连接的数据包通过,确保安全性。[root@localhost /]# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED \
> -j ACCEPT -m comment --comment "允许ftp服务器20端口进站"
# 允许客户端通过端口 20 向服务器发送数据包,但仅限于已经建立的 FTP 连接(控制通道),从而
防止非法访问。

被动模式下,允许客户端连接ftp服务器的非特权端口

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

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

相关文章

线性代数 · 矩阵 | 秩 / 行秩 / 列秩 / 计算方法

注&#xff1a;本文为 “线性代数 矩阵 | 秩” 相关合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未全校去重。 如有内容异常&#xff0c;请看原文。 矩阵的秩及其应用 一、矩阵秩的基本概念 &#xff08;一&#xff09;k 阶子式 设矩阵 A(aij)mnA (a_{ij})_{m…

Ajax-day2(图书管理)-弹框显示和隐藏

Bootstrap 弹框图书管理-Bootsrap 弹框&#xff08;一&#xff09;属性控制一、模板代码二、弹框模板三、bootsrap 的显示弹框属性完整代码&#xff08;二&#xff09;JS 控制一、模板代码二、步骤图书管理-Bootsrap 弹框 Bootstrap 框架渲染列表&#xff08;查&#xff09;新…

【Linux网络】认识https

认识https一&#xff0c;概念铺垫1.1 什么是加密&#xff1f;1.2 为什么要加密&#xff1f;1.3 加密的方式1.4 数据摘要&数据指纹二&#xff0c;认识https2.1 方案1-只使用对称加密2.2 方案2-只使用非对称加密2.3 方案3-双方都使用非对称加密2.4 方案4-非对称加密对称加密2…

OC-AFNetworking

文章目录AFNetworking简介问题&#x1f914;优化策略解决AFNetworking局限性使用单例进行网络请求的优势使用单例进行网络请求的风险最优使用使用参数讲解POST请求AFNetworking 简介 这篇文章旨在实现使用AFNetworking设置一个集中的单通道网络对象&#xff0c;该对象与MVC组建…

【数据结构】跳表

目录 1.什么是跳表-skiplist 2.skiplist的效率如何保证&#xff1f; 3.skiplist的实现 3.1节点和成员设计 3.2查找实现 3.3前置节点查找 3.4插入实现 3.5删除实现 3.6随机层数 3.7完整代码 4.skiplist跟平衡搜索树和哈希表的对比 1.什么是跳表-skiplist skiplist是由…

html实现右上角有个图标,鼠标移动到该位置出现手型,点击会弹出登录窗口。

写了一段html代码实现的效果&#xff1a;实现右上角有个图标&#xff0c;鼠标移动到该位置出现手型&#xff0c;点击会弹出登录窗口。功能实现前端&#xff0c;没有实现后端。<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF…

STM32G4 电流环闭环(二) 霍尔有感运行

目录一、STM32G4 电流环闭环(二) 霍尔有感运行2. 霍尔有感运行附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)一、STM32G4 电流环闭环(二) 霍尔有感运行 2. 霍尔有感运行 文章使用的BLDC在定子侧以互差120电角度的位置安装三个霍尔元件Ha&#xff0c;Hb&#xff0c;Hc。当…

展示框选择

好的&#xff0c;非常感谢您提供更详细的项目情况。这是一个非常典型的父子组件通信场景。 根据您的新需求&#xff0c;我将对代码进行重构&#xff1a; FaultSelect.vue (子组件): 这个组件现在将变得更加“纯粹”。它只负责自身的下拉框逻辑&#xff0c;不关心外部按钮&#…

第5课:上下文管理与状态持久化

第5课:上下文管理与状态持久化 课程目标 掌握上下文存储和检索策略 学习会话状态管理 了解数据持久化方案 实践实现上下文管理系统 课程内容 5.1 上下文管理基础 什么是上下文管理? 上下文管理是Agent系统中维护和利用历史信息的能力,包括: 对话历史:用户与Agent的交互…

计算机毕业设计 基于大数据技术的医疗数据分析与研究 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python、大数据、人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&…

K8S集群管理(2)

目录 1.什么是Pod的根容器&#xff1f; 2.解释Pod的生命周期。 3.Init类型容器有什么特点&#xff0c;主要用途&#xff1f; 4.Sidecar类型容器和Init容器的区别在哪&#xff1f; 5.什么是静态Pod&#xff1f; 6.说明K8s控制器的作用&#xff1f; 7.什么是ReplicaSet&#xff0…

视频全模态referring分割:Ref-AVS: Refer and Segment Objects in Audio-Visual Scenes

一、TL&#xff1b;DR 为什么要做&#xff1a;传统的referring分割无法使用音频模态&#xff0c;本文提出Reference audio-visual Segmentation本文怎么做&#xff1a;构建首个 Ref-AVS 基准数据集通过充分利用多模态提示&#xff0c;将音频信息通过和文本融合作为载体&#x…

A股大盘数据-20250916分析

&#x1f4ca; 一、大盘数据深度分析1.1 &#x1f9ee; 市场活跃度与资金流向总成交额&#xff1a;沪深京合计约 2.37万亿元&#xff0c;市场交投活跃&#xff0c;深市成交&#xff08;13516.4亿&#xff09;明显高于沪市&#xff08;9897.9亿&#xff09;&#xff0c;显示中小…

[计算机毕业设计]基于深度学习的噪声过滤音频优化系统研究

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投…

贪心算法应用:NFV功能部署问题详解

Java中的贪心算法应用&#xff1a;NFV功能部署问题详解 1. NFV功能部署问题概述 网络功能虚拟化(NFV, Network Function Virtualization)是一种将传统网络设备功能从专用硬件转移到虚拟化软件的技术。在NFV功能部署问题中&#xff0c;我们需要将各种虚拟网络功能(VNFs)部署到有…

SeriLog测试

安装Serilog.Sinks.Seq(5.2.3.0)&#xff0c;Serilog.Sinks.File(7.0.0) 下载Seq安装包并安装&#xff08;https://datalust.co/download&#xff09; 代码如下&#xff1a; private Logger _logger;private void button1_Click(object sender, EventArgs e){_logger new Lo…

HarmonyOS 5.0应用开发——V2装饰器@param的使用

【高心星出品】 文章目录V2装饰器param的使用概念使用方法案例V2装饰器param的使用 概念 在鸿蒙ArkTS开发中&#xff0c;Param装饰器是组件间状态管理的重要工具&#xff0c;主要用于父子组件间的单向数据传递&#xff0c;这一点与V1中的prop类似。 Param装饰的变量支持本地…

SLAM | 无人机视觉/激光雷达集群SLAM技术进展综述

主要内容如下: 无人机集群SLAM技术概述:介绍无人机集群SLAM的基本概念、重要性及面临的挑战,使用表格对比不同传感器配置的特点。 多传感器融合与协同SLAM架构:分析集中式、分布式和混合式协同架构的特点,使用表格对比不同架构的优缺点。 视觉协同SLAM的技术进展:总结直接…

信息化系统运维文档资料,运维服务方案,运维巡检方案

1、系统服务内容​1.1 服务目标​1.2 信息资产统计服务​1.3 网络与安全系统运维服务​1.4 主机与存储系统运维服务​1.5 数据库系统运维服务​1.6 中间件运维服务​2、服务管理制度规范​2.1 服务时间管理​2.2 运维人员行为规范​2.3 现场服务支持规范​2.4 问题记录与归档规…

JavaScript——document对象

DOM 是 document object model&#xff08;文档对象模型&#xff09;的缩写。它是一种与平台、语言无关的接口&#xff0c;允许程序动态地访问或更新 HTML、XML 文档的内容、结构和样式&#xff0c;且提供了一系列的函数和对象来实现增、删、改、查操作。DOM 对象的一个特点是&…