一. 火墙定义
火墙是位于内部网和外部网之间的一个屏障,按照系统管理员预先设定好的规则,管理数据的输出。火墙属于系统的第一道防线,目的是为了防止非法用户进入
一般netfilter=火墙管理火墙有两种工具: iptables , firewal
#### 二.火墙管理工具切换 ####
在rhel8中默认使用的是firewalld
firewalld----->iptables
dnf install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
systemctl enable --now iptables
iptales -------> fiewalld
dnf install firewalld -y
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl enable --now firewalld
三. firewalld
1.配置实验环境
两个虚拟机 一个单网卡 一个双网卡
nodea:双网卡 172.25.243.173/1.1.1.73
node:单网卡 1.1.1.73
主机:172.25.254.73
#westos-vmctl reset nodea
#westos-vmctl reset nodeb
配置nodea为双网卡
配置nodea网络----------------------
#ifconfig
#cd /etc/sysconfig/network-scripts
#ls
#vim ifcfg-ens3
-------------
DEVICE=ens3
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.25.254.173
NETMASK=255.255.255.0
---------------
#cp ifcfg-ens3 ifcfg-ens11
#vim ifcfg-ens11 ---配置第二个网卡
------------
DEVICE=ens11
ONBOOT=yes
BOOTPROTO=none
IPADDR=1.1.1.173
NETMASK=255.255.255.0
-----------------
#nmcli connection reload
#nmcli connection up System\ ens3 ---(up后按两下tab键补气)
#nmcli connection up System\ ens11
#ifconfig ---配置成功
#nmcli connection delete Wired\ connection\ 1
#nmcli connection delete Wired\ connection\ 2 ---删除多余的
#nmcli connection show
#ifconfig
#ping 172.25.254.73
#ping 1.1.1.73 ---都可ping通 配置成功
下图标注的是需要留下的
-配置nodeb网络--------
#ifconfig
#cd /etc/sysconfig/network-scripts
#vim ifcfg-ens3
---------
DEVICE=ens3
ONBOOT=yes
BOOTPROTO=none
IPADDR=1.1.1.73
NETMASK=255.255.255.0
-------------
#nmcli connection reload
#nmcli connection up ens3
#ifconfig
#ping 1.1.1.173 ---ping通 配置成功
##2.关于firewalld的域 ##
trusted ##接受所有的网络连接
home ##用于家庭网络,允许接受ssh mdns ipp-client samba-client dhcp-client
work ##工作网络 ssh ipp-client dhcp-client
public ##公共网络 ssh dhcp-client
dmz ##军级网络 ssh
block ##拒绝所有
drop ##丢弃 所有数据全部丢弃无任何回复
internal ##内部网络 ssh mdns ipp-client samba-client dhcp-client
##3.关于firewalld的设定原理及数据存储 ##
/etc/firewalld ##火墙配置目录
/lib/firewalld ##火墙模块目录
##4. firewalld的管理命令 ##
firewall-cmd --state ##查看火墙状态
firewall-cmd --get-active-zones ##查看当前火墙中生效的域
firewall-cmd --get-default-zone ##查看默认域
firewall-cmd --list-all ##查看默认域中的火墙策略
firewall-cmd --list-all --zone=work ##查看指定域的火墙策略
firewall-cmd --set-default-zone=trusted ##设定默认域
firewall-cmd --get-services ##查看所有可以设定的服务firewall-cmd --permanent --remove-service=cockpit ##移除服务
firewall-cmd --reload ##重启服务firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block ##指定数据来源访问指定域
firewall-cmd --reloadfirewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block ##删除自定域中的数据来源
firewall-cmd --permanent --remove-interface=ens224 --zone=public ##删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens224 --zone=block ##添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens224 --zone=public ##更改网络接口到指定域
实验:命令操作
----173 nodea里面做实验——---
##查看火墙状态
#firewall-cmd --state
##火墙状态可视化
#dnf search firewall-config ---火墙状态图形化
#dnf install firewall-config-0.8.0-4.el8.noarch
#firewall-config ---查看火墙状态
-##火墙模块目录
#cd /usr/lib/firewalld/
#ls
#cd services
#ls ---查看支持的服务
#vim http.xml ---查看http xml文件
##火墙配置目录
#ls /etc/firewalld/
#ls /etc/firewalld/services
#ls /etc/firewalld/zones
##查看火墙策略
#firewall-cmd --list-all --默认域的火墙策略
#cd /etc/firewalld/zones
#cat public.xml ---public域支持的服务
#firewall-cmd --permanent --add-service=http --默认情况下不支持apache 需要手动添加
#cat public.xml
#firewall-cmd --reload
##域的查看和设定
#firewall-cmd --get-default-zone
#firewall-cmd --get-active-zone
#firewall-cmd --set-default-zone=trusted
#firewall-cmd --get-default-zone
#dnf install httpd
#systemctl enable --now httpd
#firewall-cmd --set-default-zone=public
#firewall-cmd --list-all
#firewall-cmd --remove-service=http ---删除http服务做实验
##firewall-cmd --reload
现在火墙域为默认public 是不支持apache服务的
测试
-------73火狐 输入 172.25.254.173 不能打开 因为public默认情况下 是不支持apache服务的---------
#firewall-cmd --set-default-zone=trusted --信任网络 所有网络均可连接
#firewall-cmd --reload
测试
-------73火狐 输入 172.25.254.173 可以打开 显示默认界面 因为火墙策略已经改为trusted 支持所有服务-------
#firewall-cmd --set-default-zone=block --拒绝所有
测试
-----73火狐 输入 172.25.254.173 不能打开
------nodeb 输入:curl http://1.1.1.73 也无法连接
#firewall-cmd --set-default-zone=drop
测试
-----172.25.254.73火狐 输入 172.25.254.173 不能打开 一直转圈
------73nodea ssh 也无法连接 但是也不拒绝 没有反应
#firewall-cmd --set-default-zone=public --设置回public#firewall-cmd --list-all--zone=trusted --查看指定域的策略
#firewall-cmd --list-service --查看默认域支持那些服务
#firewall-cmd --get-services ---查看所有服务
#firewall-cmd --get-services | sed 's/ /\n/g' --自动换行
指定数据来源
#firewall-cmd --permanent --add-source=172.25.254.73--zone=trusted
172.25.254.73网络被信任 任意访问
#firewall-cmd --reload
测试
172.25.254.73 火狐访问172.25.254.173 访问成功
1.1.1.73访问http://1.1.1.173 访问失败 因为默认域是public不支持apache
#firewall-cmd --permanent --remove-source=172.25.254.73--zone=trusted --删除指定来源
#firewall-cmd --reload
指定端口
ens3---172.25.254.173 ens11---1.1.1.173
#firewall-cmd -get-active-zone
#firewall-cmd --remove-interface=ens11 --zone=public
#firewall-cmd -get-active-zone
##firewall-cmd --add-interface=ens11 --zone=trusted --11端口添加到trusted域上
#firewall-cmd -get-active-zone
测试:
-----172.25.254.73火狐 输入 172.25.254.173 访问失败
---nodeb 输入:curl http://1.1.1.73 连接成功 因为11端口是trusted支持apache
###firewall-cmd --change-interface=ens11 --zone=public --恢复设置
#firewall-cmd -get-active-zone
测试
---nodeb 输入:curl http://1.1.1.73 连接失败 因为11端口恢复了public不支持apache
5.firewalld的高级规则
实验:firewall的高级规则
允许某个ip访问 别的都拒绝 怎么设置呢? 可以设置高级规则
-----------173--------
高级规则的建立
#firewall-cmd --direct --get-all-rules ---查看高级规则
#firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.73 -p tcp --dport 80 -j REJECT
除了172.25.254.73可以访问 其他都被拒绝
#firewall-cmd --direct --get-all-rules --规则设置成功
测试:172.25.254.73可以访问 172.25.254.173
1.1.1.73 不能访问1.1.1.173
高级规则的删除
#firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 ! -s 172.25.254.73 -p tcp --dport 80 -j REJECT --删除高级规则
#firewall-cmd --direct --get-all-rules ---查看高级规则 删除成功
试:172.25.254.73可以访问 172.25.254.173
1.1.1.73 可以访问1.1.1.173
四.iptables
#####1. iptables 的使用 ####
#火墙策略的永久保存#
/etc/sysconfig/iptables ##iptables 策略记录文件
永久保存策略
iptales-save > /etc/sysconfig/iptables
service iptables save
####2.火墙默认策略#### [三张表 五条链】
默认策略中的5条链
input ##输入
output ##输出
forward ##经过
postrouting ##路由之后
prerouting ##路由之前
默认的3张表
filter ##经过本机内核的数据(input output forward)
nat ##不经过内核的数据(postrouting,prerouting,input,output)
mangle ##当filter和nat表不够用时使用(input output forward prerouting,input,output)
###3.iptables命令管理##
实验:iptable命令管理操作
1.安装iptables-service服务及开启
dnf search iptables
dnf install iptables-services -y [搜索后复制即可】
systemctl disable --now firewalld --关闭火墙
systemctl mask firewalld --锁住火墙
systemctl unmask iptables.service --iptables解锁
systemctl enable --now iptables.service ---开启iptables服务
2.命令管理
1)iptables -L 查看 ---地址已经全部解析过
2)iptables -nL 查看 ---地址不做解析 ---速度快
3)iptables -F 清除
清除后重启 策略还在
systemctl restart iptables.service
如果要永久保存策略
4)service iptables save
iptables-save > /etc/sysconfig/iptables
监控 : watch -n 1 "iptables -nL"
5)iptables -t filter -A INPUT -j ACCEPT
-t 指定表名称 默认是filter表
-A 添加策略
-j 动作
ACCEPT 允许
此时172.25.254.73 也可访问172.25.254.173
6)iptables -A INPUT -s 172.25.254.73 -j REJECT
没有写 -t filter 因为默认就是filter表
-s 来源
REJECT 拒绝
此时172.25.254.73 仍然可访问172.25.254.173 为什么?已经设置了不可访问
因为火墙策略严格按照顺序执行 第一个允许所有人访问 就不再执行第二个
我们可以插入 默认设置为第一个
7)iptables -I INPUT 1 -s 172.25.254.73 -j REJECT
-I 插入 “1” 不写也可以 默认插入到第一个
此时172.25.254.73 不可访问172.25.254.173
8)iptables -D INPUT 1
-D 删除 INPUT第一个策略
9)iptables -R INPUT 1 -j REJECT
-R 更改规则
把INPUT 第一个策略 改为REJECT
iptables -R INPUT 1 -j ACCEPT 恢复默认值
10)iptables -N westos
-N 新建链
11)iptables -E westos WESTOS
-E 更改链名称
12)iptables -X WESTOS
-X 删除链
13)iptables -P INPUT DROP
-P 更改默认规则
注意 默认规则 不能改为REJECT
iptables -P INPUT ACCEPT -恢复默认设置
4.火墙优化策略
iptables火墙读取策略严格按照顺序 读取速度慢也不方便 所以我们可以优化iptables火墙策略
1)优化思路
数据包状态
RELATED ##建立过连接的
ESTABLISHED ##正在连接的
NEW ##新的
建立过连接和正在连接的数据包 直接允许连接新的数据包 拒绝连接 添加后才可允许连接
2)优化代码
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
ptables -A INPUT -m state --state NEW -j REJECT
service iptables save
完成后 永久保存下来 火墙优化策略即完成
5.iptables的nat表
1)实验环境
2)nodeb 访问 主机 【正向访问】
当nodeb 想要访问主机时 我们需要设定nodea的nat表 因为不经过nodea的内核
配置nat表
注意:
iptables -t nat -A POSTROUTING -o ens3 -j SNAT --to-source 172.25.254.173
POSTROUTING 路由后
-o 输出
ens3 网卡是ens3
SNAT 源地址转换
--to-source 源地址转换
172.25.254.173 源地址转换为172.25.254.173
sysctl -a | grep ip_forward 内核路由功能 “1”是开启 如果等于“0”
vim /etc/sysctl.conf
开启后需要保存
sysctl -p
查看nat表设置是否成功 下图即为成功
测试:nodeb可以ping通主机:172.25.254.73 也可ssh 主机 172.25.254.13
登陆主机后 发现连接自己的是 172.25.254.173 而不是nodeb:1.1.1.73
即为成功
3)主机172.25.254.73访问nodeb:1.1.1.73
配置nodea nat表并查看
注意:
iptables -t nat -A PREROUTING -i ens3 -j DANT --to-dest 1.1.1.73
PREROUTING 路由之前
-i 输入
DANT 目的地址转换
--to-dest 目的地址转换
1.1.1.73 目的地址转换为1.1.1.73 ps:1.1.1.73是nodeb的地址 不是双网卡主机nodea的地址
测试:主机172.25.254.73连接172.25.254.173时 ifconfig查看
显示 ens3网卡 ip变为 1.1.1.73
即为成功