【Linux】 iptables 入门简介

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


前言

简单地说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 <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.> -j <target>
在这里插入图片描述
-i 接口 — 要过滤其流量的网络接口例如 eth0、lo、ppp0 等。
-p协议 — 进行过滤过程的网络协议。它可以是tcpudpudpliteicmpsctpicmpv6等。或者您可以键入 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 < /root/ipt.save 的还原

其他
链管理
 -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命令使用详解
执行顺序

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux