Linux系统安全之iptables防火墙

一.iptables防火墙基本介绍

  • 主要作用:隔离功能
  • 一般部署在网络边缘或主机边缘 
  • 主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。

二、划分的方式 

2.1 按保护范围划分:

  •  主机防火墙:服务范围为当前一台主机
  • 网络防火墙:服务范围为防火墙一侧的局域网

2.2  按实现方式划分:

  • 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现
  • 软件防火墙:通过代码实现,并进行判断

2.3  按网络协议划分:

  • 网络层防火墙:OSI模型下四层,又称为包过滤防火墙
  • 应用层防火墙/代理服务器:设置数据的进出

三、Linux防火墙工具

  • friewalld:centos7专有
  • iptables:包过滤防火墙
  • selinux:自带的安全工具

3.1 iptables

  • Linux的防火墙体系主要工作在网络层,
  • 针对数据包实施过滤和限制,
  • 属于典型的包过滤防火墙(或称为网络层防火墙)

3.1.1 作用 

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

3.2 iptables组成及原理 

3.2.1 组成部分

iptables由四个表table和五个链chain以及一些规则组成(SELinux也是一个表,但它是独立的,不在我们讨论的范围内)

 四表:raw、mangle、nat、filter

  • raw: 用于控制数据包的状态跟踪,可以决定是否跳过后续的处理流程。
  • mangle:数据标记
  • nat:地址转换表
  • filter:过滤规则表,根据规则表来定义或者过滤符合条件的数据包,默认表

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

 五链:

  • INPUT:处理数据包进入本机的规则
  • OUTPUT:处理数据包发出的规则
  • PREROUTING:处理数据包进入本机之前的规则
  • POSTROUTING:处理数据包离开本机之后的规则
  • FORWARD:处理数据包转发到其他主机的规则。

3.2.2 iptables规则

表里面有链,链里面有规则,规则就是我们自定义的对于包的控制命令

3.2.3 匹配顺序 

根据表的优先级匹配,在表中从上到下 进行检查,找到匹配规则立即停止,不再继续查找,如破i配不到,按照链的默认规则处理

3.2.4 三种报文流向

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

3.3 iptables命令格式 

iptable [-t表名](不指定表名,默认就是filter表) 管理选项[链名] [匹配条件] [-j 控制类型]

3.3.1 管理选项 

管理选项 用法
-A 在指定链末尾追加一条
-I 在指定链中插入一条新的,可以指定序号,-I后跟数字表示序号
-P 修改链的默认策略
-D 删除
--line-numbers 规则带编号
-R 修改、替换某一条规则(修改一般不用)
-L 查看链中规则
-F 清空链中所有规则(!!!慎用)
-n 所有字段以数字形式显示
 -v 查看时显示更详细信息,常跟-L一起使用    (查看) 
-X 清空自定义链的规则,不影响其他链 
-Z 清空链的计数器(匹配到的数据包的大小和总和)
-S 看链的所有规则或者某个链的规则/某个具体规则后面跟编号

3.3.2 匹配条件

匹配的条件  作用
-p 指定要匹配的数据包的协议类型
-s 指定要匹配的数据包的源IP地址(指定多个ip用“ ,”隔开,加在协议前)
-d 指定要匹配的数据包的目的IP地
-i 指定数据包进入本机的网络接口
-o 指定数据包离开本机做使用的网络接口
--sport 指定源端口号(指定多个端口用” :”隔开,加在协议后,注意小端口号在前)
--dport 指定目的端口号

3.3.3 控制类型 

类型 作用
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给出任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应信息
SNAT 修改数据包的源IP地址
DNAT 修改数据包的目的IP地址

四、 实际操作

4.1 前期准备

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

4.2 查看默认规则

iptables -vnL --line-number 
##不指定表,默认就是filter
##--line-numbers  规则带编号

4.3 修改链的默认规则 

在生产工作中,iptables所有链默认规则都是DROP(相当与设置了白名单)

格式:iptables -P INPUT DROP

1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改
2.-P 设置了DROP后,使用 -F 一定要小心!
#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决

此时的解决方案有三种:
第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可

第二种:操作服务器,重启iptables服务 

第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!

在生产中都是默认DROP

4.4 不允许其他主机ping本机,给响应信息REJECT,ping所使用的协议为icmp

iptables -t filter -A INPUT -p icmp -j REJECT
#不允许其他主机ping本机,给响应信息REJECT,ping所使用的协议为icmp
 
iptables -vnL --line-number 
#使用数字形式(fliter)表所有链,编号显示

换另一台主机测试:立即生效

Linux系统安全之iptables防火墙_第1张图片

 4.5 指定序号插入,在上一规则前添加允许其它主机ping本机

iptables -I INPUT 1 -p icmp -j ACCEPT

 换另一台主机测试

Linux系统安全之iptables防火墙_第2张图片

查看规则

Linux系统安全之iptables防火墙_第3张图片

 4.6 按照行号删除

iptables -D INPUT 2
#删除第二行规则

Linux系统安全之iptables防火墙_第4张图片Linux系统安全之iptables防火墙_第5张图片

 4.7 按照内容删除

iptables -D INPUT -p icmp -j DROP
#将含有icmp协议使用DROP类型的规则删除

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

五、通用匹配

 可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。

  • 协议匹配:-p 协议名
  • 地址匹配:-s 源地址、-d 目的地址   可以是IP、网段、域名、空(任何地址)
  • 接口匹配:-i 入站网卡、-o出站网卡
iptables -A INPUT -s 192.168.247.0/24 -p tcp --dport 80 -j REJECT
#禁止整个网段访问80端口的服务

 六、隐藏模块

iptables在使用-p 指定协议时,若指明特定协议后就无须再使用-m指明扩展模块的扩展机制。

6.1 指定多个端口

  • -m multiport --sport 源端口列表
  • -m multiport --dport 目的端口列表
例1:
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT
#多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则

例2:
[root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP
#多端口匹配,一次性放通多个udp网络协议的端口匹配规则

 6.2 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主机

6.3 MAC匹配

该方式范围过于有限,且操作不方便,用的不多,了解即可

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

你可能感兴趣的:(linux,系统安全,服务器,运维)