iptables的基础知识-iptables中的状态检测

本文介绍了IPtables防火墙的基本使用方法,包括如何利用IPtables实现软路由功能、不开放端口的情况下启用HTTP服务、在内网计算机上架设FTP服务及阻止他人PING等操作。此外还提供了一些常用的IPtables命令。

IPtables防火墙使用技巧

最近架设了一台LINUX的小型服务器,因为需要把LINUX的机子作为软路由器来使用,所以把使用的IPtables防火墙使用的经验谈一下。iptables的功能十分的强大。例如IP转发和伪装防御DoS,扫描和嗅探试的攻击等等。在这里就不阐述了我的系统环境,简易配置如下

redhat 7.2

adsl 2m

8139fast 网卡

1、linux如何使用软路由功能:

说到这里,大家可能会想,只要在/etc/rc.d/rc.local加上cat 1 > /proc/sys/net/ipv4/ip_forward就可以了,让linux具有ip_forward的功能。但你会发现,就算这样设置你局域网内的其他计算机还是不能共享上网。这是为什么?因为当你只有一个公网的ip时,你就必须用到iptables的IP伪装功能,把IP的伪装成你公网的IP。那怎么IPtables防火墙实现呢?你可以这样:

  1. iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

这样就可以把你所以出去的IP地址伪装成ppp0的IP地址(因为我的ADSL如有不同可以修改)。

2、不开放端口下,启用http服务、对外服务

不想开放我的端口,但我要在我的计算机上启用http服务,并对外服务。因为你不想开放除了80以外的端口,你可以这样:

  1. iptables –P INPUT –j DROP

我们用-P来拦截全部的通信,然后在来允许哪些端口可以被使用你可以这样写:

  1. iptables –A INPUT –p tcp –dport 80 –j ACCEPT

你可以适当的依照这样的格式来添加自己想开放的端口 当然要是你感觉这样不是很好的管理你也可以新建一个iptables表 你可以这样做:

  1. iptables –N test (新建一个test表)
  2. iptables –A test DROP
  3. iptables –A test –p tcp –dport 80 –j ACCEPT(允许80端口被访问)
  4. iptables –A INPUT –j test
  5. iptables –A OUTPUT –j test
  6. iptables –A FORWARD –j test

(这3条的意思指让INPUT OUTPUT FORWARD都依照test的设置)

3、在内网的计算机上架设ftp服务

如果是在内网的计算机上架设ftp服务该怎么做呢?这就又要用到iptables 的又一个强大的功能——端口映射了你可以这样:

  1. iptables -t nat -A PREROUTING -p tcp -m tcp --dport 25 -j DNAT --to-destination
  2. 192.168.0.6:21
  3. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.6 -p tcp -m tcp --
  4. dport 25-j SNAT --to-source 192.168.0.1

上面2句话的意思是把服务器的25端口映射到192.168.0.6这台计算机上。

4、不想让别人可以PING到我

这大约是做iptables防火墙用到最多的一种了 你可以在iptables写这句话:

  1. iptables -A INPUT -p icmp --icmp-type echo-request -i ppp0 -j DROP

要是你前面是新建了一个新的test表,那也可以这样写。

  1. iptables -A test -p icmp --icmp-type echo-request -i ppp0 -j
  2. DROP

这句话就是不允许人家PING我,因为ping用到的是icmp协议。因为icmp没有端口可言,所以也不需要指定端口了。

好了!这就是IPtables防火墙使用的几种比较基本的用法。这里再介绍几iptbales常用的一些指令。

iptables –F 清空所有的iptables的规则设置。

  1. /sbin/iptables-save > iptables – save

这样,把你的规则保存下来。因为你所有设置的规则再重新启动后都不会被保存,所以你必须写一个脚原本让他开机运行。这样,你就可以用这指令来保存你的规则, 然后让他开机自动运行就可以了iptables的基础知识-iptables中的状态检测

<think>好的,用户让我解释这条iptables规则:iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT。首先,我需要确认用户对iptables基础知识是否了解。可能他们是在配置防火墙时遇到了问题,或者在学习网络安全管理。 这条规则的关键在于conntrack模块和ctstate参数。conntrack用于连接跟踪,而ctstate指定状态。用户可能想知道为什么需要允许ESTABLISHED和RELATED状态,或者这条规则在整体防火墙配置中的作用。 我需要先分解每个部分的作用。-A INPUT表示追加到INPUT链,处理进入系统的数据包。-m conntrack加载conntrack模块,用于状态检测--ctstate RELATED,ESTABLISHED匹配已建立或相关联的连接。-j ACCEPT则是接受这些包。 接下来,应该解释ESTABLISHED和RELATED的区别。ESTABLISHED是已建立的连接,比如TCP握手完成后的通信。RELATED则是相关联的新连接,比如FTP的数据传输通道或ICMP错误消息。用户可能在实际应用中遇到需要放行这类流量的问题,比如FTP服务无法正常工作,可能就是因为没有允许RELATED状态。 还要考虑用户可能的误区,比如规则顺序的重要性。这条规则通常应该放在其他更严格的规则之前,确保已建立的连接不会被后续的DROP规则阻断。同时,是否需要提及旧版系统使用-m state而不是conntrack?可能用户的环境不同,需要区分。 用户可能的应用场景是设置防火墙时,允许响应返回的流量,而不需要手动开放所有可能的端口。这能提高安全性,减少规则数量。此外,可能需要提醒用户注意模块是否加载,以及INVALID状态的处理,但用户的问题暂时不涉及这些。 最后,总结这条规则的作用,强调其重要性和常见配置位置。确保用户理解这条规则是防火墙配置中的常见做法,用于维护正常通信同时提升安全性。</think>这条 `iptables` 规则是 **防火墙配置中最核心的安全策略之一**,用于智能放行合法的网络通信流量。我们逐层解析其作用和意义: --- ### 规则分解 ```bash iptables -A INPUT # 将规则追加到 INPUT 链(处理进入本机的数据包) -m conntrack # 加载连接跟踪模块(conntrack) --ctstate RELATED,ESTABLISHED # 匹配 "已建立" 或 "相关联" 的连接状态 -j ACCEPT # 对匹配的流量执行放行操作 ``` --- ### 核心功能 #### 1. 放行「双向通信」的响应流量(`ESTABLISHED`) - **场景举例**: 当你的服务器主动访问外部网站(出站流量)时,外部网站返回的响应数据包会标记为 `ESTABLISHED`。 - **作用**: 无需手动开放响应端口,系统自动允许这类流量返回,避免通信中断。 #### 2. 处理「关联协议」的衍生流量(`RELATED`) - **典型用例**: - **FTP 数据传输**:FTP 控制连接(端口21)建立后,动态协商的数据端口(如被动模式)会自动识别为 `RELATED` - **ICMP 错误报文**:当 TCP 连接被拒绝时,系统返回的 `ICMP Destination Unreachable` 报文属于 `RELATED` - **SIP/VoIP 协议**:语音通话的信令协商与媒体流之间的关联 #### 3. 安全价值 - ✅ **减少攻击面**:仅允许与已有合法连接相关的流量进入,阻断所有未经请求的入站连接 - ✅ **简化规则管理**:无需为每个协议单独设置响应端口规则(如HTTP的80端口响应) - ✅ **协议兼容性**:自动支持需要动态端口协商的复杂协议(如FTP、SIP) --- ### 实际配置示例 #### 标准防火墙规则顺序 ```bash # 1. 首先放行已建立和相关联的流量(必须第一条!) iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # 2. 放行本地回环接口(lo) iptables -A INPUT -i lo -j ACCEPT # 3. 按需开放新连接(如SSH、HTTP) iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT # 4. 最后拒绝其他所有入站流量 iptables -A INPUT -j DROP ``` --- ### 常见问题解答 #### Q1: 为什么必须将此规则放在最前面? 如果将其放在其他 `DROP` 规则之后,系统会先拒绝流量,导致合法响应数据包被错误拦截。规则顺序在 `iptables` 中至关重要。 #### Q2: 和 `-m state --state` 有什么区别? 这是新旧版本差异: - 旧版内核:使用 `-m state --state RELATED,ESTABLISHED` - 新版内核:统一为 `-m conntrack --ctstate RELATED,ESTABLISHED` 功能完全一致,`conntrack` 是新一代连接跟踪实现。 #### Q3: 需要额外处理 `INVALID` 状态吗? 建议补充丢弃非法流量: ```bash iptables -A INPUT -m conntrack --ctstate INVALID -j DROP ``` 可防御伪造数据包、网络扫描等攻击。 --- ### 底层原理 Linux 内核的 `nf_conntrack` 模块会维护一个连接跟踪表(`/proc/net/nf_conntrack`),记录所有经过系统的连接信息,包括: - 源/目的 IP 和端口 - 协议类型(TCP/UDP/ICMP等) - 连接状态(超时时间、数据包计数器等) 当数据包到达时,内核会检查其与跟踪表中记录的匹配关系,自动标记状态,使防火墙能基于上下文智能决策。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值