热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Linux】iptables入门简介

文章目录前言作用持久化和恢复执行的顺序前言简单地说,iptables是Linux的防火墙程序。它将使用表监控进出服务器的流量。这些表包含称为链的规则集,


文章目录


  • 前言
  • 作用
  • 持久化和恢复
  • 执行的顺序





前言

简单地说,iptables是Linux的防火墙程序。它将使用表监控进出服务器的流量。这些表包含称为链的规则集,这些规则将过滤传入和传出数据包。




作用

当数据包与规则匹配的时候,会为其指定一个目标,该目标可以是另一条链或者是以下的特殊值之一:


  • ACCEPT 允许数据包通过
  • DROP 直接丢弃
  • RETURN 组织数据包遍历链并告诉它返回到上一个链(没用过)

iptables 规则仅适用于 IPv4。如果要为 ipv6 协议设置防火墙,则需要改用 ip6tables。

默认我们使用的是filter表,常说三表五链,但是我所了解的更多有关于filter表和nat表。
首先大概了解一下报文经过防火墙时大概经历了哪些。
在这里插入图片描述

这里我们跳过安装部分。
介绍几个常见的指令:
查看当前的iptables 的配置:
iptables -nL
我们可以观察到一开始的所有的链上面的规则默认都是ACCEPT的。这明显是不安全的,说明任何的数据包到达之后我们都可以直接通过。图中圈起来的是默认策略,可以进行修改。
在这里插入图片描述
修改对应链的默认配置:
iptables -P FORWARD DROP
在这里插入图片描述
往对应链增加新规则:
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
比如说我想让所有访问tcp协议,访问我的主机的8080号端口的都放行,我可以在INPUT链做操作。
语法:
iptables -A -i -p -s --dport -j
在这里插入图片描述
-i (接口) — 要过滤其流量的网络接口,例如 eth0、lo、ppp0 等。
-p(协议) — 进行过滤过程的网络协议。它可以是tcp,udp,udplite,icmp,sctp,icmpv6等。或者,您可以键入 all 以选择每个协议。
-s(源) — 流量来自的地址。您可以添加主机名或 IP 地址。
–dport (目标端口) — 协议的目标端口号,例如 22 (SSH)、443 (https) 等。
-j (target) — 目标名称(ACCEPT, DROP, RETURN)。每次创建新规则时都需要插入此规则。

那么要是想在链头新增规则,可以采用-I 指定链 + number 进行插入,默认插入到第一行。
iptables -I INPUT -p tcp --dport 22 -j DROP
执行上面指令,就能让ssh失去连接。
在这里插入图片描述
那我如果后悔了,我的xshell或者vs code链接不上虚拟机了,此时可以使用
iptables -D INPUT 1
删除第一条规则,然后就可以恢复正常了。 要是嫌麻烦iptables -F可以删除所有链上已有的规则,可以指定链,默认对filter表的链全部进行删除。

基于源过滤数据包
Iptables 允许您根据 IP 地址或 IP 地址范围过滤数据包。您需要在 -s 选项后指定它。例如,要接受来自 192.168.1.3 的数据包,命令将是:
sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

如果要丢弃来自某个 IP 地址范围的数据包,则必须使用 -m 选项和 iprange 模块。然后,使用 –src-range 指定 IP 地址范围。请记住,连字符应分隔不带空格的 IP 地址范围,如下所示:
sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

丢弃所有其他流量
在定义 –dport 规则后,将 DROP 目标用于所有其他流量至关重要。这将防止未经授权的连接通过其他开放端口访问服务器。要实现此目的,只需键入:

sudo iptables -A INPUT -j DROP


持久化和恢复

由于每一次重启虚拟机防火墙策略都会发生改变,而一行行在终端上面修改又比较麻烦,所以通常持久化到文件当中。
iptables-save > /root/ipt.save iptables的保存
iptables-restore

其他:
链管理
 -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
 -E, --rename-chain old-chain new-chain:重命名链;

规则管理:
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;

–syn 说明是tcp的syn字段为1,其他字段为0的情况。

state
限制收发包的状态

[!] --state state

INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

NEW: 新连接请求;

ESTABLISHED:已建立的连接;

INVALID:无法识别的连接;

RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;

UNTRACKED:未追踪的连接;

也可以对icmp协议进行一个处理
iptables -A INPUT -p icmp --icmp-type 8 -j ljh


执行的顺序

iptables执行规则时,是从从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则,执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况,后续执行一般有三种情况。

1.一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。也就是当我们进入任意一条链,执行完后也会返回。

2.一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行

3.一种是中止所有规则队列的执行。比如说DROP,当前访问被丢弃了。

iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。

参考:
iptables命令使用详解
执行顺序







推荐阅读
author-avatar
zz998877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有