linux防火墙(firewalld和iptables)

50 篇文章 3 订阅
26 篇文章 3 订阅

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官网文档:https://netfilter.org/documentation/

[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、rawsecurity

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可以设置独立的防火墙规则

  1. 已经存在了zone区域
  2. 使用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错误进行回应)

预定义服务

服务名称配置
sshLocal SSH server. Traffic to 22/tcp
dhcpv6- clientLocal DHCPv6 client. Traffic to 546/udp on the fe80::/64 IPv6 network
ipp- clientLocal IPP printing. Traffic to 631/udp.
samba- clientLocal Windows file and print sharing client. Traffic to 137/udp and 138/udp.
mdnsMulticast 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       drop      external  home      internal  public    trusted   work
[root@localhost ~]#firewall-cmd --get-default-zone 
#查看默认区域



[root@localhost ~]#firewall-cmd --set-default-zone 
block     dmz       drop      external  home      internal  public    trusted   work      
[root@localhost ~]#firewall-cmd --set-default-zone 
block     dmz       drop      external  home      internal  public    trusted   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=Add to the specified zone, or the default zone if no zone is specified.
–remove-rich-rule=Remove to the specified zone, or the default zone if no zone is specified.
–query-rich-rule=Query if has been added to the specified zone, or the default zone if no zoneis specified. Returns 0 if the rule is present, otherwise 1.
–list-rich-rule=Outputs all rich rules for the specified zone, or the default zone if no zone is

例子

拒绝从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地址上网。

内核中数据包的传输过程

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

3.显式匹配
要求以“-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.dns  8.8.8.8
nmcli con mod “static”  -ipv4.dns  8.8.8.8
nmcli con mod “static” ipv4.addresses “172.16.X.10/24  172.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-367b6c205823) 已成功添加。
[root@localhost network-scripts]#ls
ifcfg-ens33    ifdown-isdn      ifup-bnep   ifup-routes
ifcfg-ens37   ifdown-post      ifup-eth    ifup-sit
ifcfg-lo       ifdown-ppp       ifup-ib     ifup-Team
ifcfg-mybond0  ifdown-routes    ifup-ippp   ifup-TeamPort
ifdown         ifdown-sit       ifup-ipv6   ifup-tunnel
ifdown-bnep    ifdown-Team      ifup-isdn   ifup-wireless
ifdown-eth     ifdown-TeamPort  ifup-plip   init.ipv6-global
ifdown-ib      ifdown-tunnel    ifup-plusb  network-functions
ifdown-ippp    ifup             ifup-post   network-functions-ipv6
ifdown-ipv6    ifup-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-367b6c205823
ONBOOT=yes
[root@localhost network-scripts]#nmcli connection add type bond-slave ifname ens37 master bond0
连接“bond-slave-ens37”(386628bb-94b5-4c98-9023-f3fab154943d) 已成功添加。
[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-c0e22f532f76  802-3-ethernet  ens33  
mybond0           422ba65f-12cd-4edd-9d4d-367b6c205823  bond            bond0  
virbr0            335fcf86-189c-4513-9deb-da344ff280dd  bridge          virbr0 
有线连接 1        d62f0f08-f45b-3548-815d-30dbca7821f6  802-3-ethernet  ens37  
bond-slave-ens33  c97d22d5-23c2-472f-891e-dff378b7f69f  802-3-ethernet  --     
bond-slave-ens37  386628bb-94b5-4c98-9023-f3fab154943d  802-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

f3fab154943d  802-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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MagnumOvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值