Linux(三十三)Iptables 防火墙

Posted 云来云去-起飞

tags:

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

目录

 

一、概述

1.1.为什么要使用防火墙     

1.2.两种防火墙的介绍

1.3.包过滤的工作层次

1.4.iptables的四表五链

1.4.1.四表

1.4.2.五链

1.5.数据传输过程

1.5.1.概要叙述

1.5.2.数据包的匹配流程

二、基础命令

2.1.准备工作

2.2.基础语法

2.2.1.语法结构

2.2.2.控制类型

2.2.3.选项

三、案列展示

3.1.查看规则编号

3.2.查看详情

3.3.清空列表

3.4清空自定义的链  -X

3.5.删除指定序列的链

3.6.添加指定ip地址不能访问tcp协议的所有端口

3.7.设置默认的规则

3.8.修改-R的时候需要加上-j  且需要指定规则序号

3.9 icmp类型规则

3.10 设置范围

3.10.1.端口范围 

3.10.2.ip范围 

3.10.3.mac地址

 3.10.4状态匹配

3.11.防火墙规则的保存


一、概述

1.1.为什么要使用防火墙     

       对于没有防火墙存在的一条网络路线中,主机A发送给主机B的任何一个数据包,主机B都会照单全收,即使是包含了病毒、木马等的数据也一样会收。虽说害人之心不可有,但是在网络上,你认为是害你的行为在对方眼中是利他的行为。所以防人之心定要有,防火墙就可以提供一定的保障。

1.2.两种防火墙的介绍

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

1.3.包过滤的工作层次

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

1.4.iptables的四表五链

1.4.1.四表

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

 

1.4.2.五链

  • 规则的作用:对数据包进行过滤或处理
  • 链的作用:容纳各种防火墙规则
  • 链的分类依据 :处理数据包的不同时机
链名特性
INPUT:处理入站数据包;重点是防火墙,外部服务器访问防火墙,目标是防火墙
OUTPUT处理出站数据包;防火墙去访问别人,防火墙为源,目标是B
FORWARD处理转发数据包;仅处理经过防火墙的数据包
POSTROUTING在进行路由选择后处理数据包
PREROUTING在进行路由选择前处理数据包

 

1.5.数据传输过程

1.5.1.概要叙述

       其实,进程间数据传输的方式有多种:共享内存、命名管道、套接字、消息队列、信号量等。上面描述的OSI通信模型只是数据传输的一种方式,它特指网络数据传输,是基于套接字(ip+port)的,所以既可以是主机间进程通信,也可以是本机服务端和客户端进程间的通信。

      无论如何,网络数据总是会流入、流出的,即使是本机的客户端和服务端进程间通信,也需要从一个套接字流出、另一个套接字流入,只不过这些数据无需路由、无需经过物理网卡(走的是LoopBack)。当接收外界发送的数据时,在数据从网卡流入后需要对它做路由决策,根据其目标决定是流入本机数据还是转发给其他主机,如果是流入本机的数据,则数据会从内核空间进入用户空间(被应用程序接收、处理)。当用户空间响应(应用程序生成新的数据包)时,响应数据包是本机产生的新数据,在响应包流出之前,需要做路由决策,根据目标决定从哪个网卡流出。如果不是流入本机的,而是要转发给其他主机的,则必然涉及到另一个流出网卡,此时数据包必须从流入网卡完整地转发给流出网卡,这要求Linux主机能够完成这样的转发。但Linux主机默认未开启ip_forward功能,这使得数据包无法转发而被丢弃。Linux主机和路由器不同,路由器本身就是为了转发数据包,所以路由器内部默认就能在不同网卡间转发数据包,而Linux主机默认则不能转发。

1.5.2.数据包的匹配流程

  • 规则表之间的顺序

raw→mangle→nat→filter

  • 规则链之间的顺序

入站: PREROUTING→INPUT
出站: OUTPUT→POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING

  • 规则链内的匹配顺序

 按顺序依次检查,匹配即停止;若找不到相匹配的规则,则按该链的默认策略处理,默认策略是放空
 

二、基础命令

2.1.准备工作

#Centos7 关闭firewalld
systemctl stop firewalld
systemctl disable firewalld

#安装防火墙iptables
yum -y install iptables-services

#设置iptables开机自启动
systemctl start iptables
systemctl enable iptables

2.2.基础语法

2.2.1.语法结构

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

 

 

 

 

 

2.2.2.控制类型

 

 

 

  • ACCEPT 允许通过
  • DROP 直接丢弃
  • REJECT 拒绝通过
  • LOG 记录日志信息

2.2.3.选项

-A在指定链末尾追加一条iptables -AINPUT
-I在指定链中插入一条新的,未指定序号默认作为第一条iptables -I INPUT
-P指定默认规则iptables -POUTPUT ACCEPT
-D删除 iptables -t nat -D INPUT
-R修改、替换某一条规则iptables -t nat -R INPUT
-L查看iptables -t nat -L
-n所有字段以数字形式显示(比如任意ip地址是e0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名)iptables -L -n,iptables -nL,iptables -vnL
-v查看时显示更详细信息,常跟-L一起使用
--line-number规则带编号iptables -t nat -L -n --line-number /iptables -t nat -L --line-number-F清除链中所有规则iptables -F
-X清空自定义链的规则,不影响其他链iptables -x
-Z清空链的计数器(匹配到的数据包的大小和总和) iptables -Z
-s查看链的所有规则或者某个链的规则/某个具体规则后面跟编号

 

三、案列展示

3.1.查看规则编号

[root@nw-server3 ~]# iptables -t filter -L --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED

3.2.查看详情

[root@nw-server3 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 744K packets, 1361M bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 727K packets, 110M bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

3.3.清空列表

3.4清空自定义的链  -X

3.5.删除指定序列的链

3.6.添加指定ip地址不能访问tcp协议的所有端口

[root@nw-server3 ~]# iptables -t filter -A INPUT -p tcp -s 192.168.1.100 -j DROP
[root@nw-server3 ~]# 
[root@nw-server3 ~]# 
[root@nw-server3 ~]# 
[root@nw-server3 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  192.168.1.100        anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@nw-server3 ~]# 

 

 

3.7.设置默认的规则

  • 添加所有拒绝(默认的时候)无需要 -j DROP 而是直接DROP 

 

3.8.修改-R的时候需要加上-j  且需要指定规则序号

 

 

3.9 icmp类型规则

icmp类型匹配:编写icmp类型匹配规则时使用“--icmp-type ICMP类型”的形式,针对的协议是icmp

icmp类型:

  • Echo-Request:代码为8
  • Echo-Reply:代码为0

列子如:

[root@nw-server3 ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@nw-server3 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  192.168.1.100        anywhere            
DROP       icmp --  anywhere             anywhere             icmp echo-request

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

 

 

3.10 设置范围

     显示匹配:这种匹配方式要求有额外的内核模块提供支持,必须手动以“-m模块名称"的形式调用相应的模块多端口匹配、ip范围匹配、mac地址匹配、状态匹配.

3.10.1.端口范围 

    #多端口匹配:编写多端口匹配时使用“-m multiport --dports端口列表”“-m multiport --sports 端口列表”的形式
      iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACEPT 允许开放25,80,110,143端口,以便访问邮件和网站服务
      iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT开放ftp访问,冒号表示端口的范围从20-21端口

      iptables -AINPUT -p tcp -m multiport --dport 20,21-j ACCEPT开放ftp访问的另一种方法,写成多端口模式,端口之间用逗号分*这里--dport和--dports都可以
      iptables -A INPUT -p tcp -m multiport --dport 80,22 -s 192.168.245.0/24 -j ACCEPT

 

3.10.2.ip范围 

   ip范围匹配:编写ip地址范围匹配时使用-m iprange --src-range IP范围”“-m iprange --dst-range IP范围”的形式
   iptables -A FORWARD -p tcp -m iprange --snc-range 192.168.100.110-192.168.100.150 -j REJECT不允许192.168.100.110-192.1
   [rootClocalhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.245.1-192.168.245.211-j ACCEPT

 

 

3.10.3.mac地址

mac地址匹配:编写mac地址匹配规则时使用“-m mac --mac-source MAC地址”
iptables -A INPUT -m mac--mac-source 00:0c:29:52:c0:ae -j DROP不允许mac地址为e0:0c:29:52:c0:ae的任何访问
iptables -R INPUT 1 -m mac --mac-source 00:0c:29:52:cO:ae -j REJECT

 3.10.4状态匹配

状态匹配:编写iptables规则时使用-m state --state连接状态”的形式常用的连接状态:
NEW:想要新建立联机的封包状态
ESTABLISHED:已经联机成功的联机状态
RELATED:表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因关
INVALID:无效的封包,例如数据破损的封包状态
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 允许响应请求的连接放行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

 

3.11.防火墙规则的保存

防火墙规则的保存
iptables-save /查看当前规则
默认存放路径:/etc/sysconfig/iptables
iptables-save >/etc/sysconfig/iptables//保存到默认配置文件下次重启不会丢失
[root@localhost ~]# systemctl stop iptables.service//停止iptables服务会清空所有规则

 

 

以上是关于Linux(三十三)Iptables 防火墙的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习笔记(三十三)iptables备份firewalld

第十三章 LINUX安全IPTABLES基础-CENTOS7.5知识

Linux骚操作之第三十话防火墙

2018-06-11 第十三次课

Linux学习笔记(三十二)iptables filter表案例 iptables nat表应用

学习三十三