iptables 学习总结

标签: iptables 习总 | 发表时间:2020-06-20 08:00 | 作者:
出处:http://yangxikun.github.io

参考文章: 朱双印 iptables

防火墙概念

逻辑分类:

  • 主机防火墙:对单个主机进行防护
  • 网络防火墙:通常处于网络的入口/出口,服务于其背后的局域网

物理分类:

  • 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
  • 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低

iptables 概念

iptables 是一个客户端程序,与内核空间的 netfilter 交互。

netfilter 是集成到 linux 内核协议栈中的一套防火墙系统,用户可通过运行在用户空间的 iptables 来把相关配置下发给 netfilter。

netfilter 分为多个模块,各个模块的用户空间配置工具为:

  • 链路层:ebtables
  • 网络层ipv4:iptables
  • 网络层 ipv6:ip6tables
  • 专门用于 ARP 协议:arptables

wikipedia 关于 netfilter 中数据包的流图:

网络层部分的流图:

iptables 中的链

从流图的视角,可以看到一共有 5 条链,每条链上会有按顺序串联的表。当数据包到达某条链时,会顺序执行每张表中的规则。

这 5 条链实际上就是 netfilter 提供的在数据包流转路径上的 HOOK。

iptables 中的表

表用于聚合某种类型的规则,从 iptables 客户端的视角,一共有 4 张表,每张表里会有该表可以附加上去的链。

  • filter:负责过滤功能,防火墙;内核模块:iptables_filter
  • nat:network address translation,网络地址转换功能;内核模块:iptable_nat
  • mangle:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
  • raw:关闭nat表上启用的连接追踪机制;iptable_raw

所以我们是通过 iptables 对某张表上的某条链的规则进行增删改。

iptables 中的规则

规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理。

匹配条件:

  • 基本匹配条件:
    • 源地址 Source IP
    • 目标地址 Destination IP
  • 扩展匹配条件:由扩展模块提供,比如 tcp 模块支持端口匹配

处理动作:

  • ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包,不给任何回应信息
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
  • SNAT:源地址转换,需要指定转换的 ip,解决内网用户用同一个公网地址上网的问题
  • MASQUERADE:是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上,指定使用某张网卡上的 ip 用于转换
  • DNAT:目标地址转换
  • REDIRECT:在本机做端口映射
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配

在一张表的某条链上的多条规则会被顺序执行,当有一条规则匹配成功了,且处理工作不是 LOG,之后的规则不会再执行。

在一张表的每条链上可以设置默认的处理动作,即但没有匹配到规则时,执行链的默认处理动作。

iptables 操作

查询:

  • iptables -t filter –line-numbers -nvxL
    • -t 指定查询的表,默认 filter
    • –line-numbers 显示规则编号
    • -n 显示 IP 地址,而不是名称解析
    • -v 显示详细信息
      • pkts: 对应规则匹配到的报文的个数
      • bytes: 对应匹配到的报文包的大小总和
      • target: 规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施
      • prot: 表示规则对应的协议,是否只针对某些协议应用此规则
      • opt: 表示规则对应的选项
      • in: 表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则
      • out: 表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则
      • source: 表示规则对应的源头地址,可以是一个IP,也可以是一个网段
      • destination: 表示规则对应的目标地址。可以是一个IP,也可以是一个网段
    • -x 显示精确的值,而不是经过可读性优化过的计数值

增加:

  • iptables -A INPUT -s 192.168.1.3 -j ACCEPT
    • 在 filter 表的 INPUT 链尾追加规则
  • iptables -I INPUT -s 192.168.1.3 -j ACCEPT
    • 在 filter 表的 INPUT 链头插入规则
  • iptables -I INPUT 2 -s 192.168.1.3 -j ACCEPT
    • 在 filter 表的 INPUT 链位置 2 插入规则

删除:

  • iptables -D INPUT 3
    • 删除 filter 表的 INPUT 链的规则 3
  • iptables -D INPUT -s 192.168.1.3 -j ACCEPT
    • 删除 filter 表的 INPUT 链中源地址为 192.168.1.146,动作为 ACCEPT 的规则
  • iptables -t 表 -F 链
    • 清空表中的某条链
  • iptables -t 表 -F
    • 清空表中的所有链

修改:

  • iptables -R INPUT 1 -s 192.168.1.3 -j ACCEPT
    • 修改 filter 表的 INPUT 链规则 1
    • -s 如果省略的话,默认会修改为 0.0.0.0/0
  • iptables -P FORWARD DROP
    • 修改 filter 表的 FORWARD 链默认处理动作

保存:

规则匹配
  • 匹配 IP 地址:
    • -s 192.168.1.3,192.168.1.4
    • -s 192.168.1.0/24
    • ! -s 192.168.1.3
  • 匹配协议
    • -p tcp
    • 可选的值:tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh, all
  • 匹配网卡接口
    • -i 流入数据包的网卡
    • -o 流出数据包的网卡
  • 扩展匹配条件,需要相应的协议模块支持
    • 端口号:
      • -p tcp -m tcp –sports 80 –dports 8080:65535
        • 无法同时指定多个离散的、不连续的端口
      • -p tcp -m multiport –sports 80,81,82:88 –dports 8080:65535
        • multiport 扩展只能用于 tcp 协议与 udp 协议
    • iprange:连续 IP 地址范围
      • iptables -I INPUT -m iprange –src-range 192.168.1.3-192.168.1.8 -j DROP
    • string:字符串匹配
      • iptables -I INPUT -m string –algo bm –string “OOXX” -j REJECT
    • time:时间相关
      • iptables -I INPUT -m time –timestart 09:00:00 –timestop 18:00:00 -j REJECT
    • connlimit:连接数
      • iptalbes -I INPUT -p tcp –dport 22 -m connlimit –connlimit-above 2 -j REJECT
    • limit:速率限制
      • iptables -I INPUT -p icmp -m limit –limit 10/minute -j ACCEPT
      • iptables -A INPUT -p icmp -j REJECT
    • –tcp-flags:根据 TCP 协议头中的 Flags 匹配
      • iptables -t filter -I INPUT -p tcp -m tcp –dport 22 –tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
        • 拒绝第一次握手请求
        • –tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN 可缩写为 –syn
    • icmp:
      • iptables -t filter -I INPUT -p icmp -m icmp –icmp-type 8/0 -j REJECT
    • state:只要两台机器在”你来我往”的通信,就算建立起了连接
      • “连接”其中的报文可以分为5种状态:
      • NEW:连接中的第一个包,状态就是NEW,我们可以理解为新连接的第一个包的状态为NEW
      • ESTABLISHED:我们可以把 NEW 状态包后面的包的状态理解为 ESTABLISHED,表示连接已建立
      • RELATED:ftp 中数据连接中的报文与命令连接中的报文关系
      • INVALID:如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是 INVALID,我们可以主动屏蔽状态为 INVALID 的报文
      • UNTRACKED:表示报文未被追踪,无法找到相关的连接
    • set:ipset 管理的集合
      • iptables -I INPUT -m set –match-set setname src -p tcp –destination-port 80 -j DROP

iptables 自定义链

自定义链用于复用规则,以及方便管理大量规则。

  • 创建:iptables -t filter -N IN_WEB
  • 引用:iptables -t filter -I INPUT -p tcp –dport 80 -j IN_WEB
  • 重命名:iptables -E IN_WEB WEB
  • 删除:iptables -X WEB
    • 需要先删除引用和清空规则

iptables 处理动作

  • REJECT:使用–reject-with选项,可以设置提示信息,当对方被拒绝时,会提示对方为什么被拒绝。
    • icmp-net-unreachable
    • icmp-host-unreachable
    • icmp-port-unreachable:默认
    • icmp-proto-unreachable
    • icmp-net-prohibited
    • icmp-host-prohibited
    • icmp-admin-prohibited
  • LOG:
    • –log-level:选项可以指定记录日志的日志级别,可用级别有emerg,alert,crit,error,warning,notice,info,debug
    • –log-prefix:选项可以给记录到的相关信息添加”标签”之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤
      • –log-prefix 对应的值不能超过29个字符
  • NAT:echo 1 > /proc/sys/net/ipv4/ip_forward
    • SNAT:
      • iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT –to-source 公网IP
      • iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
    • DNAT:iptables -t nat -I PREROUTING -d 公网IP -p tcp –dport 公网端口 -j DNAT –to-destination 私网IP:端口号
  • REDIRECT:
    • iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080
      • 访问本机的80端口时,会被映射到8080端口
  • MARK:
    • iptables -t mangle -A INPUT -m state –state NEW-j MARK –set-mark 1
      • 设置连接的 mark
  • CONNMARK:
    • iptables -t mangle -A INPUT -j CONNMARK –restore-mark
      • 把连接的 mark 设置到数据包中

相关 [iptables 习总] 推荐:

iptables 学习总结

- - 小火箭
参考文章: 朱双印 iptables. 主机防火墙:对单个主机进行防护. 网络防火墙:通常处于网络的入口/出口,服务于其背后的局域网. 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高. 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低.

iptables NAT 学习

- - BlogJava-首页技术区
为了搞清楚iptables NAT的过程,做了这个实验. 使用了1台双网卡服务器和1台单网卡服务器,2个网段. 1.       为了看到调度服务器上的数据转发过程,首先在调度服务器上分出内核的debug日志:. l 在/etc/rsyslog.conf最后增加:kern.debug /var/log/iptables.log.

iptables 小结

- - CSDN博客系统运维推荐文章
        最近工作上一个作业用到了iptables命令,主要进行端口映射,在网上查了好多资料,尽管有很多例子,但还是整了好几天才整明白. (有一些是从网络中总结的,不断完善中...). (1) iptables简介.            iptables是一个Linux下优秀的nat+防火墙工具,iptables操作的是2.4以上内核的netfilter,所以需要linux的内核在2.4以上.

iptables 详解

- - 行业应用 - ITeye博客
以下文章转载于:http://blog.chinaunix.net/uid-26495963-id-3279216.html. 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种. 无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘. 而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测.

iptables原理说明

- - CSDN博客互联网推荐文章
1.iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具. 2. 作者一共在内核空间中选择了5个位置,.     1).内核空间中:从一个网络接口进来,到另一个网络接口去的.     2).数据包从内核流入用户空间的.

linux下IPTABLES配置详解

- - Linux - 操作系统 - ITeye博客
作者博客:http://www.cnblogs.com/JemBai/. 原文地址:http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html. 如果你的IPTABLES基础知识还不了解,建议先去看看. 我们来配置一个filter表的防火墙.

利用iptables 封与解封IP

- - 傻子-王跸西的blog-WangBiXi.com
I表示Insert(添加),-D表示Delete(删除).

iptables 访问控制规则两则

- - 依云's Blog
一直以来,面对 Vim 显示的 auth.log 里满屏的红色 ssh 登录失败记录,要么容忍,要么换端口号,要么是 fail2ban. 换端口号显然会造成很多不便,尤其是使用者比较多的时候. fail2ban 以前也用得挺好的,但是需要手工编辑配置文件,阅读其中长长的注释并且小心翼翼地修改参数. 配置好之后还会经常收到 fail2ban 发出的邮件.

[转]iptables防火墙与NAT服务

- - 小鸥的博客
iptables防火墙与NAT服务. (1)设置在不同的网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性. (2)通过审查经过每一个数据包,判断它是否有相匹配的过滤规则,根据规则先后顺序一一进行比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作,若都不能满足,则将数据包丢弃,从而保护网络安全.

Shadowsocks屏蔽端口iptables规则

- - 深度VPS
Shadowsocks经常被人滥发垃圾邮件之类的而被暂停服务. 我们仅需保留SSH,SQL,DNS,HTTP和HTTPS这些主要端口,其它的用iptables做下限制,这样就高枕无忧了. 请把你的SSH22端口改了.