一 、防火墙的介绍
防火墙是整个数据包进入主机前的第一道关卡,是一种位于内部网络和外部网络之间的网络安全系统,是一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙主要是通过Netfilter与TCPwarppers两个机制来管理的
firewalld编写火墙策略的工具,开启火墙自动管理火墙数据
同名管理iptable 更专业
二、firewalld管理火墙
firewalld是动态防火墙后台程序,它提供了一个动态管理的防火墙,用以支持网络“zones”,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对ipv4和ipv6防火墙的设置支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口
- 可以有三种方式来设置firewalld
- 使用命令行工具firewall-cmd
- 使用图形管理工具firewall-config
- 使用/etc/firewalld中的配置文件来设置
- 防火墙的基础开启命令
systemctl start firewalld 开启防火墙
systemctl stop firewalld 关闭防火墙
systemctl enbale firewalld 设置防火墙开机自启动
systectl disable firewalld 设置防火墙开机禁用
systemctl status firewalld 查看防火墙状态
- firewalld所有的域
- firewall-cmd的常用命令
--state 火墙开启状态
--get-active-zones 列出当前正在使用的所有区域(具有关联的接口或源)及接口和源信息
--get-default-zone 查询当前默认区域
--get-zones 列出所有可用区域
--zone=public --list-all列出public域的所有配置(接口、源、服务和端口)
--get-services 列出所有域定义服务
--list-all-zones 列出所有区域的所有配置(接口、源、服务和端口)
--set-default-zone=dmz 设置默认域为dmz,此命令会同时更改运行时配置和永久的配置
--add-scoure= 将来自IP地址或网络/掩码的所有流量路由到指定区域
--remove-scoure= 从指定区域中删除用于路由来自IP地址或网络/掩码的所有流量规则
--add-interface= 将来自该接口的所有流量到指定区域
--change-intergace= 将接口已有绑定区域而与其他区域关联
--list-all 列出默认区域的所有配置(接口、源、服务和端口)
--add-service= 允许区域某服务的流量
--add-port= 允许区域某端口的流量
--remove-service= 从区域删除某服务的规则
--remove-port= 从区域删除某端口的归则
--reload 丢弃Runtime配置并用Permanet配置
1.列出默认区域的所有配置
2.查询当前默认区域
3.从区域删除某服务的规则
[root@localhost ~]# firewall-cmd --permanent --remove-service=
注意使用table键补齐
4.防火墙状态的查看
[root@localhost ~]# firewall-cmd --state running
5.查看防火墙所有域
6.查看某个域的具体信息(示例work域)
7.列出可以使用的服务[root@localhost ~]# firewall-cmd --get-services
8.防火墙允许http服务(添加http服务)
9.删除http服务
10.将指定的ip加入到trusted域
11.删除刚才添加的ip
12.拒绝指定主机ip的所有网络连接
- (加入到block域中,该指令时有回应的)
- 加入到drop域,没有回应
13.将eth0接口从public域中移除
14.将eth0接口添加到trusted域
15.将eth0接口从之前的域转移到public域
16.添加8080端口到public域
17.查看firewalld相关配置文件
18.添加http8080服务(查看服务时要可以列出)
- 添加配置文件http8080.xml文件
- 编辑配置文件
- 重启火墙服务
- 之后查看可以列出的服务
19.查看firewalld的区域相关的配置文件
- 查看默认public域的信息
默认public域的服务中是有ssh服务的
- 编辑public域配置文件
删除默认配置文件中的ssh服务
[root@localhost zones]# vim public.xml
- 1
- 再次查看默认public域的信息
20.firewalld对服务的控制,永久移除域临时刷新和永久刷新区别
firewall-cmd --permanent --remove-service=ssh 永久移除ssh服务,不加--permanent是暂时移除
firewall-cmd --list-all
firewall-cmd --reload 临时刷新:刷新防火墙的状态,不会改变当前正在的连接
firewall-cmd --list-all
firewall-cmd --complete-reload 永久刷新:完全刷新防火墙的状态,会断开当前正在的连接
- 防火墙允许的服务中有ssh服务可以正常连接
- 防火墙服务中永久移除ssh服务,之后临时刷新,之前ssh连接的ssh还是可以使用的
- 执行永久刷新之后就不可以继续使用了
21.Direct Rules/端口模式增加特定的防火墙规则
通过firewall-cmd工具,可以使用 --direct选项在运行时间里增加或者移除链。如果不熟悉iptables,使用直接接口非常危险,因为你可能无意间导致防火墙被入侵,直接端口模式适用于服务或者程序,以便于在运行时间内增加特定的防护规则,端口模式添加的规则优先应用.
firewall-cmd --list-all
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.65 -p tcp --dport 22 -j ACCEPT 22端口,只允许172.25.254.65来连接,-s +来源,-p 协议,-dport +目的端口,-j + 动作
firewall-cmd --remove-service=ssh --permanent 永久移除ssh服务
firewall-cmd --reload 重新加载
firewall-cmd --list-all
firewall-cmd --direct --get-all-rules 查看增加的防火墙策略规则
-j ACCEPT 允许
-j drop 拒绝 无响应 继续访问,会加大负荷
-j reject 拒绝 响应 下一次不会访问
查看防火墙的策略
之后在火墙允许开启的服务中移除ssh服务,主机ip172.25.254.65主机还是会ssh连接到本机,除此之外的其他主机被拒绝,因为在火墙策略允许了
- 删除防火墙策略
三、防火墙的地址伪装以及端口转发 - 原地址转换(SNAT)
1.给充当路由器的主机添加到两块网卡
firewall-cmd --add-masquerade (地址伪装)
firewall-cmd --list-all
-
开启地址伪装功能
-
在另一台1.1网段的虚拟机里设置网关,看是否能ping通真机(172网段)
-
端口转发
-
在双网卡的主机上设置
firewall-cmd --list-all
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.165 (端口转发)
firewall-cmd --list-all
- 设置端口转发
- 测试机ssh连接25主机,之后查看ip是165
四、iptables管理火墙 - iptables对应有三张表五条链
三表的解释:
- Fliter表:INPUT链,OUTPUT链,FORWARD链
- NAT表:INPUT链,PREOUTING链,OUTPUT链,POSTROUTING链
- Mangle表:PREOUTING链,OUTPUT链,POSTROUTING链,INPUT链,FORWARD链
- Filter表:负责过滤数据包,经过内核(访问本机的)input和output。
- NAT表:用于网络地址转换(ip,端口),(不访问本机的数据包),做地址转化的时候要用到filter表的forward链。
- Mangle表:修改数据包的服务类型,TTL,并且可以配置路由时先QOS(限制或开放不够用的时候用Mangle),mangle(转做附加说明,前两张表不够用)
五链的解释:
-
INPUT链:进来的数据包应用此规则链中的规则,input匹配目的IP是本机的数据包;
-
OUTPUT链:外出的数据包应用此规则链中的规则
-
FORWARD链:转发数据包时应用此规则链中的规则,forward匹配流经本机的数据包;
-
PREROUTING链:对数据包做路由选择前应用此规则链中的规则,prerouting用来修改目的地址用来做DNAT;
-
POSTROUTING链:对数据包做路由选择后应用此规则链中的规则,postrouting用来修改源地址用来做SNAT
mangle(前两张表不够用,用mangle表,有五个链:PREOUTING链,OUTPUT链,POSTROUTING链,INPUT链,FORWARD链)
- 实验配置
- 实验环境:关闭firewalld火墙管理工具,开启iptables管理工具
关闭firewalld
开启iptables
iptables的基础语法:
- -A 向规则链中添加一条规则,默认被添加到末尾
- -t 指定要操作的表,默认是filter
- -n 不做解析
- -L 列出指定表中的策略
- -D 从规则链中删除规则,可以指定序号或者匹配的规则来删除
- -R 进行规则替换
- -I 插入一条规则,默认被插入到首部
- -F 清空所选的链,重启后恢复
- -N 新建用户自定义的规则链
- -X 删除用户自定义的规则链
- -p 用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,
- -s 指定源地址
- -d 指定目的地址
- -i 进入接口
- -o 流出接口
- -j 采取的动作,accept,drop,snat,dnat,masquerade
- –sport 源端口
- –dport 目的端口,端口必须和协议一起来配合使用
- ACCEPT 允许
- REJECT 拒绝
- DROP 丢弃
iptables -nL 默认查看的是filter iptables -t filter -nL iptables -t mangle -nL iptables -t nat -nL iptables -L iptables -F iptables -nL service iptables save vim /etc/sysconfig/iptables
指定某个表查看
- 清空所选的链
iptables的默认策略信息文件:
/etc/sysconfig/iptables默认iptables火墙的策略文件
- 编写filter表规则
iptables -nL
iptables -t filter -A INPUT -i lo -j ACCEPT 回环接口的输入在fiter被允许
iptables -nL
iptables -t filter -A INPUT -s 172.25.254.25 -j ACCEPT 允许172.25.254.25来访问本机
iptables -nL
iptables -t filter -A INPUT -s 172.25.254.25 -j REJECT 拒绝172.25.254.25来访问本机
iptables -nL
iptables -D INPUT 3 删除filter表INPUT链里的第三个策略
iptables -nL
iptables -R INPUT 2 -s 172.25.254.25 -j REJECT (修改规则,拒绝172.25.254.25访问所有端口)
iptables -I INPUT 2 -s 172.25.254.25 -p tcp --dport 22 -j ACCEPT(-I插入,允许172.25.254.25来连接22端口。)
注意:防火墙的读取规则是从上到下,遇到自己匹配的就执行。
测试使用172.25.254.65主机来ssh来连接
- 配置策略拒绝172.25.254.65主机连接,在之前允许的基础之上再拒绝连接
再次使用172.25.254.65主机连接测试
连接成功,证明火墙的策略的读取规则是从上往下的,遇到可以匹配的就直接执行,因为允许策略在拒绝策略之前,所以就直接执行了
[root@localhost ~]# iptables -D INPUT 3 删除第三条策略
[root@localhost ~]# iptables -nL
[root@localhost ~]# iptables -R INPUT 2 -s 172.25.65.250 -j REJECT 修改第二条策略为拒绝策略
修改第二条策略
修改之后,ssh连接就已经断掉了(因为之前的命令就是使用172.25.65.250主机ssh连接来写的)
再次使用172.25.65.250主机测试连接连接不上了
虚拟机输入:
允许172.25.65.250主机访问22端口策略,并且添加的这个策略为第二条
此时之前断掉的ssh连接就已经恢复了,但只是恢复了22端口,其他端口的服务还是因为第三条拒绝策略的影响是拒绝的
- 修改预设规则(Policy)
iptables -nL
iptables -P INPUT DROP 修改预设规则为DROP
iptables -nL
iptables -P INPUT ACCEPT
修改回来
-
添加、修改、删除链
-
添加链
-
修改链名
-
删除链
-
NAT表的端口转发和地址伪装
-
端口转发
iptables -t nat -nL
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.165:22 将本机的22端口转化为目的地1.1.1.165的端口22,这个动作是在路由前
iptables -t nat -nL
测试机ssh连接测试
- 地址伪装
未做地址伪装之前,使用172网段的测试机区ping1.1.1.网段时一直未响应
做地址伪装
测试可以ping通