ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

18 iptables

2022-03-05 14:00:57  阅读:270  来源: 互联网

标签:iptables -- 18 报文 规则 nat IP


参考博客:https://www.cnblogs.com/whych/p/9147900.html

1 概述

Linux防火墙通常包含两部分,分别为iptablesnetfilteriptables是管理防火墙的命令行工具,处于用户空间。netfilter执行报文过滤,处于内核空间。
路由:及路由表不直接参与数据包的传输,而是生成一个指向表。这个指向表仅包含路由算法选择的数据传输优先路径
PREROUTING: 在进行路由判断之前所要进行的规则
INPUT:处理入站的数据包
OUTPUT:处理出站的数据包
FORWARD:处理转发的数据包
POSTROUTING: 在进行路由判断之后所要进行的规则

2 iptables中的表

iptables将规则写入,内核netfilter执行报文过滤规则。
filter、nat、mangle、raw、security

  • filter(过滤表)
    报文过滤,包含3个内置规则链
    INPUT输入链,处理目标地址为本机IP地址的报文
    OUTPUT输出链,处理本机地址产生的报文
    FORWARD转发链,处理经过本机路由的报文
  • nat(网络地址转换表)
    nat修改数据包中的源、目标IP地址或端口。
    它也有3个内置的规则链
    PREROUTING:修改到来的报文,只用来做网络地址转换
    OUTPUT:用来修改本机产生的并且在路由处理之前的报文
    POSTROUTING:用于修改准备出去的报文
  • mangle(修改表)
    进行报文修改。有5个内置规则链
    PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
  • raw(原始表)
    配置连接跟踪相关的内容,在ip_conntrack之前调用。提供两个内置规则链。
    PREROUTING、OUTPUT
  • security(用于安全Linux的防火墙规则)

3 处理目标

规则的处理目标可以是用户定义的自定义链名,也可以是系统内置的四种处理方式

  • ACCEPT(接收)表示让这个报文通过
  • DROP(丢弃)表示这个报文丢弃
  • QUEUE(入队)表示把这个报文传递到用户空间的队列中
  • RETURN(返回)表示停止这条规则的匹配。返回到调用这个规则的上一条规则链的规则处执行
  • REJECT(拒绝)REJECTDROP一样丢弃报文,但是REJECT的不同之处在与同时还向发送者返回一个ICMP错误消息
禁止访问80端口
iptables -A IPNUT -p tcp --dport 80 -j REJECT

DROPREJECT的区别

  1. DROP不会回包,暴露信息少
  2. REJECT每一条信息都会回一条ICMP不可到达的报文。当有大量访问和攻击时,会导致占用所有带宽,有用的报文不可用(DOS
  • DNAT(目的网络地址转换)
    目的网络地址转换的,就是重写报文的目的IP
    这个处理目标仅用在nat表中的PREROUTINGOUTPUT链。
将访问路由器的80端口的流量重定向到192.168.6.100
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.6.100

这样Web服务器就可以搭建在局域网的主机(192.168.6.100)上对外提供服务。对外仅有路由器的IP保留给用户。

  • SNAT(源网络地址转换)
    网络地址转换。重写报文的源IP
    这个处理目标仅用在nat表的POSTROUTINGINPUT链。
iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o eth0 -j SNAT --to-source 10.0.2.15
  • MASQUERADE(伪装)
    MASQUERADE作用和SNAT是一样的。两者的区别是MASQUERADE是不需要指定源地址的。
    MASQUERADE只用于nat表的POSTROUTING
  • LOG(开启内核记录)
    为匹配的报文开启内核记录。Linux会通过printk函数打印一些匹配包的信息,然后通过syslog记录在日志中。
    有一下几个选项可以设置
--log-level         :       日志级别
--log-prefix        :       prefix在记录log信息前加上特定前缀;最多14个字母
--log-tcp-sequence  :       记录TCP序列号
--log-tcp-options   :       记录TCP报文头部的选项
--log-ip-options    :       记录IP报文头部的选项
  • REDIIECT(修改目的IP到机器自身)
    只适用与nat表的PREROUTINGOUTPUT
    修改报文的目的IP地址来发送报文到机器自身(本地生成的报文被设置为地址127.0.0.1
  • --to-ports []
    指定使用的目的端口或端口范围。只适用于指定TCPUDP

4 报文处理流程

iptable5个表,每个表中又有几个不同的链,不同的表中有相同名称的规则链。但这些规则链处理的任务是不同的。报文按照预定的流程来顺序进入到各个规则链中,报文处理流程如下图。进入顺序是raw->mangle->filter->nat
流程
处理流程

  1. 首先网卡从网络上收到IP报文
  2. 报文进入raw表的PREROUTING链。此时在报文连接跟着生效之前对报文进行处理。
  3. 报文进入到连接跟踪处理
  4. 报文进入到mangle表的PREROUTING链。这里是报文进入网关之后,路由之前修改报文的地方
  5. 报文进入到nat表的PREROUTING。在这里我们做目的地址转换(DNET)。这里不能用于报文过滤,因为每一个连接数据流仅第一个报文进入到这里。
  6. 进行路由决策,因为前面的manglenat表可能修改了报文的IP地址信息。如果目的地址为网关,则直接进入到INPUT链中,如果和本机地址不同,则进入路由转发。跳到步骤9
  7. 报文进入到mangle表的INPUT链。这里是报文进入网关时修改报文的地方。在这里不做报文过滤。
  8. 报文进入到filter表的INPUT链,这里是对收到报文做过滤的地方,然后将报文转到应用程序。
  9. 对于转发进入到mangle表的FORWARD链。这里对报文进行修改
  10. 报文进入到filter表中的FORWARD链。对转发报文进行过滤。
  11. 报文进入到mangle表的POSTROUTING链。这条链可能被两种报文遍历,一种是转发报文,另外就是本机产生的报文
  12. 报文进入到nat表的POSTROUTING链。在这里我们做源地址转换(SNAT)这里不能用于报文过滤,因为每一个数据流仅有第一个报文进入到这里
  13. 经由网卡发送

5 报文规则匹配

  • MAC地址过滤
    MAC地址过滤只对源MAC地址有效
丢弃指定MAC的报文
iptables -I INPUT -m mac --mac-source 28:D2:44:15:D5:A4 -j DROP
  • IP层过滤
    IP层匹配常用的有协议,源IP和目的IP
    -p用于匹配IP层报文协议。常见有TCP、UDP、IGMP、ICMP。也可以是一个数字,数字代表的协议在文件/etc/protocols描述。数字零表示所有协议。
禁止UDP 5060报文
iptables -A FORWARD -p UDP --m udp dport 5060 -j DROP

-s-d用于匹配IP报文的源IP和目的IP

禁止192.168.1.0网段访问本机
iptables -A INPUT -s 192.168.1.0/24 -j DROP

6 管理防火墙规则

iptables [-t table] {-A|-C|-D} chain rule-specification rule-specification = [matches...] [target] match = -m matchname [per-match-options] target = -j targetname [per-target-options]
  • A 将防火墙规则添加到规则链的末尾
  • D 删除指定规则链中的规则。
    可以指定规则号来删除,也可以通过规则匹配来删除
  • I 插入到规则链中的指定位置。如果不指定插入位置则插入规则链的第一个位置
  • L 查看防火墙规则。如果没有指定规则链,则显示所有规则链
  • R 修改、替换.指定链中的某一条规则,可以按规则序号和内容替换
  • E 重命名用户定义的链,不改变链本身
  • F 清空防火墙规则。如果没有指定规则链,则清空所有链。
    通常在进行防火墙配置之前需要将以前的规则全部删除
清空filter表中的INPUT链规则
iptables -t filter -F INPUT
  • N 新建一条用户自己定义的规则链
  • X 删除指定表中用户自定义的规则链
    X删除规则链
    D删除规则链中的规则
    F清空
  • P 设置指定链的默认策略。如果一个报文没有被任何规则匹配,那么默认策略就会命中,执行默认策略
输入链为默认拒绝
iptables -P INPUT DROP
  • Z 将所有表的所有链的字节和数据包计数器清零
  • n 使用数字形式显示输出结果
  • v 查看规则表详细信息的信息
  • V 查看版本
  • h 获取帮助

对于iptables命令如果没有指定防火墙表就默认使用filter表,所以查看网络地址转换规则使用iptables -t nat -L

对于复杂规则,我们通常会创建自定义规则链来进行匹配,并把自定义规则链加入到已有的规则链中。

iptables -N UDP_FILTER

7 其他工具

iptables-saveiptables-restore处理大规则集。把规则存入一个与标准脚本代码只有细微差别的特殊格式文件中,或者从中恢复规则。

  • iptables-save
    导出iptables规则到标准输出(屏幕)中。我们使用shell重定向到文件中。内容格式和iptables类似但稍有不同。
  • iptables-restore
    用于加载导出的防火墙规则,使用标准输入的内容导入,一般都是通过shell从重定向的文件中读取规则后向内核导入。

标签:iptables,--,18,报文,规则,nat,IP
来源: https://www.cnblogs.com/burnk/p/15843299.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有