iptables防火墙

安全技术
入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,
主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类似于监控系统,一般采用旁路部署(默默的看着你)方式。
 

入侵防御系统(Intrusion Prevention System):以透明模式工作,
分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,
在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)

防火墙( FireWall ):隔离功能,工作在网络或主机边缘
对进出网络或主机的数据包基于一定的规则检查,
并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,
基本上的实现都是默认情况下关闭所有的通过型访问,
只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中

防水墙
广泛意义上的防水墙:防水墙(Waterwall),与防火墙相对,是一种防止内部信息泄漏的安全产品。   
网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。
防水墙针对这四种泄密途径,在事前、事中、事后进行全面防护。
其与防病毒产品、外部安全产品一起构成完整的网络安全体系

传输层              端口            防火墙
网络层               ip               路由器 三层 
数据链路层       mac            交换机

按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网

实现方式划分:
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,
如:华为,山石hillstone,天融信,
启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40亿美元收购)等
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows防火墙 

按网络协议划分:
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层

包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,
被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,
目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过

优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等

应用层防火墙
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来

实现优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用层去检查

防火墙工具介绍
一、iptables
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
[root@localhost ~]# iptables --version
iptables v1.4.21

二、firewalld
从CentOS 7版开始引入了新的前端管理工具
软件包:
firewalld
firewalld-config

管理工具:
firewall-cmd 命令行工具
firewall-config 图形工作
 

Linux的防火墙体系主要工作在网络层,
针对数据包实施过滤和限制,
属于典型的包过滤防火墙(或称为网络层防火墙)。
Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用

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

通信五元素: 源/目的 端口 源/目的 IP   协议:(tcp/udp)
SCTP:在网络连接两端之间同时传输多个数据流的协议。SCTP提供的服务与UDP和TCP类似
通信四元素:源/目的 端口 源/目的 IP

iptables :

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

四个表table:filter、nat、mangle、raw

Filter表:用于过滤数据包,可以控制数据包的进出,以及是否接受或拒绝数据包。
NAT表:用于网络地址转换,可以改变数据包的源地址和目标地址,以便实现不同的网络连接。
Mangle表:用于修改数据包的头部信息,可以更改数据包的TTL、QoS等信息。
Raw表:用于控制数据包的状态跟踪,可以决定是否跳过后续的处理流程

security也算一个表
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现

优先级由高到低的顺序为:
security -->raw-->mangle-->nat-->filter

iptables五条链是:

PREROUTING链:处理数据包进入本机之前的规则。ip地址转换
INPUT链:处理数据包进入本机的规则。
FORWARD链:处理数据包转发到其他主机的规则。
OUTPUT链:处理本机发出的数据包的规则,一般不做处理。
POSTROUTING链:处理数据包离开本机之后的规则。ip地址转换

内核中数据包的传输过程

1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
2. 如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。
数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达
3. 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

  

三种报文流向:

流入本机:PREROUTING --> INPUT-->用户空间进程 httpd服务-目的转换-httpd
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING  httpd服务-out-源地址
转发:PREROUTING --> FORWARD --> POSTROUTING  

nat PREROUTING   目的地址转换,要把别人的公网IP换成你们内部的IP
nat POSTROUTING  源地址转换,要把你的内网地址转换成公网地址才能上网,一般用于对外发布内网的服务

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

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

systemctl disable  --now  firewalld.service
##开机不自启  并且立即关闭
systemctl enable  --now  firewalld.service
##开机自启  并且 立即开启

yum -y install iptables iptables-services
systemctl start iptables.service
systemctl enable iptables.service

iptables的命令格式:

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

-t:如果不指定  默认是filter

管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;
控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等

注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链,一般不这么操作

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

管理选项         用法示例                                                     

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

匹配的条件                   作用
-p                 指定要匹配的数据包的协议类型
-s                 指定要匹配的数据包的源IP地址
-d                 指定要匹配的数据包的目的IP地址
-i                 指定数据包进入本机的网络接口
-o                 指定数据包离开本机做使用的网络接口
--sport             指定源端口号
--dport             指定目的端口号

 

控制类型

ACCEPT:允许数据包通过。 
DROP:    直接丢弃数据包,不给出任何回 应信息。 
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。

SNAT:     修改数据包的目标地址
DNAT:     修改数据包的源地址 
LOG:       在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则

[root@zy1 ~]# iptables -F    #不加表名 默认filter表
[root@zy1 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 57 packets, 5702 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 34 packets, 3168 bytes)
 pkts bytes target     prot opt in     out     source               destination 

禁止所有主机ping本机 

 允许所有主机ping本机,*注:此时并不可以ping通,因为匹配规则自上向下按顺序依次进行检查,找到相匹配的规则即停止,此时的匹配条件都是icmp,而ACCEPT在REJECT下面

 此时若要ping通需:[root@zy1 ~]# iptables -t filter -I INPUT 1 -p icmp -j ACCEPT  # 表示在第一行添加规则,1可以不写,默认就是第一行。

拒绝某一台主机ping本机:

[root@zy1 ~]# iptables -t filter -A INPUT -s 192.168.126.22 -p icmp -j REJECT 

#若拒绝多个台主机可以在ip地址后面加逗号",",如:192.168.126.22,192.168.126.23

把本机的22端口拒绝其他主机访问

#两个端口用冒号":"隔开,[root@zy1 ~]# iptables -A INPUT -p tcp --dport 22:80 -j REJECT ,小号端口必须写在前面

*多端口匹配:[root@zy1 ~]# iptables -A INPUT -p tcp -m multiport --dport 80,20,30 -j REJECT     #以逗号分隔,部分端口大小顺序
 

删除规则 

D删除  :
1.根据序号删除内容
[root@localhost ~]# iptables -D INPUT 1 #删除指定的INPUT链中的第一条规则

2.内容匹配删除(有两个相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的
[root@localhost ~]# iptables -D INPUT -p icmp  -j REJECT #删除序号小的

 注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。
直到删除最后一条时,才能将该规则全部清除 。
一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错

修改规则 (不推荐使用)

-R 直接修改

[root@localhost ~]# iptables -R INPUT 1 -p icmp -j REJECT #即把第一条规则进行替换成后面的内容

设置默认规则策略(*只有ACCEPT和 DROP)

[root@localhost ~]#iptables -P INPUT DROP         #即设置默认全部拒绝

1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改
2.-P 设置了DROP后,使用 -F 一定要小心!
#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决
此时的解决方案有三种:
第一种:我的防火墙设置只是临时设置,并未保存,重启服务器即可
第二种:操作服务器,重启iptables服务 
第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!
在生产中都是默认DROP

通用匹配:

网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名
地址匹配: -s 源地址、-d目的地址
#可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡  
感叹号”!”表示取反

[root@localhost ~]# iptables -A INPUT ! -p icmp -j ACCEPT  #除了icmp以外,所有的协议都可以进入
#这是假的取反。定义的默认策略还在执行ACCEPT,只有该变默认策略,才能生效

[root@localhost ~]# iptables -I INPUT 1 -i ens33 -s 192.168.233.0/24 -j DROP #禁止指定的网络设备名称ens33的所有网段

[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.0/24 -p tcp --dport 80 -j REJECT #禁止整个网段访问80端口

ICMP模块
ICMP类型可以是字符串、数字代码:

ICMP类型                                                      含义
Echo-Request (代码为8)                        表示请求
Echo--Reply (代码为0)                           表示回显 #回复信息显示
Destination-Unreachable (代码为3)       表示目标不可达

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j REJECT   #拒绝请求 其他的主机都不能ping本机,本机还是可以ping其他主机

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j REJECT   #拒绝回显,本机ping不了其他的主机,且没有任何显示,#其他的主机还是ping通本机,因为出入的数据并没有被屏蔽,只针对自己

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT   ##当本机ping 不通其它主机时提示目标不可达,需要其他主机设置REJECT,在其他主机上设置拒绝,才能生效,了解即可
 

多端口匹配

要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT
多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则,逗号分隔
[root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP
多端口匹配,一次性放通多个udp网络协议的端口匹配规则

IP范围匹配

-m iprange --src-range  源IP范围
-m iprange --dst-range  目的IP范围

[root@localhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT
#禁止网段内的ip地址ping主机
 

MAC匹配

-m mac --mac-source MAC地址
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值