Linux下火墙的两种管理机制——Firewalld与Iptables

1.Firewalld概述

动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙,用以支持网络 “zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
系统提供了图像化的配置工具firewall-config、system-config-firewall, 提供命令行客户端firewall-cmd, 用于配置 firewalld永久性或非永久性运行时间的改变:它依次用 iptables工具与执行数据包筛选的内核中的 Netfilter通信。

2.两者的切换

关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
打开iptables
systemctl unmask iptables
systemctl start iptables
systemctl enable iptables

3.两者的不同

  • iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里.
  • 使用 iptables service每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行时间内,改变设置而不丢失现行连接。
  • iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口

4.网络区域的划分

Linux下火墙的两种管理机制——Firewalld与Iptables_第1张图片

5.selinux对端口的控制

以http为例

semanage  port  -l | grep  http                   ##查看
semanage   port -a  -t  http_port_t  -p tcp 6666  ##添加新的端口
semanage   port -d  -t  http_port_t  -p tcp 6666  ##删除

Linux下火墙的两种管理机制——Firewalld与Iptables_第2张图片

6.firewalld 命令行管理

firewall-cmd  --state                         ##状态 
firewall-cmd  --get-active-zones              ##生效的网络域
firewall-cmd  --get-default-zone              ##默认网络域
firewall-cmd  --get-zones                     ##所有网络域
firewall-cmd  --zone=public --list-all        ##公共网络域列表
firewall-cmd  --get-services                  ##所有的服务
firewall-cmd  --list-all-zones                ##所有网络域列表
firewall-cmd  --set-default-zone=dmz          ##将默认网络域设置为非军事区
firewall-cmd   --reload                       ##刷新,只改变当前状态,不影响当前正在连接的
firewall-cmd   --complete-reload              ##完全刷新,断开所有当前连接的
firewall-cmd   --permanent  --zone=internal --add-source=172.25.0.0/24      ##添加指定网络域的网段(–permanent参数表示永久生效设置,如果没有指定–zone参数,那么会加入默认区域)
firewall-cmd   --permanent  --zone=internal --remove-source=172.25.0.0/24   ##删除
firewall-cmd   --permanent  --zone=internal --add-interface=eth0            ##添加指定网络域的ip
firewall-cmd   --permanent  --zone=internal --remove-interface=eth0         ##删除
firewall-cmd   --permanent  --zone=internal --change-interface=eth0
firewall-cmd --permanent  --zone=public  --add-service=ssh                  ##给指定网络域添加服务
firewall-cmd --permanent  --zone=public  --remove-service=ssh               ##删除
firewall-cmd --permanent  --zone=public  --add-port=8080/tcp                ##给指定网络域添加端口
firewall-cmd --permanent  --zone=public  --remove-port=8080/tcp             ##删除
firewall-config                                                             ##图形界面
/etc/firewalld/zones/public.xml                                             ##火墙配置文件

Linux下火墙的两种管理机制——Firewalld与Iptables_第3张图片
Linux下火墙的两种管理机制——Firewalld与Iptables_第4张图片

7.Direct Rules

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

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

  • 直接端口模式添加的规则优先应用。

      firewall-cmd  --direct --get-all-rules ##列出规则
      firewall-cmd  --permanent --remove-service=ssh    -p tcp端口  --dport 端口  -s 访问来源   -j 动作  ##删除规则
      firewall-cmd  --direct  --add-rule ipv4 filter  INPUT 1 -p tcp --dport 22   -s 172.25.254.20 -j ACCEPT ##添加规则,只允许20连接
      firewall-cmd  --direct  --add-rule ipv4 filter  INPUT 1 -p tcp --dport 22 !  -s 172.25.254.20 -j ACCEPT  ##只有20无法连接
    

目标主机没有sshd服务
Linux下火墙的两种管理机制——Firewalld与Iptables_第5张图片
在这里插入图片描述
Linux下火墙的两种管理机制——Firewalld与Iptables_第6张图片
在这里插入图片描述
250主机能够链接,但220主机无法链接,策略生效
改变策略允许除了250主机外的主机通过22端口连接本机,先删除原先策略
在这里插入图片描述

250无法连接120,220可以连接
在这里插入图片描述
在这里插入图片描述

8.伪装和端口转发

实验环境的搭建
准备一台双网卡主机为服务端
Linux下火墙的两种管理机制——Firewalld与Iptables_第7张图片

一台单网卡主机为客户端
在这里插入图片描述
在这里插入图片描述
在服务端开启地址伪装(路由后转换)

firewall-cmd --permanent   --add-masquerade  

Linux下火墙的两种管理机制——Firewalld与Iptables_第8张图片
查看内外网联系
在这里插入图片描述
测试
服务端设定为路由器,客户端通过路由连接目标主机
在这里插入图片描述
但我们发现连接目标主机的是220主机,并不是客户端主机,这就是开启了地址伪装的功能
如何查看到真正连接者的ip呢?这就需要在服务端开启端口转发(路由前转换)

在服务端

firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.120 ##当目标主机通过22端口连接服务端,服务端会直接转到客户端

测试
用目标主机连接服务端,发现直接跳转到客户端
Linux下火墙的两种管理机制——Firewalld与Iptables_第9张图片

9.iptables基本参数

Linux下火墙的两种管理机制——Firewalld与Iptables_第10张图片
iptables火墙策略执行生效规则

  • 策略即改即生效

  • iptables -nL 是从上到下短路规则查看权限,匹配了就直接通过,后面就不看了

10.iptables基本命令操作

iptables -nL 		##列出指定表中的策略,并对来源地址进行反向解析

Linux下火墙的两种管理机制——Firewalld与Iptables_第11张图片

iptables -t filter -L	    ##查看filter表中的策略,不做解析
iptables -t filter -nL		##查看filter表中的策略,并做解析

Linux下火墙的两种管理机制——Firewalld与Iptables_第12张图片

service iptables save			##保存当前策略
iptable  -F			            ##刷掉filter表中的所有策略,当没有用-t指定表名称时,默认为表filter

Linux下火墙的两种管理机制——Firewalld与Iptables_第13张图片

iptables -A INPUT -i lo -j ACCEPT	                ##允许lo
iptables -A INPUT -p tcp --dport 22 -j ACCEPT	    ##允许访问22端口
iptables -A INPUT -s 172.25.254.250 -j ACCEPT		##允许250主机访问本机所有端口
iptables -A INPUT -j REJECT 			            ##拒绝所有主机的数据来源

Linux下火墙的两种管理机制——Firewalld与Iptables_第14张图片

iptables -N redhat	##增加链redhat

在这里插入图片描述

iptables -E redhat hello	##改变链名称

在这里插入图片描述

iptables -X hello	                                ##删除链
iptables -D INPUT 1	                                ##删除INPUT链中的第一条策略

Linux下火墙的两种管理机制——Firewalld与Iptables_第15张图片

iptables -I INPUT  2 -p tcp --dport 80  -j REJECT	##插入策略到INPUT中的第二条(不写插入位置。默认第一条)

Linux下火墙的两种管理机制——Firewalld与Iptables_第16张图片

iptables -R INPUT 4 -p tcp --dport 80 -j ACCEPT	    ##修改第四条策略

Linux下火墙的两种管理机制——Firewalld与Iptables_第17张图片

iptables -P INPUT DROP		                        ##把INPUT表中的默认策略改为drop

Linux下火墙的两种管理机制——Firewalld与Iptables_第18张图片

11.利用iptables 实现地址伪装和端口转发

地址伪装

在服务端

iptables -F	##刷掉原有的火墙策略
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.69.220   ## ##服务端将客户端的ip转换为172.25.254.220
iptables -nL -t nat

在这里插入图片描述
在客户端测试
Linux下火墙的两种管理机制——Firewalld与Iptables_第19张图片

端口转发

在服务端

iptables  -t nat -A PREROUTING   -i eth1  -p tcp --dport 22 -j DNAT --to-dest 1.1.1.100  ##当真机通过22端口连接服务端,服务端会直接转到客户端

在这里插入图片描述
在目标主机测试,连接服务端会直接调转到客户端
在这里插入图片描述

12.Iptables管理策略优化

在实际操作中,因为iptables是从上到下依次查看,通过了就不查看了,所以我们可以优化它的读取策略

iptables  -A INPUT  -m  state  --state ESTABLISHED,RELATED -j ACCEPT          ##准许正在使用的和已经使用过的
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT                        ##准许通过回环的新的访问
iptables  -A INPUT  -m  state  --state NEW  -p  tcp  --dport 3260 -j ACCEPT   ##准许通过860端口的新的访问
iptables  -A INPUT  -m  state  --state NEW  -p  tcp  --dport 445 -j ACCEPT    ##准许通过445端口的新的访问
iptables  -A INPUT  -m  state  --state  NEW -j REJECT                         ##其他的的新访问的全部拒绝

你可能感兴趣的:(Linux下火墙的两种管理机制——Firewalld与Iptables)