关于后端:firewalld与iptables防火墙工具详细介绍

5次阅读

共计 6055 个字符,预计需要花费 16 分钟才能阅读完成。

前言

iptables 与 firewalld 防火墙管理工具在 linux 发行版 Redhat7 系列应用较为宽泛。
UFW 则是在 linux 发行版 Ubuntu 下进行治理防火墙的一款管理工具。

在选用防火墙工具的时候,运维或者是开发人员往往会纠结应用哪个。这里给出倡议,应用 iptables 工具治理就禁用 firewalld,应用 firewalld 工具治理就禁用 iptables,二者选其一即可,防止产生凌乱。

此篇文章不会在原理上做深究,次要以实用性为主,原理能够浏览相干书籍缓缓品尝。

注释

一、Netfilter 内核模块

无论是应用 iptables 还是 firewalld,无妨先理解一下Netfilter 内核模块
什么是 Netfilter:linux 操作系统核心层外部的一个数据包解决模块。
Hook point:数据包在 Netfilter 中的挂载点。(PRE_ROUTING INPUT OUTPUT FORWORD POST_ROUTING)

1、netfilter 的体系结构

网络数据包的的统信次要通过以下相干步骤,对应 netfilter 定义的钩子函数,具体能够参考源码介绍。

  • NF_IP_PRE_ROUTING

    网络数据包进入零碎,通过简略检测后,数据包转交给改函数进行解决,而后依据零碎设置的规定对数据包进行解决,如果数据包不被抛弃则交给路由函数进行解决。在该函数中能够替换 IP 包的目标地址,及 DNAT

  • NF_IP_LOCAL_IN:

    所有发送给本机的数据包都要通过该函数进行解决,该函数依据零碎设置的零碎规定对数据包进行解决,如果数据包不被抛弃则交给本地的应用程序。

  • NF_IP_FORWARD:

    所有不是发送给本机的数据包都要通过该函数进行解决,该函数会依据零碎设置的规定对数据包进行解决,如数据包不被抛弃则转给

    NF_IP_POST_ROUTING 解决。

  • NF_IP_LOCAL_OUT:

    所有从本地应用程序进去的数据包必须通过该函数进行解决,该函数会依据零碎设置的规定对数据包进行解决,如数据包不被抛弃则交给路由函数进行解决。

  • NF_IP_POST_ROUTING

    所有数据包在发送给其它主机之前须要通过该函数进行解决,该函数会依据零碎设置的规定对数据包进行解决,如数据包不被抛弃,将数据包发给数据链路层。在该函数中能够替换 IP 包的源地址,即 SNAT

数据包通过 linux 防火墙的处理过程如下图

2、包过滤

每个函数都能够对数据包进行解决,最根本的操作是对数据包进行过滤。系统管理员能够通过 iptables 工具来向内核模块注册多个过滤规定,并且指明过滤规定的优先权。设置完当前每个钩子依照规定进行匹配。如果规定匹配,函数就会进行一些过滤操作,这些操作次要如下:

  • NF_ACCEPT:持续失常的传递包。
  • NF_DROP:抛弃包,阻止传送。
  • SF_STOLEN:曾经接管了包,不须要继续传送。
  • NF_QUEUE:排列包。
  • NF_REPEAT:再次应用钩子。

篇幅受限,介绍过多反而不好。对于包过滤就介绍这么多,后续会进一步欠缺。

二、firewalld 防火墙工具

以 Redhat 系列为例子做简略的介绍,相熟 centos 的基本上能够套用。

firewalld 简介

​ 在 RHEL7 之前的版本中,iptables 和 ip6tables 作为防火墙配置管理工具。在 RHEL7 中防火墙管理工具变成了 firewalld,它是一个反对自定义网络区域(zone)及接口安全等级的动静防火墙管理工具。利用 firewalld,用户能够实现许多弱小的网络性能,例如防火墙、代理服务器以及网络地址转换。

​ 之前版本的 system-config-firewall 和 lokkit 防火墙模型是动态的,每次批改防火墙规定都须要齐全重启。在此过程中包含提供防火墙的内核模块 netfilter 须要卸载和从新加载。而卸载会毁坏已建设的连贯和状态防火墙。与之前的动态模型有区别,firewalld 将动静地治理防火墙,不须要重新启动防火墙,也不需从新加载内核模块。但 firewalld 服务要求所有对于防火墙的变更都要通过守护过程来实现,从而确保守护过程中的状态与内核防火墙之间的一致性。

​ 许多不理解的人,认为 RHEL7 中的防火墙从 iptables 变成了 firewalld。其实不然,无论是 iptables 还是 firewalld 都无奈提供防火墙性能。他们都只是 linux 零碎中的一个防火墙管理工具,负责生成防火墙规定与内核模块 netfilter 进行“交换”,真正实现防火墙性能的是内核模块 netfilter。

​ firewalld 提供了两种管理模式:其一是 firewall-cmd 命令管理工具,其二是 firewall-config 图形化管理工具。在之前版本中的
iptables 将规定保留在文件 /etc/sysconfig/iptables 中,当初 firewalld 将配置文件保留在 /usr/lib/firewalld 和 /etc/firewalld
目录的 xml 文件中。

​ 尽管 RHEL7 中将默认的防火墙管理工具从 iptables 换成了 firewalld,但在 RHEL7 中依然能够应用 iptables 的,只须要通过 yum 命令进行装置启用 iptables 服务即可。换句话说,红帽将这个选择权交给了用户。

上面给出 RHEL7 的防火墙堆栈

1、firewalld 命令行模式

1.1、区域抉择

以后操作系统装置实现后,防火墙会设置一个默认区域,将接口退出到默认区域中。用户配置防火墙的第一步是获取默认区域并批改,对于操作如下:

查看以后零碎中所有区域

firewall-cmd --get-zones

查看以后默认的区域

firewall-cmd --get-default-zone

查看以后已激活的区域

firewall-cmd --get-active-zones

获取接口 ens33 所属区域

firewall-cmd --get-zone-of-interface=ens33

批改接口所属区域

firewall-cmd --permanent --zone=internal --change-interface=ens33

1.2、firewalld 服务重载、重启、进行

从新加载防火墙配置

firewall-cmd --reload

重启防火墙(redhat 系列)

systemctl restart firewalld.service

长期敞开防火墙

systemctl stop firewalld.service

开机启用防火墙

systemctl enable firewalld.service

开机禁止防火墙

systemctl disable firewalld.service

查看 firewalld 的运行状态

firewall-cmd --state

1.3、firewalld 凋谢端口(public)

公共区域设置凋谢 21 端口永恒失效并写入配置文件(参数:–permanent)

# 参数:--permanent,设置即立即失效并且写入配置文件
firewall-cmd --zone=public --add-port=21/tcp --permanent

查问防火墙端口 21 是否凋谢

firewall-cmd --zone=public --query-port=21/tcp

移除凋谢的端口 21

firewall-cmd --zone=public --remove-port=21/tcp --permanent

1.4、区域规定批改

查问防火墙规定列表

firewall-cmd --zone=public --list-all

新增一条区域规定 httpd 服务

firewall-cmd --permanent --zone=internal --add-service=http

验证规定

firewall-cmd  --zone=internal --list-all

2、firewalld 图形化界面

下面的简介也介绍到了 firewalld 提供了两种管理模式:其一是 firewall-cmd 命令管理工具,其二是 firewall-config 图形化管理工具。在之前版本中的 iptables 将规定保留在文件 /etc/sysconfig/iptables 中,当初 firewalld 将配置文件保留在 /usr/lib/firewalld/etc/firewalld目录的 xml 文件中。

图形化界面中批改接口区域能够应用 NetworkManager,也能够应用 firewall-config 工具。NetworkManager 应用办法:关上终端执行命令nm-connection-editor,如下图弹出对话框:

2.1、图形化界面 NetworkManager

终端执行:nm-connection-editor

2.2、图形化界面 firewall-config

终端执行:firewall-config

三、iptables 防火墙工具

1、装置 iptables

如果是 centos6,默认是装置了 iptables。
如果是 centos7 或者 Redhat7 系列,默认没有装置 iptables。你须要敞开默认启动的 firewalld,二选一即可。

长期敞开 firewalld

systemctl stop firewalld

开机禁用 firewalld

systemctl disable firewalld

开机启用 firewalld

systemctl enable firewalld

通过 yum 在线装置 iptables,查看是否装置了 iptables

systemctl status iptables.service
service iptables status

装置 iptables

yum -y install iptables

降级 iptables

yum update iptables

装置 iptables-services

yum -y install iptables-services.x86_64

设置 iptables 为开机自启

systemctl enable iptables.service

iptables 规定组成

  • ACCEPT(接管,容许通过)
  • DROP(抛弃数据包不做任何反馈)
  • REJECT(抛弃数据包,客户端有对应音讯返回)

查问曾经设置的规定:- L 命令

# 个别配合 - n 命令应用
iptables -L
#不显示主机地址
iptables -nL 

革除原来设置的规定:- F 命令

iptables -F

删除某一条曾经设置的规定:- D 命令

iptables -D INPUT -p tcp --dport 80 -j ACCEPT

2、场景一放通端口

插入一些规定:- I 命令,放通 80、22、10~21(一段)这些端口

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

设置某一个固定的 IP 拜访 80 端口:-s 192.168.xxx.xxx

iptables -I INPUT -p tcp -s (你的 IP 地址) --dport 80 -j ACCEPT

ssh 近程连贯本地服务器或者云服务器须要默认启用的端口

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

设置 10~21 端口凋谢拜访

iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT

设置 icmp 规定容许拜访

iptables -I INPUT -p icmp -j ACCEPT

留神:容许本机能够拜访本机,本机拜访外网
解决本机能够拜访本机(telnet 127.0.0.1 22),增加 -i lo(网卡)规定。

设置规定

iptables -I INPUT -i lo -p tcp  -j ACCEPT

本机测试拜访外网

curl https://www.baidu.com

设置规定

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

在设置的最初追加一条规定 :- A 命令
回绝 xx 规定

iptables -A INPUT -j REJECT

3、场景二

ftp 被动模式下 iptables 的规定配置(不倡议)
ftp 被动模式下 iptables 的规定配置(理论利用,举荐)

4、场景三

工作中的一些罕用配置,设置好规定后保留到配置文件。chkconfig iptables on 设置开机启动规定。
snat(对原地址,发动地址)规定设置,dnat(指标地址,发往的地址)规定设置。

5、iptables 防攻打企业应用

iptables 防攻打企业应用 (依据理论业务设置)
利用 iptables 防 CC 攻打
connlimit 模块
作用: 用于限度每一个客户端 IP 的并发连接数。
参数: --connlimit-above n(次数),限度并发数

例如,限度次数为 100

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT

测试,限度某一固定 IP 并发次数

iptables -I INPUT -p tcp --dport 80 -s [ip 地址] -m connlimit --connlimit-above 10 -j REJECT

6、limit 模块

作用: 限速,管制流量
例如

iptable -A INPUT -m limit --limit 3/hour

--limit-burst 5,默认值为 5

在设置最初追加一条过滤规定

iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT 

回绝其它规定拜访

iptables -A INPUT -p icmp -j DROP

设置完,测试接限度的 IP 地址:

# 测试受限 IP 地址
ping 192.168.245.139

2、配置文件新增规定

文中介绍过 iptables 装置后的配置文件所在目录。

/etc/sysconfig/iptables

批改配置文件

vim  /etc/sysconfig/iptables

四、UFW 防火墙工具

Uncomplicated Firewall

简称 UFW,是 Ubuntu 零碎上默认的防火墙组件。UFW 是为轻量化配置 iptables 而开发的一款工具。
UFW 提供一个十分敌对的界面用于创立基于 IPV4,IPV6 的防火墙规定。UFW 在 Ubuntu 8.04 LTS 后的所有发行版中默认可用。
UFW 的图形用户界面叫 Gufw。

1、开启与敞开防火墙

开启防火墙

ufw enable

敞开防火墙

ufw disable

2、显示防火墙状态

2.1、显示防火墙状态

ufw status

2.2、查看防火墙具体状态

ufw status verbose

3、容许与阻止

3.1、减少一条示意容许的规定

ufw allow

3.2、容许通过 21 连贯端口应用 tcp 和 udp 协定连线本机

ufw allow 21

3.3、减少一条示意阻止的规定

ufw deny

阻止通过 21 连贯端口应用 tcp 协定连线本机

ufw deny 21/tcp

3.4、减少一条示意回绝的规定

ufw reject

4、以服务名称代表连贯端口

能够采纳

less /etc/services

<H5 align=center>by 龙腾万里 sky 原创不易,白嫖有瘾 </H5>

正文完
 0