linux防火墙(firewalld和iptables)

目录

1.安全技术和防火墙

1.1 安全技术

1.2 防火墙的分类

2.Linux 防火墙的基本认识

2.1Netfilter

2.2防火墙工具介绍

2.2.1 iptables

2.2.2 firewalld

2.2.3 nftables

2.3 netfilter中五个勾子函数和报文流向

3.firewalld服务

3.1.1firewalld 介绍

3.1.2命令行配置

3.1.2.1基础命令

3.1.2.2查看现有firewall设置

3.1.2.3设置查看默认区

3.1.2.4添加源地址(网段)及端口 及服务

3.1.3其它规则

3.1.3.1 管理rich规则

4 iptables

4.1iptables的组成概述

4.2实际操作

5.bond

5.1 nmli命令

5.2实际操作

1安全技术和防火墙

1.1 安全技术

入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.

防水墙

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

win后缀名 .txt note++.exe notebook.exe

1.2 防火墙的分类

按保护范围划分:

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

按实现方式划分:

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

TMG

按网络协议划分:

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

包过滤防火墙

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

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

缺点:无法检查应用层数据,如病毒等

应用层防火墙

应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)将所有跨越防火墙的网络通信链路分为两段内外网用户的访问都是通过代理服务器上的“链接”来实现优点:在应用层对数据进行检查,比较安全

缺点:增加防火墙的负载

提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用 层去检查

2.Linux 防火墙的基本认识

2.1Netfilter

Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中

Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作

Netfilter官网文档:

[root@centos7 ~]#grep -m 10 NETFILTER /boot/config-3.10.0-1127.el7.x86_64 CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set CONFIG_NETFILTER_ADVANCED=y CONFIG_BRIDGE_NETFILTER=m CONFIG_NETFILTER_NETLINK=m CONFIG_NETFILTER_NETLINK_ACCT=m CONFIG_NETFILTER_NETLINK_QUEUE=m CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NETFILTER_NETLINK_QUEUE_CT=y CONFIG_NETFILTER_SYNPROXY=m

2.2防火墙工具介绍

2.2.1 iptables

由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包

[root@centos7 ~]# iptables --version iptables v1.4.21

2.2.2 firewalld

从CentOS 7 版开始引入了新的前端管理工具

软件包:

firewalld

firewalld-config

管理工具:

firewall-cmd 命令行工具

firewall-config 图形工作

2.2.3 nftables

此软件是CentOS 8 新特性,Nftables最初在法国巴黎的Netfilter Workshop 2008上发表,然后由长期的netfilter核心团队成员和项目负责人Patrick McHardy于2009年3月发布。它在2013年末合并到Linux内核中,自2014年以来已在内核3.13中可用。

它重用了netfilter框架的许多部分,例如连接跟踪和NAT功能。它还保留了命名法和基本iptables设计的几个部分,例如表,链和规则。就像iptables一样,表充当链的容器,并且链包含单独的规则,这些规则可以执行操作,例如丢弃数据包,移至下一个规则或跳至新链。

从用户的角度来看,nftables添加了一个名为nft的新工具,该工具替代了iptables,arptables和ebtables中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时评估的那些部分。

2.3 netfilter中五个勾子函数和报文流向

Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则。

由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上提示:从 Linux kernel 4.2 版以后,Netfilter 在prerouting 前加了一个 ingress 勾子函数。可以使用这个新的入口挂钩来过滤来自第2层的流量,这个新挂钩比预路由要早,基本上是 tc 命令(流量控制工具)的替代品。

www.taobao.com:80

www.taobao.com:8080

三种报文流向

流入本机:PREROUTING --> INPUT–>用户空间进程(访问我的服务)

流出本机:用户空间进程 -->OUTPUT–> POSTROUTING(穿过我)

转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)

链chain:

内置链:每个内置链对应于一个钩子函数

自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效。

INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

五个表tble:filter、nat、mangle、raw、security

filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表

nat:network address translation 地址转换规则表

mangle:修改数据标记位规则表

raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度

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

security -->raw-->mangle-->nat-->filter

3.firewalld服务

3.1.1firewalld 介绍

firewalld是CentOS 7.0新推出的管理netfilter的用户空间软件工具,也被ubuntu18.04版以上所支持(apt install firewalld安装即可)。

firewalld是配置和监控防火墙规则的系统守护进程。可以实iptables,ip6tables,ebtables的功能firewalld服务由firewalld包提供。

归入zone顺序:

先根据数据包中源地址,将其纳为某个zone纳为网络接口所属zone纳入默认zone,默认为public zone,管理员可以改为其它zone网卡默认属于public zone,lo网络接口属于trusted zone

firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则

已经存在了zone区域使用firewall,就是将特定的流量关联到某个zone中通过源网段关联zone通过网卡关联zone区域如果两者都没有关联的数据报文,那就会去default zone

3.进入到zone以后,开始匹配zone内的规则

firewalld zone 分类

zone名称

默认配置

trusted

允许所有流量

home

拒绝除和传出流量相关的,以及ssh,mdsn,ipp-client,samba-client,dhcpv6-client预 定义服务之外其它所有传入流量

internal

和home相同

work

拒绝除和传出流量相关的,以及ssh,ipp-client,dhcpv6-client预定义服务之外的其它所有传入流量

public

拒绝除和传出流量相关的,以及ssh,dhcpv6-client预定义服务之外的其它所有传入流 量,新加的网卡默认属于public zone

external

拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量,属于external zone的传出ipv4流量的源地址将被伪装为传出网卡的地址。

dmz

拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量

block

拒绝除和传出流量相关的所有传入流量

drop

拒绝除和传出流量相关的所有传入流量(甚至不以ICMP错误进行回应)

预定义服务

服务名称

配置

ssh

Local SSH server. Traffic to 22/tcp

dhcpv6- client

Local DHCPv6 client. Traffic to 546/udp on the fe80::/64 IPv6 network

ipp- client

Local IPP printing. Traffic to 631/udp.

samba- client

Local Windows file and print sharing client. Traffic to 137/udp and 138/udp.

mdns

Multicast DNS (mDNS) local-link name resolution. Traffic to 5353/udp to the 224.0.0.251 (IPv4) or ff02::fb (IPv6) multicast addresses.

firewalld预定义服务配置

firewall-cmd --get-services 查看预定义服务列表/usr/lib/firewalld/services/*.xml预定义服务的配置

firewalld 三种配置方法

firewall-config 图形工具: 需安装 firewall-config包firewall-cmd 命令行工具: firewalld包,默认安装/etc/firewalld/ 配置文件,一般不建议,如:/etc/firewalld/zones/public.xml

可以打开 Xmanager - Passive

[root@localhost ~]# export DISPLAY=192.168.91.1:0.0 ###ip地址为自己的Windows地址 [root@localhost ~]# firewall-config

3.1.2命令行配置

3.1.2.1基础命令

firewall-cmd [OPTIONS...] firewall-cmd #基础命令 --permanent #设置永久生效 --add-port=端口号/协议(tcp/udp) #设置端口号和协议 --reload #重新加载防火墙设置 --remove #移除规则 --get-zones 列出所有可用区域 --get-default-zone 查询默认区域 --set-default-zone=<ZONE> 设置默认区域 --get-active-zones 列出当前正使用的区域 --add-source=<CIDR>[--zone=<ZONE>] 添加源地址的流量到指定区域,如果无--zone= 选项,使用 默认区域 --remove-source=<CIDR> [--zone=<ZONE>] 从指定区域删除源地址的流量,如无--zone= 选项, 使用默认区域 --add-interface=<INTERFACE>[--zone=<ZONE>] 添加来自于指定接口的流量到特定区域,如果无-- zone= 选项,使用默认区域 --change-interface=<INTERFACE>[--zone=<ZONE>] 改变指定接口至新的区域,如果无--zone= 选项,使用默认区域 --add-service=<SERVICE> [--zone=<ZONE>] 允许服务的流量通过,如果无--zone= 选项,使用默 认区域 --add-port=<PORT/PROTOCOL>[--zone=<ZONE>] 允许指定端口和协议的流量,如果无--zone= 选 项,使用默认区域 --remove-service=<SERVICE> [--zone=<ZONE>] 从区域中删除指定服务,禁止该服务流量,如果 无--zone= 选项,使用默认区域 --remove-port=<PORT/PROTOCOL>[--zone=<ZONE>] 从区域中删除指定端口和协议,禁止该端口 的流量,如果无--zone= 选项,使用默认区域 --reload 删除当前运行时配置,应用加载永久配置 --list-services 查看开放的服务 --list-ports 查看开放的端口 --list-all [--zone=<ZONE>] 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如 果无--zone= 选项,使用默认区域

3.1.2.2查看现有firewall设置

[root@localhost ~]#systemctl start firewalld #开启 [root@localhost ~]#systemctl stop firewalld.service #关闭 [root@localhost ~]#systemctl status firewalld #查看状态 [root@localhost ~]#firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@localhost ~]#firewall-cmd --list-all --zones=区域名字

3.1.2.3设置查看默认区

[root@localhost ~]#firewall-cmd --zone= #查看区域 block dmz dropexternalhomeinternalpublictrusted work [root@localhost ~]#firewall-cmd --get-default-zone #查看默认区域 [root@localhost ~]#firewall-cmd --set-default-zone block dmz dropexternalhomeinternalpublictrusted work [root@localhost ~]#firewall-cmd --set-default-zone block dmz dropexternalhomeinternalpublictrusted work [root@localhost ~]#firewall-cmd --set-default-zone home success [root@localhost ~]#firewall-cmd --get-default-zone home

3.1.2.4添加源地址(网段)及端口 及服务

[root@localhost ~]#firewall-cmd --permanent --add-port=80/tcp #添加80端口 [root@localhost ~]#firewall-cmd --permanent --add-port=80/tcp --zone=home #可以指定区域 success [root@localhost ~]#firewall-cmd --add-service=http #允许http服务 [root@localhost ~]#firewall-cmd --permanent --add-icmp-block=echo-request #禁止ping success [root@localhost ~]#firewall-cmd --reload success [root@localhost ~]#firewall-cmd --permanent --add-source=192.168.100.0/24 # 基础命令 永久生效添加 源网段 子网掩码 [root@localhost ~]#firewall-cmd --reload success [root@localhost ~]#firewall-cmd --list-all #查看生效策略 小实验 尝试打开 httpd服务 ####删除source [root@localhost ~]#firewall-cmd --zone=home --remove-source=192.168.91.0/24 --remove-source=192.168.50.0/24 --remove-source=192.168.100.0/24 --permanent

3.1.3其它规则

当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则

rich-rules 富规则,功能强,表达性语言

Direct configuration rules 直接规则,灵活性差, 帮助:man 5 firewalld.direct

3.1.3.1 管理rich规则

rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发,伪装和限制速率。

规则实施顺序:

该区域的端口转发,伪装规则

该区域的日志规则

该区域的允许规则

该区域的拒绝规则

每个匹配的规则生效,所有规则都不匹配,该区域默认规则生效

rich语法:

rule [source] [destination] service|port|protocol|icmp-block|masquerade|forward-port [log] [audit] [accept|reject|drop]

man 5 firewalld.richlanguage

选项

描述

–add-rich-rule=

添加到指定区域,如果未指定区域,则添加到默认区域。

–remove-rich-rule=

删除到指定区域,如果未指定区域,则删除到默认区域。

–query-rich-rule=

查询是否已添加到指定区域,如果没有指定区域,则查询默认区域。 如果规则存在则返回 0,否则返回 1。

–list-rich-rule=

输出指定区域的所有丰富规则,如果没有区域,则输出默认区域。

例子

拒绝从192.168.0.100的所有流量,当address 选项使用source 或 destination时,必须用family= ipv4 | ipv6 [root@localhost ~]#firewall-cmd --permanent --zone=public --add-rich-rule=rule family=ipv4 source address=192.168.0.100/32 reject [root@localhost ~]#firewall-cmd --remove-rich-rule=rule family="ipv4" source address="192.168.91.101" reject 限制每分钟只有两个连接到ftp服务 [root@localhost ~]#firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m accept’ 接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量 [root@localhost ~]#firewall-cmd --permanent --zone=vnc --add-rich-rule=rule family=ipv4 source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept

4 iptables

4.1iptables的组成概述

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

netfilter/iptables:IP 信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。

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

-netfilter/iptables关系:

netfilter:

属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables :

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

netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

iptables由五个表table和五个链chain以及一些规则组成

五个表table:filter、nat、mangle、raw、security

filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表nat:network address translation 地址转换规则表mangle:修改数据标记位规则表raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现

优先级由高到低的顺序为:

security -->raw-->mangle-->nat-->filter

总结

规则表的作用:容纳各种规则链; 表的划分依据:防火墙规则的作用相似规则链的作用:容纳各种防火墙规则;规则的作用:对数据包进行过滤或处理 ;链的分类依据:处理数据包的不同时机总结:表里有链,链里有规则

raw:主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT、PREROUTING

mangle : 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING

nat:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。

filter:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个链,即PREROUTING、POSTROUTING、OUTPUT

注:在iptables 的四个规则表中,mangle 表 和raw表的应用相对较少

INPUT: 处理入站数据包,匹配目标IP为本机的数据包。

OUTPUT: 处理出站数据包,一般不在此链上做配置。FORWARD: 处理转发数据包,匹配流经本机的数据包。PREROUTING链: 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。POSTROUTING链: 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

内核中数据包的传输过程

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

4.2实际操作

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

systemctl stop firewalld.service systemctl disable firewalld.service yum -y install iptables iptables-services systemctl start iptables.service systemctl enable iptables.service

配置方式

iptables防火墙的配置方法: 1、使用iptables命令行。 2、使用system-config-firewall centso7不能使用 centos 6可以使用

基本语法:

iptables[-t 表名]管理选项[链名][匹配条件][-j 控制类型] 其中,表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表; 管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等; 匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理; 控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。 **注意事项**: 不指定表名时,默认指filter表 不指定链名时,默认指表内的所有链 除非设置链的默认策略,否则必须指定匹配条件 选项、链名、控制类型使用大写字母,其余均为小写

数据包的常见控制类型

对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下:

- ACCEPT:允许数据包通过。 - DROP:直接丢弃数据包,不给出任何回 应信息。 - REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。 - LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。 - SNAT:修改数据包的源地址。 - DNAT:修改数据包的目的地址。 - MASQUERADE:伪装成一个非固定公网IP地址。

防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助动作,并没有真正处理数据包。

注:需要大写

添加、查看、删除规则等基本操作

管理选项

用法示例

-A

在指定链末尾追加一条 iptables -A INPUT (操作)

-I

在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)

-P

指定默认规则 iptables -P OUTPUT ACCEPT (操作)

-D

删除 iptables -t nat -D INPUT (操作)

-p

服务名称

-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-number

规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number

-F

清除链中所有规则 iptables -F (操作)

-X

清空自定义链的规则,不影响其他链 iptables -X

-Z

清空链的计数器(匹配到的数据包的大小和总和)iptables -Z

-S

查看链的所有规则或者某个链的规则/某个具体规则后面跟编号

添加新的防火墙规则

添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。 例如,若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中 “-p 协议名”作为匹配条件)。 **例1** iptables -t filter -A INPUT -p icmp -j REJECT //不允许任何主机ping本主机 iptables -IINPUT 2 -p tcp --dport 22 -j ACCEPT//允许主机ssh端口 通过我的 其他 iptables -t filter -A INPUT -p tcp -j ACCEPT//允许任何主机tcp iptables -I INPUT -p udp -j ACCEPT//允许任何主机udp

查看规则表

查看已有的防火墙规则时,使用管理选项“-L”,结合“--line-numbers”选项还可显示各条规则在链内的顺序号。例如,若要查看 filter 表 INPUT 链中的所有规则,并显示规则序号, 可以执行以下操作 iptables [-t表名] -n -L [链名] |[-- line-numbers] 或 iptables - [vn]L #注意:不可以合写为-Ln

删除、清空规则

iptables -D INPUT 5 iptables -L INPUT --line-numbers iptables -t filter -D INPUT -P icmp - j REJECT 清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT 链中的所有规则,可以执行以下操作。 ``` [root@localhost ~]# iptables -F INPUT [root@localhost ~]# iptables -nL INPUT Chain INPUT (policy ACCEPT) target prot opt source destination 主意: 1.若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条 2.按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错 3.按内容匹配删数时,确保规则存在,否则报错

设置默认策略

iptables 的各条链中,默认策略是规则匹配的最后一个环节,当找不到任何一条能够匹配数据包的规则时,则执行默认策略。 默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。 例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许。 iptables [-t表名] -P <链名> <控制类型> iptables -P INPUT DROP输入后没显示清除所有规则之后生效,因为下面只剩下DROP添加远程端口22 iptables -P FORWARD DROP #--般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单 [root@localhost ~]# iptables -t filter -P FORWARD DROP [root@localhost ~]# iptables -P OUTPUT ACCEPT #需要注意的是,当使用管理选项“-F”清空链时,默认策略不受影响。 因此若要修改默认 策略,必须通过管理选项“-P”重新进行设置。 另外,默认策略并不参与链内规则的顺序编排, 因此在其他规则之前或之后设置并无区别。 ```

通用匹配

直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。 协议匹配: -p协议名 地址匹配: -s 源地址、-d目的地址 #可以是IP、网段、域名、空(任何地址) 接口匹配: -i入站网卡、-o出站网卡 iptables -A FORWARD ! -p icmp -j ACCEPT iptables -A INPUT -s 192.168.80.11 -j DROP iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROP iptables -I INPUT -p icmp -j DROP iptables -A FORWARD ! -p icmp -j ACCEPT //感叹号”!”表示取反[root@localhost network-scripts]#iptables -P INPUT DROP [root@localhost network-scripts]#iptables -t filter -A INPUT ! -p icmp -j ACCEPT #除了icmp都可以

设置默认策略

隐含匹配

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。

端口匹配: --sport 源端口、–dport 目的端口

#可以是个别端口、端口范围

--sport 1000匹配源端口是1000的数据包 --sport 1000:3000 匹配源端口是1000-3000的数据包 --sport :3000 匹配源端口是3000及以下的数据包 --sport 1000: 匹配源端口是1000及以上的数据包 注意: --sport和--dport 必须配合-p <协议类型>使用 端口可以使用的范围 0-65535 [root@localhost ~]#iptables -A INPUT -p tcp--sport 10000:30000 -j REJECT #10000到30000 全部被拒 TCP标记匹配: --tcp-flags TCP标记:SYN,RST,ACK,SYN [root@localhost ~]#iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT #丢弃SYN请求包,放行其他包

ICMP

类型匹配: --icmp-type ICMP类型

#可以是字符串、数字代码

“Echo- Request” (代码为8)表示请求

“Echo- Reply” (代码为0)表示回显

“Dest ination-Unreachable” (代码为3)表示目标不可达

关于其它可用的ICMP协议类型,可以执行“iptables -p icmp -h”命令,查看帮助信息

[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP #禁止其它主机ping本机 [root@localhost ~]#iptables -A INPUT -P icmp --icmp-type 0 -j ACCEPT #允许本机ping其它主机iptables -A INPUT -p icmp -j DROP [root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping不通其它主机时提示目标不可达 #此时其它主机需要配置关于icmp协议的控制类型为REJECT [root@localhost ~]#iptables -A INPUT -p icmp -j REJECT

显式匹配

要求以“-m扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。

多端口匹配:-m multiport --sport 源端口列表 -m multiport --dport 目的端口列表 iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -P udp -m multiport --dport 53 -j ACCEPT IP范围匹配: -m iprange --src-range IP范围 iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP #禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包 MAC地址匹配: -m mac --mac-source MAC地址 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #禁止来自某MAC地址的数据包通过本机转发 状态匹配: -m state --state 连接状态 常见的连接状态: NEW :与任何连接无关的,还没开始连接 ESTABLISHED :响应请求或者已建立连接的,连接态 RELATED :与已有连接有相关性的(如FTP主被动模式的数据连接),衍生态,一般与ESTABLISHED 配合使用 INVALID:不能被识别属于哪个连接或没有任何状态 iptables -A FORWARD -m state --state NEW -P tcp ! --syn -j DROP #禁止转发与正常TCP连接无关的非--syn请求数据包(如伪造的网络攻击数据包) iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT #对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过。 #比如我和你做生意,我们谈成了生意,到了支付的时候,就可以直接调用与这笔生意相关的支付功能 iptables -P INPUT DROP

5.bond

5.1 nmli命令

#查看帮助 nmcli con add help #使用nmcli配置网络 nmcli con show #显示所有活动连接 nmcli con show --active #显示网络连接配置 nmcli con show"System eth0“ #显示设备状态 nmcli dev status #显示网络接口属性 nmcli dev show eth0 #创建新连接default,IP自动通过dhcp获取 nmcli con add con-name default type Ethernet ifname eth0 #删除连接 nmcli con del default #创建新连接static ,指定静态IP,不自动连接 nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254 #启用static连接配置 nmcli con up static #启用default连接配置 nmcli con up default #修改连接设置 nmcli con mod “static” connection.autoconnect no nmcli con mod “static” ipv4.dns 172.25.X.254 nmcli con mod “static”+ipv4.dns8.8.8.8 nmcli con mod “static”-ipv4.dns8.8.8.8 nmcli con mod “static” ipv4.addresses “172.16.X.10/24172.16.X.254” nmcli con mod “static”+ipv4.addresses 10.10.10.10/16 #DNS设置存放在/etc/resolv.conf,PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置, 不自动获取等价于下面命令 nmcli con mod “system eth0” ipv4.ignore-auto-dns yes#添加bonding接口 nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup ipv4.method manual ipv4.addresses 192.168.91.100/24 #添加从属接口 nmcli con add type bond-slave ifname ens7 master bond0 nmcli con add type bond-slave ifname ens33 master bond0 #注:如无为从属接口提供连接名,则该名称是接口名称加类型构成 #要启动绑定,则必须首先启动从属接口 nmcli con up bond-slave-ens33 nmcli con up bond-slave-ens37 #启动绑定 nmcli con up mybond0

5.2实际操作

[root@localhost ~]#nmcli connection add con-name mybond0 ifname bond0 type bond ipv4.method manual ipv4.addresses 192.168.91.100/24 mode active-backup 连接“mybond0”(422ba65f-12cd-4edd-9d4d-367b6c) 已成功添加。 [root@localhost network-scripts]#ls ifcfg-ens33ifdown-isdnifup-bnep ifup-routes ifcfg-ens37 ifdown-postifup-ethifup-sit ifcfg-lo ifdown-ppp ifup-ib ifup-Team ifcfg-mybond0ifdown-routesifup-ippp ifup-TeamPort ifdown ifdown-sit ifup-ipv6 ifup-tunnel ifdown-bnepifdown-Teamifup-isdn ifup-wireless ifdown-eth ifdown-TeamPortifup-plip init.ipv6-global ifdown-ibifdown-tunnelifup-plusbnetwork-functions ifdown-ipppifup ifup-post network-functions-ipv6 ifdown-ipv6ifup-aliases ifup-ppp [root@localhost network-scripts]#cat ifcfg-mybond0 DEVICE=bond0 BONDING_OPTS=mode=active-backup TYPE=Bond BONDING_MASTER=yes PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none IPADDR=192.168.91.100 PREFIX=24 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=mybond0 UUID=422ba65f-12cd-4edd-9d4d-367b6c ONBOOT=yes [root@localhost network-scripts]#nmcli connection add type bond-slave ifname ens37 master bond0 连接“bond-slave-ens37”(bb-94b5-4c98-9023-f3fabd) 已成功添加。 [root@localhost network-scripts]#nmcli connection add type bond-slave ifname ens33 master bond0 连接“bond-slave-ens33”(c97d22d5-23c2-472f-891e-dff378b7f69f) 已成功添加。 [root@localhost network-scripts]#nmcli connection 名称UUID类型设备 ens33 12156d92-6495-4c69-82e9-c0e22f532f76802-3-ethernetens33 mybond0 422ba65f-12cd-4edd-9d4d-367b6cbondbond0 virbr0335fcf86-189c-4513-9deb-da344ff280ddbridgevirbr0 有线连接 1d62f0f08-f45b-3548-815d-30dbca7821f6802-3-ethernetens37 bond-slave-ens33c97d22d5-23c2-472f-891e-dff378b7f69f802-3-ethernet-- bond-slave-ens37bb-94b5-4c98-9023-f3fabd802-3-ethernet-- [root@localhost network-scripts]#nmcli connection up bond-slave-ens33 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/24) [root@localhost network-scripts]#nmcli connection up bond-slave-ens37 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/25) [root@localhost network-scripts]#cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: ens33 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens33 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:fe:e5:bf Slave queue ID: 0 Slave Interface: ens37 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:fe:e5:c9 Slave queue ID: 0f3fabd802-3-ethernet-- [root@localhost network-scripts]#nmcli connection up bond-slave-ens33 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/24) [root@localhost network-scripts]#nmcli connection up bond-slave-ens37 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/25) [root@localhost network-scripts]#cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: ens33 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: ens33 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:fe:e5:bf Slave queue ID: 0 Slave Interface: ens37 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:0c:29:fe:e5:c9 Slave queue ID: 0

来源: