Java教程

18 iptables

本文主要是介绍18 iptables,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

参考博客: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从重定向的文件中读取规则后向内核导入。
这篇关于18 iptables的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!