Linux下的火墙管理及优化

发布于:2024-12-07 ⋅ 阅读:(160) ⋅ 点赞:(0)

一.什么是防火墙

  • 从功能角度来讲:

防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。

  • 从功能实现角度来讲:

火墙是系统内核上的一个模块netfilter(数据包过滤机制)。
通过netfiler来管理kernelspace中的策略。

 二.netfilter简介

  • Netfilter是Linux 2.4.x引入的一个子系统。
  • 它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪等等。
  • netfilter分析OSI七层协议的2、3、4层。
  • netfiler可以直接分析数据包头部数据,包括硬件地址,软件地址、TCP、UDP、ICMP等数据包的信息都可以进行过滤分析。

Inux的netfilter机制可以进行的工作有:

  • 拒绝让Internet的数据包进入主机的某些端口
  • 拒绝让某些来源ip的数据包进入
  • 拒绝让带有某些特殊标志(fag)的数据包进入,最常拒绝的就是带有SYN的主动连接的标志了
  • 分析硬件地址(MAC)来决定连接与否
  • 地址转换

防火墙并不能有效阻挡病毒或木马程序,并且防火墙对于内部LAN的攻击无能为力

三.netfiler策略管理工具

netfilter这个内核网络栈过意框架的使用需要通过iptables或nftables来进行

与netfilter进行交互工具常用种类:

  • iptables服务使用iptables交互 RHEL6之前系统默认使用此服务,管理手段丰富,配置比较复杂
  • firewalld服务使用nftables交互 RHEL6及之后的版本中默认使用此服务,配置类似windows火墙,功能模块度高,使用简单

四.netfilter的五类hook函数及iptables的默认表和链

4.1.五类HOOK函数

  • NF_IPPRE ROUTING:位于路由之前,报文一致性检査之后(报文一致性检査包括: 报文版本、报文长度和checksum
  • NF IP LOCAL IN:位于报文经过路由之后,并且目的是本机的
  • NF IP FORWARD:位于在报文路由之后,目的地非本机的
  • NF IP LOCAL OUT:由本机发出去的报文,并且在路由之前
  • NF_IP _POST ROUTING:所有即将离开本机的报文

五.什么是内核空间的iptables

Iptables 是基于Netfilter框架实现的报文选择系统
iptables用于报文的过滤、网络地址转换和报文修改等功能
Iptables 本质上是包含了5个规则表,而规则表则包含了一些列的报文的匹配规则以及操作目标

1、raw表:
第一优先级的表,设置raw表规则后,不会对数据包进行链接跟踪和NAT转换,使用于PREROUTING和OUTPUT链,对应的动作为NOTRACK。
2、mangle表:
第二优先级的表,根据规则,修改数据包的TOS(TypeOfService,服务类型)、TTL(TimeToLive,生存周期)以及设置Mark标记,以实现Qos以及策略路由等。
3、nat表:
第三优先级的表,网络地址转换表,用于修改源和目的的地址,分SNAT(源目的地址转换)和DNAT(目的地址转换)
4、filter表:
第四优先级的表,用于控制到达链(forward链、input链、output链)上的数据包,是放行(accepte)、丢弃(drop)或者拒绝(reject)。

5、security表:
最不常用的表(通常,我们说iptables只有4张表,security表是新加入的特性),用于在数据包上应用SELinux。

六.iptables服务

6.1.iptables介绍

  1. iptables服务是用户管理内核空间的iptables的管理工具,通过iptables书写内核空间的
  2. iptables策略iptables的规则是至上而下的读取方式,遇到与数据包信息匹配的规则后直接采用
  3. iptables的规则默认保存在内存中,如果需要永久保存需要把策略以字符的形式保存到/etc/sysconfig/iptables中

安装:

查看火墙策略

6.2.iptables命令的语法格式及常用参数

语法格式:

iptables -t 表名<-A/I/D/R>规则链名[规则号]<-i/o 网卡名>-p 协议名 <-s 源IP/源子网>
--sport 源端口<-d 目标IP/目标子网>--dport 目标端口 -j 动作

查看当前策略

清空制定表中策略

允许本机回环接口访问

允许本机sshd的22端口被访问

仅允许192.168.71.40访问22端口

删除filter表中INPUT链的第三条策略

修改filter表中INPUT链的第2条策略

在filter表中建立名称叫做easylee的自定义链

在filter表中重命名easylee为EASYLEE

删除EASYLEE链

snat地址转换

dnat地址转换

七.firewalld

7.1.firewalld服务管理方式与iptables的管理方式区别

  • iptables是基于Linux内核的Netfilter子系统构建的,直接操作Netfilter;而firewalld则通过libnftables库与Netfilter交互,提供了一个更高的抽象层。
  • iptables使用基于表的规则集,包括filter、nat、mangle、raw及securty五个表;firewalld采用基于区域的规则集,包括default、public、internal、external和dmz五个区域。
  • iptables的配置较为复杂,需要用户掌握特定的命令行语法;firewalld提供了更直观和灵活的配置方式,支持命令行和图形界面。
  • 由于firewalld通过libnftables库与Netfilter交互,其性能相对于直接操作Netfilter的iptables来说较低。
  • 由于firewalld通过libnftables库与Netfilter交豆,其性能相对于直接操作Netfilter的iptables来说较低。

7.2.firewalld域介绍

firewalld默认提供的九个zone配置文件都保存在"/usr/lib/firewalld/zones/"目录下,分别为:block.xml drop.xml home.xml public.xml work.xml dmz.xml external.xmlinternal.xml trusted.xml

在RHEL7中,firewalld服务是默认的防火墙配置管理工具,他拥有基于CLI(命令行界面)和基于GUl(图形用户界面)的两种管理方式。firewall-config和firewall-cmd是直接编辑xml文件,其中firewall-config是图形化工具,firewall-cmd是命令行工具。

(firewalld中默认使用的域是pubic;firewalld默认提供的九个zones的调用文件都保存在"/usr/lib/firewalld/zones/”目录下)

7.3.firewall-cmd命令详解

1.火墙信息查看

[root@server ~]# firewall-cmd --state
running
[root@server ~]# firewall-cmd --list-all
public(active)
    target: default
    icmp-block-inversion:no
    interfaces:ens160
    sources:
    services:cockpit dhcpv6-client dns http ssh
    ports:
    protocols:
    forward:yes
    masquerade:no
    forward-ports:s
    ource-ports:
    icmp-blocks:
    rich rules:

2.管理域

[root@server ~]# firewall-cmd --get-default-zone
public
[root@server ~]# firewall-cmd --set-default-zone=trusted
[root@server ~]# firewall-cmd --get-zones
[root@server ~]# firewall-cmd --get-active-zones
docker
    interfaces:docker0
trusted
    interfaces:ens160

3.管理服务

[root@server ~]# firewall-cmd --get-services
[root@server ~]# firewall-cmd --list-services --zone=public
[root@server ~]# firewall-cmd --permanent --add-service=http --zone=public
[root@server ~]# firewall-cmd--permanent --remove-service=http

4.管理ip

[root@server ~]# firewall-cmd --add-source=192.168.71.1 --zone=trusted
[root@server ~]# firewall-cmd --remove-source=192.168.71.1 --zone=trusted

5.管理port接口

[root@server ~]# firewall-cmd --add-port=80/tcp
[root@server ~]# firewall-cmd --remove-port=80/tcp

7.4.firewalld的高级规则

7.4.1.Direct Rules

通过 firewall-cmd 工具,可以使用 -direct 选项在运行时间里增加或者移除链。如果不熟悉 iptables,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵

直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。

允许192.168.71.1访问80端口

[root@server ~]# firewall-cmd --direct --get-all-rules
[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -s 192.168.71.1 -p tcp --dport 80 -j ACCEPT
[root@server ~]# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -s 192.168.71.1 -p tcp --dport 80 -j ACCEPT

7.4.2.地址伪装与端口转发

1.地址伪装

[root@server ~]# firewall-cmd --add-masquerade 

2.端口转发

[root@server ~]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=80:toaddr=192.168.91.20

注:在设置端口转发或地址伪装时,如果没有加-permanent参数,那么只在当前环境中生效;

       如果没有加--permanent参数,表似乎在刷新火墙后才生效。