防火墙iptables&&firewalld

目录

一、IPtables介绍

1、iptables工作原理分类

2、iptables工作流程

3、iptables和firewalld的区别

二、iptables概念

1、什么是iptables

2、什么是表(tables)

3、什么是链(chains)

4 、什么是规则(Policy)

三、iptables表和链

1、iptables四表五链

 2、表和链的关系

 四、iptables的使用

1、安装iptables

2、参数解释

3、使用示例

4、匹配条件

五、网络地址转换NAT

 1、SNAT:把内网ip转化为公网ip

2、DAT:要把别人的公网ip转换成我们的内部的ip

六、Firewalld

1、firewalld目录结构

2、zone

3、九区

drop(丢弃)

block(限制)

public(公共)

external(外部)

dmz(非军事区)

work(工作)

home(家庭)

internal(内部)

trusted(信任)

2、firewalld的使用

3、防火墙高级


一、IPtables介绍

分类:

逻辑分类:主机防火墙(个人)或网络防火墙(集体)

主机防火墙:针对单个主机进行防护

网络防火墙:它往往处于网络入口或者边缘,针对网络入口进行防护,服务于防火墙背后的局域网

物理分类:硬件防火墙和软件防火墙

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分基于软件实现,性能高,成本高

软件防火墙:应用软件处理逻辑运行于硬件平台之上,性能低,成本低

IPtables是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤(对osi模型的四层或者是四层以下进行过滤)的防火墙工具,他的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行精细的控制。主要针对网络访问

IPtables其实并不是真正的防火墙,我们可以把他理解为一个客户端的代理,用户是通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙。这个框架叫做“netfilter”。

netfilter:内核空间,是真正实现防火墙的功能。

iptables:用户空间,在/sbin/iptables存在的防火墙,通过iptables提供管理,修改,删除或者插入规则。

用户和内核交互的一个工具就是iptables。

实际生产环境中:

关闭linux自身防火墙。(解决安全问题尽量不给服务器配置外网ip。需要访问的话,就使用代理转发。)因为高并发,iptables会加大延迟。除非并发小,如果服务器必须处于公网。考虑开启防火墙。

大并发的情况下,不能开启iptables,会影响服务器性能,因为iptables是要消耗cpu的,利用硬件防火墙提升架构安全。

1、iptables工作原理分类

主机防火墙:主要是用来防范单台主机的进出报文;----filter表
网络防火墙:能够实现对进出本网络的所有主机报文加以防护 ----nat表

iptables缺点:
(1)防火墙虽然可以过滤互联网的数据包,但却无法过滤内部网络的数据包。因此若有人从内部网络攻击时,防火墙没有作用。
(2)电脑本身的操作系统亦可能因一些系统漏洞,使入侵者可以利用这些漏洞绕过防火墙过滤,从而入侵电脑。
(3)防火墙无法有效阻挡病毒攻击,尤其是隐藏在数据中的病毒。
注意:没有绝对安全的操作系统,虽然防火墙有这些缺点,但还是能阻挡大多数来自外网的攻击!

2、iptables工作流程

  • 防火墙是一层一层过滤的。实际是按照配置规则的顺序从上往下匹配,从前往后过滤的,匹配到规则之后,就不会往下匹配新规则了
  • 如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
  • 防火墙的默认规则是对应链的所有的规则执行完以后才会执行的。

3、iptables和firewalld的区别

相同点:

firewalld与iptables都是linux中防火墙的管理程序,但其实其角色主要为对于防火墙策略的管理,真正的防火墙执行者是位于内核中的netfilter

不同点:

iptables仅能通过命令进行配置;而firewalld提供了图形接口,类似windows防火墙的操作方式

iptables每一个单独更改意味着清除所有旧的规则,并从/etc/sysconfig/iptables中读取所有新的规则;而firewalld在有规则变动后,可以仅仅运行规则中的不同之处,即在firewalld运行时间内,改变设置时可以不丢失现行链接

iptables的配置文件在/etc/sysconfig/iptables中;而firewalld的配置文件在/usr/lib/firewalld和/etc/firewalld中的各种XML文件中

iptables没有守护进程,并不能算是真正意义上的服务;而firewalld有守护进程

iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口

二、iptables概念

1、什么是iptables

举个例子,如果把Netfilter看成是某个小区的一栋楼。那么表(tables)就是楼里的其中的一套房子。这套房子"表(tables)"属于这栋楼“Netfilter/iptables”。

2、什么是表(tables)

表(tables)是链的容器,即所有的链(chains)都属于其对应的表(tables)。如上,如果把Netfilter看成是某个小区的一栋楼.那么表(tables)就是楼里的其中的一套房子。

3、什么是链(chains)

链(chains)是规则(Policys)的容器。如果把表(tables)当作有一套房子,那么链(chains)就可以说是房子里的家具(柜子等)。

4 、什么是规则(Policy)

规则(Policy)就比较容易理解了,就是iptables系列过滤信息的规范和具体方法条款了.可以理解为柜子如何增加并摆放柜子东西等

三、iptables表和链

1、iptables四表五链

四表:(小写)
raw    追踪数据包
mangle 对数据包打标记
nat    地址转换
filter 数据包过滤

我们对每个"链"上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候,我们是不是能把实现相同功能的规则放在一起呢?

我们把具有相同功能的规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围。

五链:(大写)
PREROUTING   在路由之前
INPUT        数据包进入时
FORWARD      数据包经过时
OUTPUT       数据包出去时
POSTROUTING  在路由之后

现在,我们想象一下,这些"关卡"在iptables中为什么被称作"链"呢?

我们知道,防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链"。

所以,我们把每一个"关卡"想象成如下图中的模样 ,这样来说,把他们称为"链"更为合适,每个经过这个"关卡"的报文,都要将这条"链"上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。

 2、表和链的关系

raw表里面:
PREROUTING
OUTPUT
总结:数据包跟踪  内核模块iptables_raw
===============================================================================
mangel表里面有5个链:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
路由标记用的表。内核模块iptables_mangle
================================================================================
nat表里面的链:
PREROUTING
INPUT
OUTPUT
POSTROUTING
转换地址的表(改IP,改端口。当网关使用的linux。保护内外网流量。内核模块叫iptable_nat)
=================================================================================
filter表有三个链:重点
INPUT    #负责过滤所有目标是本机地址的数据包通俗来说:就是过滤进入主机的数据包
FORWARD  #负责转发经过主机的数据包。起到转发的作用
OUTPUT   #处理所有源地址是本机地址的数据包通俗的讲:就是处理从主机发出的数据包
总结:根据规则来处理数据包,如转或者丢。就是实现主机型防火墙的主要表。
内核模块 iptable_filter

 两张图配合理解

 四、iptables的使用

1、安装iptables

yum -y install iptables iptables-services
systemctl start iptables

记得关闭linux自带的防火墙

[root@localhost ~]# iptables -V
iptables v1.4.21
配置文件:
 /etc/sysconfig/iptables-config
 /etc/sysconfig/iptables   #记录规则文件

2、参数解释

-L:列出一个链或所有链中的规则信息
-nL:以数字形式显示地址、端口等信息
-L -v:以更详细的方式显示规则信息
-L --line:查看规则时,显示规则的序号(方便之处,通过需要删除规则-D INPUT 1
-F:默认时删除filter表  删除的是表里的所有,清空所有的规则(-X是清理自定义的链,用的少)
-D:删除链内指定序号(或内容)的一条规则
-P:为指定的链设置默认规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
-t: 指定表名
-Z: 计数清零,清空字节数, 清空数据包个数
.... 更多参数可通过--help查看

3、使用示例

port(协议):tcp、udp、icmp

添加规则:-A

iptables -t filter -A INPUT -p icmp -j REJECT
添加之后,任何机器都不能ping这台机器
[root@localhost ~]# ping 192.168.242.146
PING 192.168.242.146 (192.168.242.146) 56(84) bytes of data.
From 192.168.242.146 icmp_seq=1 Destination Port Unreachable

iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.242.145 -j REJECT
添加这条规则后,192.168.242.145就无法使用连接这台机器
[root@localhost ~]# ssh 192.168.242.146
ssh: connect to host 192.168.242.146 port 22: Connection refused

插入规则:-I

如果不指定插入到第几条,默认插入到第一条
iptables -t filter -I INPUT  2 -p tcp --dport 22 -s 192.168.242.199  -j REJECT 插入到第二条规则上面
iptables -t filter -I INPUT  -p tcp --dport 22 -s 192.168.242.198  -j REJECT   默认插入到第一行

替换(修改)规则:-R

 iptables -t filter -R INPUT  2 -p tcp --dport 22 -s 192.168.242.197 -j REJECT 
把199改为197

删除规则:-D(怎么添加的就怎么删除)

iptables -t filter -D INPUT -p tcp --dport 22 -s 192.168.242.145 -j REJECT
iptables -L --line(显示规则的序列号)
使用序列号删除
iptables -t filter -D INPUT 2 

修改默认策略:-P 只能用DROP和ACCEPT,默认是ACCEPT

iptables -t filter -P INPUT DROP
修改为DROP之后shell终端会断开连接,只能在vmware上操作
iptables -t filter -P INPUT ACCEPT

添加自定义链:-N,默认不生效,需要关联到其他非自定义链才能使用,是用来存储规则的

iptables -N zcg  自己创建的链
iptables -t filter -A blacrach   -p tcp --dport 22 -s 192.168.242.200  -j REJECT  往自定义链上添加

修改自定义链名称:-E

  iptables -E zcg  zzz

删掉自定义链:如果关联了其他链,需要先删除,而且这个自定义链中不能有规则

 iptables -X +链名   删除自定义链

计数清零:-Z   清空字节数,清空数据包个数

[root@localhost ~]# iptables -L -v
Chain INPUT (policy ACCEPT 129 packets, 9850 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     icmp --  any    any     192.168.242.189      anywhere             reject-with icmp-port-unreachable
    0     0 REJECT     icmp --  any    any     192.168.242.191      anywhere             reject-with icmp-port-unreachable
    3   252 REJECT     icmp --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable
    1    60 REJECT     tcp  --  any    any     192.168.242.147      anywhere             tcp dpt:ssh reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 91 packets, 7612 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain black (0 references)
 pkts bytes target     prot opt in     out     source               destination   
[root@localhost ~]# iptables -Z
[root@localhost ~]# iptables -L -v
Chain INPUT (policy ACCEPT 6 packets, 428 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     icmp --  any    any     192.168.242.189      anywhere             reject-with icmp-port-unreachable
    0     0 REJECT     icmp --  any    any     192.168.242.191      anywhere             reject-with icmp-port-unreachable
    0     0 REJECT     icmp --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable
    0     0 REJECT     tcp  --  any    any     192.168.242.147      anywhere             tcp dpt:ssh reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4 packets, 448 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain black (0 references)
 pkts bytes target     prot opt in     out     source               destination    
之所以还有数据包和字节数,是因为我们的shell终端还在连接,所以还有

4、匹配条件

基本匹配:

协议:-p [tcp   udp  icmp]

查端口:

vim /etc/services    记录的是tcp/udp协议簇
vim /etc/protocols   记录的是icmp

端口:使用端口前需要加协议9(-p)

--sport源端口
iptables -A INPUT -p tcp --sport 22 -s 192.168.242.196 -j REJECT
--dport目标端口
iptables -A INPUT -p tcp --dport 22 -s 192.168.242.196 -j REJECT

ip

-s 源ip  source       ip地址 网段  逗号可以分开多个地址
-d 目标ip destination

扩展匹配:

-m  后面+扩展匹配

-m multiport  多端口
iptables -A INPUT -p tcp -m multiport --sport 80,22,1000:2000
                                      --dport
-m iprang    多ip地址
iptables -A INPUT -m iprange --src-range 192.168.242.190-192.168.242.199 -j REJECT 
-m mac
iptables -A INPUT -m mac  --mac-source 52:54:00:86:a1:86 -j REJECT  
获取mac地址的方式
arp -a 10.0.102.101
arping -I eth0 10.0.102.101

目标动作:

ACCEPT:允许数据包通过(默认策略)

DROP:直接丢弃数据包,不给任何回应

REJECT:拒绝数据包,必要时会给数据发送端一个响应

SNAT:源地址转换,可以解决内网用户用一个公网IP上网的问题,POSTROUTING

DNAT:目标地址转换  PREROUTING

REDIRECT:做端口映射

五、网络地址转换NAT

企业中使用,虚拟机无法体现出效果

 1、SNAT:把内网ip转化为公网ip

一个数据包在经过路由之后(或者说在通过防火墙的过滤之后)才被知道他的源ip是谁,在路由之前只能看到目标ip,如果我看不到你的源ip,那怎么匹配想过滤的数据包并进行源地址转换?我防火墙根本就不能确定你是否是符合匹配条件的ip,所以只能使用POSTROUTING

iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -d 192.168.122.0/24 -j SNAT --to-soure 192.168.2.3
在路由之后将源地址(内网ip)122.0访问目标ip122.0,通过SNAT将源地址122.0转换成了(公网ip)2.1,为什么这样做呢?因为数据在回包的时候要知道源地址是谁(得是公网ip),要不然回不去

2、DAT:要把别人的公网ip转换成我们的内部的ip

 

 如果我不在路由之前就把目标地址转换完成,很明显当数据包到达入口ip之后,他的目的就达到了,因为他本来的目标ip就是防火墙的对外公网ip,那么数据包还会往里面走吗?显然不会,所有只能使用PREROUTING

iptables -t nat -A PREROUTING -d 192.168.1.2 -j DNAT --to-destination 192.168.2.2
iptables -t nat -A POSTROUTING -d 192.168.2.2 -j SNAT --to 192.168.2.1

面试题:

iptables -t nat -A PREROUTING -p tcp -d 192.168.122.1 -dport 80 -j REDIRECT --to-destination 192.168.1.1:8080
在数据路由之前将使用tcp协议,目标ip为192.168.122.1,目标端口为80映射为目标ip192.168.1.1,端口8080

六、Firewalld

centos7中默认将原来的防火墙iptables升级为了firewalld,firewalld跟iptables比起来至少有两大好处:

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则之后必须得全部刷新才能生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白四表五链,而且对TCP/IP协议也不理解也可以实现大部分功能。

注:实际上iptables还有第五张表——security表,但是这张表需要结合selinux使用

1、firewalld目录结构

firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),有两个存储位置

1、/etc/firewalld

2、/usr/lib/firewalld

使用规则:当需要一个文件时firewalld会首先到第一个目录中去找,如果可以找到,那么就直接使用,否则会继续到第二个目录中查找。注:两个目录下的同名配置文件,第一个目录下的生效。第二个目录中存放的是firewalld给提供的通用配置文件,如果我们想修改配置,那么可以拷贝一份到第一个目录中,然后再进行修改,当然也可以直接修改第二个目录下的文件

2、zone

firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、external.xml、drop.xml、home.xml、internal.xml、public.xml、trusted.xml,他们都保存在“/usr/lib/firewalld/zones/”目录下

九个zone其实就是九种方案,而且起决定作用的其实是每个xml文件中所包含的内容,而不是文件名,所有不需要对每种zone(每个文件名)的含义花费太多的精力,比如trusted这个zone会信任所有的数据包,也就是说所有数据包都会放行,但是public这个zone只会放行其中所配置的服务,其他的一律不予放行,其实我们如果将这两个文件中的内容换一下,他们的规则就互换了,也就是public这个zone会放行所有的数据包

注意:生效的只有默认zone里面的规则

trusted.xml中zone的target,就是因为它设置了ACCEPT,所以才会放行所有的数据包,二public.xml中的zone没有target属性,这样就会默认拒绝通过,所以public这个zone只有其中配置过的服务才可以通过

3、九区

drop(丢弃)

任何接受的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。

block(限制)

任何接受的网络连接都被IPV4的ivmp-host-prohibited信息和IPV6的icmp6-adm-prohibited信息所拒绝。

public(公共)

在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成伤害,只能接受经过选取的连接。

external(外部)

特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信他们不会对您的计算机造成危害,只能接受经过选择的连接。

dmz(非军事区)

用于您的非军事区内的电脑,次区域内可公开访问,可以有限地进入您的内部网络,仅仅接受经过选择的连接。

work(工作)

用于工作区。您可以基本相信网络内的其他电脑不会对您的电脑造成危害。仅仅接收经过选择的连接。

home(家庭)

用于家庭网络。您可以基本信任网络内的其他计算机不会为好您的电脑。仅仅接收经过选择的连接。

internal(内部)

用于内部网络。您可以基本信任网络内的其他计算机不会威胁您的计算机。仅仅接收经过选择的连接。

trusted(信任)

可接受所有的网络连接。

2、firewalld的使用

查看服务状态:

systemctl status firewalld
systemctl status -l firewalld     #-l 完整信息,如果屏幕显示空间不够,默认情况下会缩略显示

显示防火墙状态
firewall-cmd --state
running

启动关闭服务:

systemctl stop firewalld
systemctl disable firewalld
systemctl reload firewalld  #重新加载配置

配置的三种方法:

firewall-config    图形方式
firewall-cmd       命令行方式
直接编辑对应的xml文件

列出当前有几个zone:

firewall-cmd --get-zone
block dmz drop external home internal public trusted work

获取当前活动的zones:

firewall-cmd --get-active-zones
public
  interfaces:ens33

设置当前区域的接口:

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

临时修改网络接口(lo)为内部区域(internal):

firewall-cmd --zone=internal --change-interface=lo

获取默认的zone:

firewall-cmd --get-default-zone
public

设置默认zone:

firewall-cmd --set-default-zone=public

拒绝所有包:

firewall-cmd --panic-on
#执行之后你会发现你的shell终端动不了了,然后过一会就会断开连接,只能去VNware上操作,取消拒绝状态就行

取消拒绝状态:

firewall-cmd --panic-off

查看是否拒绝:

[root@localhost ~]# firewall-cmd --query-panic
no

查看当前支持的service(跟当前服务器是否已安装某个服务无关):

firewall-cmd --get-services

查看下一次重载后将激活的服务:

firewall-cmd --get-service --permanent

列出zone public当前设置

firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client http
  ports: 80/udp 80/tcp
  protocols: 
  masquerade: no   #伪装功能
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

增加zone public开放http service:

firewall-cmd --zone=public --add-service=http

firewall-cmd --permanent --zone=internal --add-service=http
--permanent  永久生效
不加这个参数,添加的规则都是临时的,重新加载firewalld后会失效

重新加载配置:

firewall-cmd --reload

增加zone public开放443/tcp协议端口:

firewall-cmd --zone=internal --add-port=443/tcp

删除zone public中的ssh服务

firewall-cmd --zone=public --remove-service=ssh

列出zone internal中的所有service:

[root@localhost ~]# firewall-cmd --zone=internal --list-service
ssh mdns samba-client dhcpv6-client

设置黑/白名单:

增加172.28.129.0/24网段到zone trusted

firewall-cmd --zone=trusted --add-source=172.28.129.0/24 --permanent

列出zone trusted的白名单:

firewall-cmd --permanent --zone=trusted --list-sources

添加172.28.13.0/24 到zone drop:

firewall-cmd --zone=drop --add-source=172.28.13.0/24 --permanent
firewall-cmd --reload
firewall-cmd --zone=drop --list-sources
172.28.13.0/24

列出drop中的所有规则:

firewall-cmd --zone=drop --list-all

从drop中删除172.28.13.0/24:

firewall-cmd --zone=drop --remove-source=172.28.13.0/24 --permanent

需要开放端口开放某IP访问权限,需要先查看我们当前默认的zone是哪个,然后在对应的zone里面添加port和source,这样对外才会有作用。

比如我当前的默认zone是public,需要开放80端口对外访问,则执行如下命令:

# firewall-cmd --zone=public --permanent --add-port=80/tcp
# firewall-cmd --reload

也可以直接修改对应的配置文件:

vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
   <zone>
     <short>Public</short>
     <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming      connections are accepted.</description>
     <service name="dhcpv6-client"/>
     <service name="ssh"/>
     <port protocol="tcp" port="80"/>
   </zone>

#注意修改配置文件之后--reload或者重启firewalld服务

3、防火墙高级

1、Direct Rules概述

通过firewall-cmd工具,可以使用 --direct选项在运行时间里增加和删除链。如果不熟悉iptables,使用直接接口非常危险,因为可能无意间导致防火墙被入侵。直接端口模式适用于服务或者程序,以便于在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。

2、高级防火墙Direct规则的使用

Direct Options
The direct options give a more direct access to the firewall. These options
require user to know basic iptables concepts, i.e. table
(filter/mangle/nat/...), chain (INPUT/OUTPUT/FORWARD/...), commands
(-A/-D/-I/...), parameters (-p/-s/-d/-j/...) and targets
(ACCEPT/DROP/REJECT/...).

Direct options should be used only as a last resort when it's not possible to
use for example --add-service=service or --add-rich-rule='rule'.

The first argument of each option has to be ipv4 or ipv6 or eb. With ipv4 it
will be for IPv4 (iptables(8)), with ipv6 for IPv6 (ip6tables(8)) and with eb
for ethernet bridges (ebtables(8)).

[--permanent] --direct --get-all-chains
Get all chains added to all tables. This option concerns only chains
previously added with --direct --add-chain.

[--permanent] --direct --get-chains { ipv4 | ipv6 | eb } table

查看防火墙上设置的规则:

firewall-cmd --direct --get-all-rules

添加高级规则:

firewall-cmd --permanent --direct --add-rules ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.77 -j ACCEPT
#只允许172.25.254.77通过80端口访问主机位为110的http服务。因为访问的是主机位为110的http服务,需要主机位为110的内核同意开启http服务,需要在表filter中设置INPUT。
##-p 数据包类型;--dport 服务端口;

 删除防火墙上的规则:

firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.77 -j ACCEPT
success
#移除:不允许172.25.254.217通过22端口的访问ssh,连接172.25.254.110这条规则

使用direct模式可以慧姐让规则生效:

firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT
firewall-cmd --direct --get-all-rules

端口转发:

端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定 ip 的话就默认为本机,如果指定了 ip 却没指定端口,则默认使用来源端口。 如果配置好端口转发之后不能用,可以检查下面两个问题:

1、 比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听了

2、其次检查是否允许伪装 IP,没允许的话要开启伪装 IP

1. firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
# 将80端口的流量转发至8080
2. firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 --permanent
# 将80端口的流量转发至192.168.0.1
3. firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent
# 将80端口的流量转发至192.168.0.1的8080端口

也可修改配置文件
vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <port protocol="udp" port="80"/>
  <port protocol="tcp" port="80"/>
  <forward-port to-port="8080" protocol="tcp" port="80"/>
  <forward-port to-addr="192.168.0.1" protocol="tcp" port="80"/>
  <forward-port to-addr="192.168.0.1" to-port="8080" protocol="tcp" port="80"/>
</zone>

开启ip伪装:

查看
[root@localhost ~]# firewall-cmd --query-masquerade
no
开启
firewall-cmd --add-masquerade
关闭
firewall-cmd --remove-masquerade

作用:

1. 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。

2. 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。

扩展:

富规则配置举例:     
1.允许新的ipv4和ipv6连接ftp,并使用审核每分钟记录一次
[root@localhost /]# firewall-cmd --add-rich-rule='rule service name=ftp log limit value=1/m audit accept'
2.将源192.168.2.2地址加入白名单,以允许来自这个源地址的所有连接   
[root@localhost /]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept' 
3.拒绝来自public区域中IP地址192.168.0.11的所有流量:
[root@localhost /]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'


关闭的FirewallD防火墙,使用iptables,命令如下:
    #systemctl stop firewalld
    #systemctl disable firewalld
    #yum install iptables-services
    #systemctl start iptables
    #systemctl enable iptables    

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值