Linux之iptables防火墙

目录

iptables防火墙概述

  • linux系统的防火墙:IP信息包过滤u系统,它实际上由两个组件netfilter和iptables组成。
  • 主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口、协议等信息的处理上。

netfilter和iptables之间的关系

netfilter

  • 属于“内核态”(user apace,又称为内核空间)的防火墙功能体系。
  • 是内核的一部份,又一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。

iptables

  • 属于“用户态”(user apace,又称为用户空间)的防火墙管理体系。
  • 是一种用来管理linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables文件下。

netfilter/iptables后期简称为iptables。iptables使基于内核的防火墙,其中内置了raw、mangle、net和filter四个规则表。表中所有的规则配置后,立即生效,不需要重启服务。

iptables四表五链

作用

  • 规则表的作用:容纳各种规则链
  • 规则链的作用:容纳各种防火墙规则

结合:表中有链,链中有规则

四表

  • ram表: 确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。
  • mangle表: 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
  • nat表: 负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
  • filter表: 负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。

:在 iptables 的四个规则表中,mangle 表和 raw 表的应用相对较少。

五链

  • INPUT:处理入站数据包,匹配目标IP为本机的数据包。
  • OUTPUT:处理出站数据包,一般不在此链上做配置。
  • FORWARD:处理转发数据包,匹配流经本机的数据包。
  • PREROUTING链:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网中的80端口映射到路由器外网端口上。
  • POSTROUTING链:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

表与规则链的匹配顺序

表的优先顺序

数据包到达防火墙时,规则表之间的优先顺序首先过滤raw表里面的规则其次依次过滤> mangle > nat > filter如果所有表都没有匹配到则表示放空

规则链之间的匹配顺序

规则链内的匹配顺序:

  • 自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
  • 若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

主机型防火墙 :

  • 入站数据(来自外界的数据包,且目标地址是防火墙本机) : PREROUTING --> INPUT --> 本机的应用程序
  • 出站数据(从防火墙本机向外部地址发送的数据包) :本机的应用程序–> OUTPUT --> POSTROUTING 网络型防火墙
  • 转发数据(需要经过防火墙转发的数据包) : PREROUTING --> FORWARD --> POSTROUTING
内核中数据包的传输过程

当一个封包进入网卡,首先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,如果来自本机封包则会跳到input进行过滤其次检查OUTPUT 以及 Postrouting 。如果封包需转送处理则会跳入Forward 进行过滤,其次检查 Postrouting。过程中如果符合某条规则将会进行处理 。

iptables的安装

centos7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须关闭firewalld防火墙,在安装iptables。

systemctl stop firewalld                 #关闭firewalld防火墙
systemctl disabie firewalld.service #取消firewalld防火墙开机自启
yum install iptables iptables-services -y#安装iptables防火墙和iptables-services管理程序
systemctl start iptables.service #开启iptables防火墙开启

iptables配置

iptables防火墙的配置方法

iptables  #命令行
system- config- firewall #图形化界面(centos7没办法使用)

iptables命令行配置方法

命令格式:

iptables [-t 表明] 管理选项 [链名] [匹配条件] [-j 控制类型]

注意事项:

  • 不指定表名时,默认指filter表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 选项、链名、控制类型使用大写字母,其余均为小写

常用的控制类型

常用的控制类型 说明
ACCEPT 允许数据包通过。
DROP 直接丢弃数据包,不给出任何回应信息。
REJECT 拒绝数据包通过,会给数据端发送一个响应信息。
SNAT 修改数据包的源地址。
DNAT 修改数据包的目的地址。
MASQUERADE 伪装成一个非固定公网IP地址。
LOG 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包。

常用的管理选项

常用的管理选项 作用
-A 在指定链的末尾追加(–append)一~条新的规则
-I 在指定链的开头插入(–insert)一条新的规则,未指定序号时默认作为第一条规则
-R 修改、替换(–replace) 指定链中的某一条规则,可指定规则序号或具体内容
-P 设置指定链的默认策略(–policy)
-D 删除(–delete) 指定链中的某一条规则,可指定规则序号或具体内容
-F 清空(–flush)指定链中的所有规则,若未指定链名,则清空表中的所有链
-L 列出(–list) 指定链中所有的规则,若未指定链名,则列出表中的所有链
-n 使用数字形式(–numeric) 显示输出结果,如显示IP地址而不是主机名
-v 显示详细信息,包括每条规则的匹配包数量和匹配字节数
–line-numbers 查看规则时,显示规则的序号
查看规则列表

清空规则列表

添加新的防火墙规则

示例:不然别人ping这台主机

示例:插入规则

删除规则

注意:

  • 若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
  • 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
  • 按内容匹配删数时,确保规则存在,否则报错
设置默认策略

iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许

注意:

  • -F仅仅是清空链中的规则,并不影响-P设置的默认规则,默认规则需要手动进行修改。
  • -P设置了DROP后,使用-F一定要小心!防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机或重启服务解决。
  • 如果不写表名和链名,默认清空filter表中所有链里的所有规则。
规则的匹配
通用匹配
  • 可直接使用,不依赖其他条件或扩张,包括网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名 .
地址匹配: -s源地址、-d目的地址 #可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡
示例:
iptables -A FORWARD ! -p icmp -j ACCEPT #!表示取反除了icmp协议都放通
iptables -A INPUT -s 192.168.239.200 -j DROP #拒绝指定主机发数据包过来
iptables -I INPUT -i ens33 -s 192.168.239.0/24 -j DROP#拒绝指定网卡网段主机发数据包过来

隐含匹配
  • 要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件。
  • 端口匹配: --sport 源端口、–dport 目的端口,可以是个别端口、端口范围
--sport 1000                #匹配源端口是1000的数据包
--sport 1000:3000 #匹配源端口是1000-3000的数据包
--sport :3000 #匹配源端口是3000一下的数据包
--sport 1000: #匹配源端口是1000以上的数据包

注意:

  • --sport和--dport 必须配合-p <协议类型>使用
  • 端口可以使用的范围 0-65535

示例:

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I FORWARD -D 192.168.239.0/24 -p tcp --dport 24500:24600 -j DROP #丢弃数据包不给任何回应tcp协议目的端口24500-24600端口

TCP标记匹配: --tcp- flags TCP标记
iptables -I INPUT -i ens33 -P tcp --tcp-flags SYN, RST,ACK SYN -j ACCEPT丢弃SYN请求包, 放行其他包

ICMP类型匹配: --icmp-type ICMP类型,可以是字符串、数字代码

"Echo-Request”(代码为8)表示请求
"Echo- -Reply”(代码为0)表示回显
"Dest ination-Unreachable" (代码为3)表示目标不可达
关于其它可用的ICMP 协议类型,可以执行“iptables -P icmp -h”命令,查看帮助信息
iptables -A INPUT -P icmp -- icmp-type 8 -j DROP #禁止其它主机ping本机
iptables -A INPUT -P icmp --icmp-type 0 -j ACCEPT #允许本机ping其它主机
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping不通其它主机时提示目标不可达
iptables -A INPUT -P icmp -j REJECT #此时其它主机需要配置关于icmp协议的控制类型为REJECT
显示匹配
  • 要求以“-m扩展模块“的形式明确指明类型,包含多端口、MAC地址、ip范围、数据包状态等条件。

多端口匹配:

-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表

示例:

ip范围匹配范围

-m iprange --src-range ip范围
iptables -A INPUT -m -p icmp iprange --src-range 192.168.239.100-192.168.239.200 -j DROP
#在filter表FORWARD处理转发数据末行添加新规则,丢弃239网段100-200的主机发来的数据包

MAC地址匹配

-m mac --mac-source MAC地址
iptanles -A FORWARD -m --mac-source xx:xx:xx:xx:xx:xx -j DROP
#禁止来自某mac地址的数据包通过本机转发
状态匹配

常见的连接状态

NEW 主机连接目标主机,在目标主机上看到的第一个想要连接的包
ESTABLISHED 主机以与目标主机进行通信,判断标准只要目标主机回应了第一个包就进入该状态
RELATED 主机以与目标主机进行通信,目标之际发起新的链接方式,一般与ESTABLISHED配合使用
INVALID 无效的封包,列如数据破损的封包状态
iptables -I INPUT -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT
iptables -A INPUT -P tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -P INPUT DROP
#对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过。
#比如我和你做生意,我们谈成了生意,到了支付的时候,就可以直接调用与这笔生意相关的支付功能

9.Linux之iptables防火墙的更多相关文章

  1. LINUX中IPTABLES防火墙使用

    对于有公网IP的生产环境VPS,仅仅开放需要的端口,即采用ACL来控制IP和端口(Access Control List). 这里可以使用Linux防火墙netfilter的用户态工具 iptable ...

  2. linux 的iptables防火墙

    .a文件就是*.o文件的集合, 是object文件的归档文件, 所以, 用nm -A  ???.a看到的 symbolic符合名称都是 相应的,  包含的  .o文件.... linux 2.4内核中 ...

  3. (转载)Linux下IPTABLES防火墙的设定

    (转载)http://www.jefflei.com/post/1760.html 1.iptables防火墙启动和停止 启动iptables防火墙时命令行输入 #service iptables s ...

  4. (转载)Linux上iptables防火墙的基本应用教程

    (转载)http://www.vpser.net/security/linux-iptables.html iptables是Linux上常用的防火墙软件,下面vps侦探给大家说一下iptables的 ...

  5. Linux上iptables防火墙的基本应用教程

    iptables是Linux上常用的防火墙软件,下面vps侦探给大家说一下iptables的安装.清除iptables规则.iptables只开放指定端口.iptables屏蔽指定ip.ip段及解封. ...

  6. Linux中iptables防火墙指定端口范围

    我需要700至800之间的端口都能tcp访问 代码如下 复制代码 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7 ...

  7. linux设置iptables防火墙的详细步骤(centos防火墙设置方法)

    CentOS系统也是基于linux中的它的防火墙其实就是iptables了,下面我来介绍在CentOS防火墙iptables的配置教程,希望此教程对各位朋友会有所帮助.   iptables是与Lin ...

  8. 为Linux设置IPTables防火墙

    我们 来讨论一下如何为你的CentOS 服务器来设置简单的防火墙. 这里我们以DigitalOcean的CentOS 6 VPS为基础来讨论的,同样也适用于 阿里云上其他类型的LINUX系统. (阿里 ...

  9. Linux下iptables防火墙用法规则详解

    管理网络流量是系统管理员必需处理的最棘手工作之一,我们必需规定连接系统的用户满足防火墙的传入和传出要求,以最大限度保证系统免受×××.很多用户把 Linux 中的iptables当成一个防火墙,从严格 ...

随机推荐

  1. Arrays工具类与Collections工具类

    Arrays工具类 : Arrays.sort():对指定数组进行排序,从小到大 Arrays.toString():返回数组的内容的字符串表示形式 Arrays.asList():数组转List,但 ...

  2. numpy---(精简)

    numpy get started 导入numpy库, 并查看版本 import numpy as np np.__version__ '1.14.3' # pyplot显示画图, 数据分析与可视化 ...

  3. VsCode 常用插件清单

    插件离线安装说明 在一些内网开发环境中,无法做到在线安装,这个时候就需要对插件进行离线安装 了 打开 VSCode 插件市场网址 Extensions for the Visual Studio fa ...

  4. 6.Jenkins进阶之流水线pipeline语法入门学习(1)

    目录一览: 0x00 前言简述 Pipeline 介绍 Pipeline 基础知识 Pipeline 扩展共享库 BlueOcean 介绍 0x01 Pipeline Syntax (0) Groov ...

  5. nodejs的tream(流)解析与模拟文件读写流源码实现

    什么是流? 可读流于可写流 双工流于转换流 背压机制与文件流模拟实现 一.什么是流? 关于流的概念早在1964年就有记录被提出了,简单的说"流"就是控制数据传输过程的程序,比如在那 ...

  6. ASP.NET Core 6.0 添加 JWT 认证和授权

    序言 本文将分别介绍 Authentication(认证) 和 Authorization(授权). 并以简单的例子在 ASP.NET Core 6.0 的 WebAPI 中分别实现这两个功能. 相关 ...

  7. k8s入门之基础环境准备(一)

    一.在虚拟机中安装Ubuntu20.04.4系统 1.下载Ubuntu20.04.4服务器版本系统 下载链接地址如下: https://mirrors.tuna.tsinghua.edu.cn/ubu ...

  8. JS 加载

    DOM 加载完毕后执行,不需要等待image.js.css.iframe等加载 1.$(function() {}) 2.$(document).ready(function() {})  不要写成 ...

  9. 关于利用STL栈求解四则中缀表达式以及中缀表达式转逆波兰表达式和逆波兰表达式的求解

    今天总结一下栈的一个重要应用---四则数学表达式的求解 数学表达式的求解是栈的一个重要的应用,在计算机的应用中 如果求解一个四则运算表达式,我们可能会直接写一个程序例如什么printf("% ...

  10. Redis 为何使用近似 LRU 算法淘汰数据,而不是真实 LRU?

    在<Redis 数据缓存满了怎么办?>我们知道 Redis 缓存满了之后能通过淘汰策略删除数据腾出空间给新数据. 淘汰策略如下所示: 设置过期时间的 key volatile-ttl.vo ...