linux-iptables防火墙

Posted 可乐卷儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux-iptables防火墙相关的知识,希望对你有一定的参考价值。

一、Linux防火墙

1、防火墙的2种称呼

  • netfilter
    位于Linux内核中的包过滤功能体系,主要提供功能模块,称为Linux防火墙的“内核态”
  • iptables
    用来管理防火墙规则的工具,称为Linux防火墙的"用户态”;centos7需要安装服务,安装完位于/sbin/iptables

2、防火墙的工作方式

包过滤的工作层次

  • 主要是网络层,针对IP数据包
  • 体现在对包内的IP地址、端口等信息的处理上

3、配置文件

iptables的配置文件:/etc/sysconfig/iptables

若系统reboot就不存在

那么如何长久的保存

  1. iptables-save ##查看防火墙保存的信息
  2. iptables-save > /etc/sysconfig/iptables ##把已保存的信息写入防火墙的配置文件内,重启也不会消失

二、iptables的四表五链

1、规则表-四表

  • 表的作用:容纳各种规则链
  • 表的划分依据:防火墙规则的作用相似

规则表的分类

表名特性
raw表确定是否对该数据包进行状态跟踪
mangle表为数据包设置标记;数据包的服务类型是否需要标记
nat表修改数据包中的源、目标IP地址或端口时,查看此表
filter表确定是否放行该数据包(过滤);对具体的某些数据包的策略进行具体的规则匹配

在现网生产环境中,raw表和mangle表基本上不使用,主要是nat表和filter两种表

2、规则链-五链

  • 规则的作用:对数据包进行过滤或处理
  • 链的作用:容纳各种防火墙规则
  • 链的分类依据 :处理数据包的不同时机

规则链的分类

链名特性
INPUT:处理入站数据包;重点是防火墙,外部服务器访问防火墙,目标是防火墙
OUTPUT处理出站数据包;防火墙去访问别人,防火墙为源,目标是B
FORWARD处理转发数据包;仅处理经过防火墙的数据包
POSTROUTING在进行路由选择后处理数据包
PREROUTING在进行路由选择前处理数据包

在这里插入图片描述

3、四表五链的关系

  • nat表包含的链
    • PREROUTING链
    • POSTROUTING链
    • INPUT链
    • OUTPUT链
  • filter表包含
    • INPUT链
    • OUTPUT链
    • FORWAED链

4、数据包过滤的匹配过程

  • 规则表之间的顺序
    raw→mangle→nat→filter
  • 规则链之间的顺序
    • 入站: PREROUTING→INPUT
    • 出站: OUTPUT→POSTROUTING
    • 转发:PREROUTING→FORWARD→POSTROUTING
  • 规则链内的匹配顺序
    按顺序依次检查,匹配即停止;若找不到相匹配的规则,则按该链的默认策略处理,默认策略是放空

比如
在这里插入图片描述
上图数据包4.1接收过来,根据规则一一对应,都没有对应的规则就默认策略放空,不想放空就可以配置默认策略

三、iptables防火墙原理

1、基本语法

iptables防火墙是需要安装的

systemctl stop firewalld  #关闭防火墙
systemctl disable firewalld  #开启不自启防火墙
yum -y install iptables-services.x86_64    ##安装iptables防火墙
systemctl  start iptables   ##打开iptables防火墙
systemctl  enable iptables  ##开启自启iptables防火墙

基本语法构成

iptables [-t 表名] 选项 [链名] [条件] [j 控制类型]

注意事项

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

2、数据包的常见控制类型(需大写)

  • ACCEPT 允许数据包通过
  • REJECT 拒绝数据包通过,必要时会给数据包发送端一个响应信息
  • DROP 直接丢弃数据包,不给任何回应.
  • LOG 在/var/log/messages文件中记录日志信息,然后将数据包给下一-条规则,它本身不处理数据包

3、管理选项

  • 默认规则
-P  #指定默认规则,控制类型无须加“-j”
  • 增加
-A  #在指定链末尾追加一条  
-I  #在指定链中插入一条新的,未指定序号默认作为第一条;在前面插入
  • 修改、替换、删除
-D  #删除
-R  #修改、 替换某一条规则,需要制定规则链的编号
  • 查看
-L   #查看
-L --line-number  #显示规则编号
-n   #所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere, 比如显示协议端口号而不是服务名)
-v   #查看时显示更详细信息,常跟-L-起使用
  • 清空
-F    ##清除链中所有规则
-X    ##清空自定义链的规则,不影响其他链
-Z    ##清空链的计数器 (匹配到的数据包的大小和总和) 
-S     ##查看链的所有规则或者某个链的规则/某个具体规则后面跟编号

查看详情的固定用法

iptables -vnL  ## 查看filter表中所有规则并显示详情

在这里插入图片描述
iptables各字段解读
pkts:对应规则匹配到的报文的个数
bytes :对应匹配到的报文包的大小总和
target:规则对应的target,往往表示规则对应的"动作",即规则匹配成功后需要采取的措施
prot:表示规则对应的协议,是否只针对某些协议应用此规则
opt:表示规则对应的选项
in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则
out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则
source:表示规则对应的源头地址,可以是一个IP,也可以是-一个网段
destination:表示规则对应的目标地址。可以是-一个IP,也可以是一个网段
packages:匹配到的包数量
bytes:匹配到的总字节数

4、实例

iptables -I INPUT -j DROP ## 拒绝入站数据包
若给filter表增加一条INPUT链的DROP规则,这时xshell
在这里插入图片描述
iptables -I INPUT -j ACCEPT ## 给filter表添加第一条规则,允许所有数据包放心本机,这时xshell就可以连接
在这里插入图片描述
iptables -D INPUT -j REJECT
在这里插入图片描述

iptables -R INPUT 1 -j DROP #修改INPUT链编号1止
iptables -L ##没有-t,默认查看filter表
iptables -t filter -L #查看filter表内的所有规则;查看默认规则
在这里插入图片描述
iptables -t filter -L --line-number #带编号查看filter表
在这里插入图片描述
-n #所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere, 比如显示协议端口号而不是服务名)
iptables -L -n, iptables -nL, iptables -vnL
iptables -t filter -L -n ##查看filter表内的所有规则,所有字段数字显示
在这里插入图片描述
在这里插入图片描述

四、防火墙的匹配规则

1、通用匹配

1.1、地址匹配

icmp是ping的协议
-s:source;源地址
-d:目标地址

禁止192.168.245.211来ping我
在这里插入图片描述
禁止192.168.245.211的所有tcp协议的连接
在这里插入图片描述

1.2、协议匹配

iptables编写协议匹配的规则时用-p指定谢一鸣,如tcp、udp、icmp和all

  • icmp类型匹配
    编写icmp类型匹配规则时使用“–icmp-type ICMP类型”,针对的协议是icmp
    icmp类型
  • Echo-Request:代码为8
  • Echo-Reply:代码为0
    iptables -A INPUT -p icmp --icmp-type 8 -j DROP ##允许本机ping别的主机但是不允许别的主机ping本机
    tcp
iptables -t filter -A INPUT -p icmp -s 192.168.35.10 -j DROP ##禁止192.168.35.10来ping我
iptables -t filter -A INPUT -p tcp -s 192.168.35.10 -j DROP ##禁止192.168.35.10的所有tcp协议的连接
iptables -t filter -A INPUT -p tcp -d 192.168.35.10 -j DROP ##禁止本机所有tcp协议连接10
iptables -t filter -A FORWORD -p tcp -s 192.168.35.10 -d 192.168.35.40 -j DROP ##不允许源10访问目的40
iptables -t filter -A FORWORD -p tcp -s 192.168.35.0/24 -d 192.168.35.40 -j DROP ##源地址也可以写网段

1.3、网络接口匹配

INPUT -i ##数据从这个网卡口进入时进行什么操作
OUTPUT -o  ##数据从这个网卡口出去时进行什么操作

iptables -A OUTPUT -o ens33 -j DROP ##拒绝从网卡ens33出去
在这里插入图片描述
iptables -A INPUT -i ens33 -s 192.168.35.10 -j DROP ## 禁止从源ip192.168.245.211从网卡ens33进入
在这里插入图片描述
!:非
iptables -A INPUT ! -p icmp -j DROP ##非icmp无法进入;即只能ping
在这里插入图片描述

2、显示匹配

这种匹配方式要求有额外的内核模块提供支持,必须手动以“-m 模块名称”的形式调用相应的模块
端口类型

--dport:目标端口
--sport:源端口

实例
iptables -A INPUT -p tcp --dport 80 -s 192.168.35.10 -j DROP ##禁止10访问80端口

2.1、多端口匹配

需要调用内核模块 -m multiport

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

实例

  • 不允许211访问端口80 22 23;端口之间使用逗号“,”相连
    iptables -A INPUT -p tcp -m multiport --dport 80,22,23 -s 192.168.35.10 -j DROP
  • 也可以20:80 ##连续的端口;是一个范围,21也包含在内
    iptables -A INPUT -p tcp -m multiport --dport 20:80 -s 192.168.35.10 -j DROP

2.2、ip范围匹配

需要调用ip地址范围模块:-m iprange

-m iprange --src-range ip范围:源ip范围
-m iprange --dst-range ip范围:目标ip范围

实例
iptables -A OUTPUT -p icmp -m iprange --dst-range 192.168.35.30-190-192.168.35.35 -j DROP
##不允许本机ping的范围192.168.35.30-192.168.35.35
在这里插入图片描述

2.3、mac地址匹配

需要调用mac地址模块 -m -mac

-m -mac --mac-source MAC地址

实例
iptables -A INPUT -p icmp -m mac --mac-source 00:0c:29:01:e6:11 -j DROP ##禁止其他主机的源mac地址ping本机
在这里插入图片描述

2.4、状态匹配

使用“-m state --state 连接状态”的形式

常用的连接状态:

  • NEW:表示包将要或已经开始建立一个新的连接,或者是这个包和一个还没有在两端都有数据发送的连接有关
  • ESTABLISHED:意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送
  • RELATED:说明包正在建立一个新的连接,这个连接是和一个已建立的连接相关的。比如,FTP data transfer,ICMP error 和一个TCP或UDP连接相关
  • INVALID:意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题

注意NEW状态并不在试图建立新连接的TCP包里寻找SYN标记,因此它不应该不加修改地用在只有一个防火墙或在不同的防火墙之间没有启用负载平衡的地方

实例
在这里插入图片描述
在这里插入图片描述

以上是关于linux-iptables防火墙的主要内容,如果未能解决你的问题,请参考以下文章

四表五链 Linux-iptables 防火墙

linux-iptables

linux-iptables匹配条件总结

Linux-Iptables/Firewall服务

Linux-SNAT和DNAT

防火墙 PAT配置