动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙, 用以支持网络 “ zones” , 以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设
置的支持。它支持以太网桥 , 并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口
系统提供了图像化的配置工具 firewall-config 、 system-config-firewall, 提供命令行客户端 firewall-cmd, 用于配置 firewalld 永久性或非永久性运行时间的改变 : 它依次用iptables 工具与执行数据包筛选的内核中的 Netfilter 通信
firewalld 和 iptables 服务
firewalld 和 iptables 服务之间最本质的不同是 :iptables service 在 /etc/sysconfig/iptables 中储存配置
firewalld 将配置储存在 /usr/lib/firewalld/ 和/etc/firewalld/ 中的各种 XML 文件里 .
参数描述
source
指定源地址 , 可以是一个 ipv4/ipv6 的地址或网段 , 不支持使用主机名。
destination
指定目的地址 , 用法和 source 相同。
service
服务名称是 f irewalld 提供的其中一种服务。要获得被支持的服务的列
表 , 输入以下命令 :
firewall-cmd --get-services 命令为以下形式 :
service name=service_name
port
端口既可以是一个独立端口数字 , 又或者端口范围 , 例如 ,5060-5062 。协议可以指定为 tcp 或udp 。命令为以下形式 :port port=number_or_range protocol=protocolprotocol
协议值可以是一个协议 ID 数字 , 或者一个协议名。预知可用协议 , 请查阅 /et/protocols。
命令为以下形式 :
protocol value=protocol_name_or_ID
启用 firewalld
yum install -y firewalld firewall-config
##安装firewalld以及firewalld的图形界面
systemctl start firewalld
##启动firewalld
systemctl enable firewalld
##将firewalld设置为开机自启
systemctl disable firewalld
##禁止firewalld
systemctl stop firewalld
##停止fireawlld
为了实验的可靠性提前将iptables关闭并锁定
systemctl stop iptables
##关闭iptables
systemctl mask iptables
##锁定iptables
firewall-config
进入firewalld图形界面
可以看到现在firewalld默认的zone是public
在zone是public的情况下是不允许http连接的
我们来切换一下firewall的默认zone切换为trusted
点击左上角的options然后change default zone
trusted是信任的zone所有firewall上允许的服务都会被允许
http就被允许了
在zone中添加源
如何在zone不被允许的情况下进行服务
在trusedzone中加入源就可以实现
将zone切换回public,ssh服务会被拒绝,可以在trusted中添加源允许这个ip通过trusted这个zone访问ssh服务
添加开放的端口
将firewall的zone设置为block服务全部关闭
在trusted zone上开放http端口
本地允许
上面的端口是连接的端口
下面的端口是实际接入的端口
允许特定的ip
使用命令行接口配置防火墙
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
修改默认域
在一个双网卡的主机上配置两个不同网段的ip
在一个双网卡的主机上配置两个不同网段的ip
安装http写发布目录并启动http
将一个网卡放在public另一个在trusted
用另外两个主机(ip的网段不同)测试
并使用下面指令
firewall-cmd --list-all
查看
firewall-cmd --list-all --zone=trusted
查看特定域
firewall-cmd --permanent(永久生效) --zone=internal--add-source=172.25.0.0/24
添加源
源的添加只能添加进一个域,如果要添加到另一个域需要先删除之前源所在的域
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24
删除源
firewall-cmd --permanent --zone=internal--add-interface=eth0
添加网卡同一网段能访问
firewall-cmd --permanent --zone=internal--change-interface=eth0
改变网卡的域
firewall-cmd --permanent --zone=internal--remove-interface=eth0
删除网卡
查看
在这里插入图片描述
因为两块网卡都在public域下,所以http服务是不被允许连接的
将eth1这块网卡转到trusted域下
则1.1.1.开头的网段可以进行访问
172开头的不行
将eth1从zone中删除
在zone上添加源
刚才172网段的ip不能通过http访问
现在添加一个源在trusted
测试
火墙上服务的操作
两块网卡都可以进行ssh服务
在public中删除ssh
将火墙服务刷新和完全刷新
将不能进行ssh服务
在删除服务后会在 /etc/firewalld/zones生成一个文件public.xml.old
public.xml是现在public这个zone上开启服务的说明文件
因为删除了ssh服务所以服务中没有ssh
public.xml.old是之前修改之前的服务说明文件
将ssh服务添加回来
在/lib/firewalld下的services下可以看到ssh服务
修改ssh.xml
修改ssh服务的端口
重启firewalld
如果正有设备使用ssh连接主机那么连接的那台主机会产生死机
解决方法
重新开启一个shell使用kill -9 ssh
强行停止服务
再次连接失败
查看ssh服务在火墙的默认开启端口还是22
Direct Rules
通过 firewall-cmd 工具 , 可以使用 --direct 选项在运行
时间里增加或者移除链。如果不熟悉 iptables , 使用直接接口
非常危险 , 因为您可能无意间导致防火墙被入侵。直接端口模式
适用于服务或者程序 , 以便在运行时间内增加特定的防火墙规则。
直接端口模式添加的规则优先应用
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.183 -p tcp --dport 22 -j ACCEPT
允许183ssh
firewall-cmd --remove-service=ssh
在public上删除ssh服务
firewall-cmd --list-all
查看
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.183 -p tcp --dport 22 -j ACCEPT
删除特殊规则
firewall-cmd --direct --get-all-rules
查看所有规则
在火墙上添加一个特殊的规则,并删除ssh服务
用过写入内核文件来给ip添加ssh权限
查看所有特殊规则
测试
规则写入的ip可以访问
没写入的不能访问
删除特殊规则
将特殊规则修改为特定的ip不能进行ssh
测试
伪装
将1.1.1网段的ip伪装成172开头的可以对172网段进行ssh
首先是需要在双网卡主机上开启伪装服务
firewall-cmd --add-masquerade
以及
sysctl -a | grep ip_forward
查看ip_forward是否为1
在单网卡主机上添加双网卡主机的网关
在双网卡主机上输入
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.126
添加规则
测试
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。
系统优点
netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm 和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED。
状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后, RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。
netfilter/iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
另外,netfilter/iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
iptables
-t ##指定表名称
-n ##不作解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
–dport ##端口
-s ##数据来源
-j ##动作
ACCEPT ##允许
REJECT ##拒绝
DROP ##丢弃
-N ##增加链
-E ##修改链名称
-X ##删除链
-D ##删除指定策略
-I ##插入
-R ##修改策略
-P ##修改默认策略
iptables -t filter -nL
#查看filter表中的策略
iptable -F
#刷掉filter表中的所有策略,当没有用-t指定表名称时默认时filter
service iptables save
#保存当前策略
iptables -A INPUT -i lo -j ACCEPT
#允许lo
iptables -A INPUT -s 172.25.254.250 -j ACCEPT
##允许250主机访问本机所有端口
iptables -A INPUT -j REJECT
##拒绝所有主机的数据来源
iptables -N redha
t ##增加链redhat
iptables -E redhat westos
##改变链名称
iptables -X westos
##删除westos链
iptable -D INPUT 2
##删除INPUT链中的第二条策略
iptables -I INPUT -p tcp --dport 80 -j REJECT
##插入策略到INPUT中的第一条
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT
##修改第一条策略
iptable -P INPUT DROP
##把INPUT表中的默认策略改为drop
相关操作
首先关闭firewall 开启iptables
查看filter表
查看nat表
查看mangle表
查看默认的表,默认为filter
刷新
查看实际的表
/etc/sysconfig/iptables
保存当前策略
iptables -A INPUT -i lo -j ACCEPT
#允许lo
iptables -A INPUT -s 172.25.254.250 -j ACCEPT
##允许250主机访问本机所有端口
拒绝
iptable -D INPUT 3
##删除INPUT链中的第3条策略
`iptables -I INPUT 2 -p -s 172.25.254.18 -p tcp --dport 22 -j ACCEPT ##插入策略到INPUT中的第2条
iptable -P INPUT DROP
##把INPUT表中的默认策略改为drop
改为accept
测试
iptables -N westos
##增加链westos
iptables -E redhat WESTOS
##改变链名称