一、搭建实验环境
重置(reset)两个虚拟机
虚拟机server:
添加两块网卡
eth0 172.25.254.176
eth1 192.268.0.176
虚拟机desktop:
eth0 192.168.0.20
二、firewalld的域
trusted(信任) | 可接受所有网络连接 |
---|---|
home(家庭) | 用于家庭网络,仅接受ssh、mdns、ipp-client或dhcpv6-client服务 |
internal(内部) | 用于内部网络,仅接收ssh、mdns、ipp-client、samba-client、dhcpv6-client服务 |
连接 | |
work(工作) | 用于工作区,仅接收ssh、ipp-client或dhcpv6-client服务连接 |
public(公共) | 在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域 |
external(内部) | 出去的ipv4网络连接通过此区域伪装和转发,仅接收ssh服务连接 |
dmz(非军事区) | 仅接收ssh服务连接 |
block(限制) | 拒绝所有网络连接 |
drop(丢弃) | 任何接收的网络数据包都被丢弃,没有任何回复 |
三、firewalld相关操作
1、启用firewalld
yum install -y firewalld firewall-config
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld
2、查看firewalld设置
firewall-cmd --stat #防火墙的状态
firewall-cmd --get-active-zones #正在使用的域
firewall-cmd --get-default-zone #查看系统默认的域
firewall-cmd --get-zones #查看系统所有域
firewall-cmd --zone=public --list-all #查看public域所有信息
firewall-cmd --get-services #查看系统中所有可以直接设置的服务名称
firewall-cmd --list-all-zones #显示所有域信息
firewall-cmd --list-service #查看当前火墙开启的服务
firewall-cmd --set-default-zone=dmz #设置系统默认域为dmz
3、不同网卡时走不同的域
IP方式:
firewall-cmd --permanent --add-source=172.25.254.76/24 --zones=trusted #添加76主机为信任域
firewall-cmd --permanent --remove-source=172.25.254.76/24 --zones=trusted #从信任域中移出
网卡方式:
firewall-cmd --permanent --zone=trusted --add-interface=eth0 #将eth0网卡添加到信任域
firewall-cmd --permanent --zone=trusted --change-interface=eth0
firewall-cmd --permanent --zone=trusted --remove-interface=eth0
测试:
【1】
server端:
关闭火墙中的http、https服务
firewall-cmd --permanent --remove-service=http
firewall-cmd --permanent --remove-service=https
firewall-cmd --reload
systemctl restart httpd
firewall-cmd --add-source=172.25.254.76 --zone=trusted #添加为信任域
firewall-cmd --remove-source=172.25.254.76 --zone=trusted #移除
firewall-cmd --reload #刷新
添加到信任域:
76主机上搜索:
移除信任域:
76主机上搜索:
【2】
(1)
sever上:
firewall-cmd --list-all
firewall-cmd --zone=public --remove-interface=eth1
firewall-cmd --zone=trusted --add-interface=eth1
firewall-cmd --list-all --zone=trusted
firewall-cmd --reload
在同一网段desktop(192.168.0.20)上:
http://192.168.0.176
(2)
server上:
firewall-cmd --permanent --zone=public --change-interface=eth1
firewall-cmd --reload
在同一网段desktop(192.168.0.20)上:
http://192.168.0.176 #由于176主机火墙开启了http服务,所以可以查看到共享目录中的发布页面
4、火墙文件管理
/usr/lib/firewalld/services/ 火墙工作时访问的策略
/etc/firewalld/zones/ 封装了服务所开启的数据
firewall-cmd --permanent --zone=public --add-service=smtp
firewall-cmd --permanent --zone=public --remove-service=smtp
firewall-cmd --zone=public --list-ports
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
火墙添加服务两种方式:
默认使用的域为public时:
【1】命令方式添加
firewall-cmd --permanent --add-service=http #自动在/etc/firewalld/zones/public.xml(现在使用的域中)文件中添加http服务
firewall-cmd --reload #刷新当前的状态
【2】文件方式添加
vim /etc/firewalld/zones/public.xml
firewall-cmd --reload
火墙中添加服务端口
【1】临时修改
firewall-cmd --list-ports #查看火墙上开启的端口
firewall-cmd --add-port=8080/tcp #添加端口
firewall-cmd --list-ports #查看此时已开启
firewall-cmd --remove-port==8080/tcp
firewall-cmd --list-ports #查看此时已开启
【2】永久修改
firewall-cmd --permanent --add-port=8080/tcp
#此时/etc/firewalld/zones/public.xml中生成端口状态
vim /etc/firewalld/zones/public
<port protocol="tcp" port="8080"/>
firewall-cmd --permanent --remove-port=8080/tcp
5、火墙刷新
fiewall-cmd --reload # 刷新当前火墙状态,不会断掉当前的连接
firewall-cmd --complete-reload #刷新当前火墙状态,会断掉当前连接
测试:
服务器:sever主机 eth1 192.168.0.176
客户端:desktop主机 eth0 192.168.0.20
客户端:
ssh root@192.168.0.176
ls
服务端:
firewall-cmd --zone=public --change-interface=eth1 #将eth1网卡移到public域中
firewall-cmd --permanent --remove-service=ssh
fiewall-cmd --reload
客户端
ls
服务端:
firewall-cmd --complete-reload
客户端:
完全不能操作
6、设置让单独某台主机不能访问
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.76 -p tcp --dropt
80 -j REJECT
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.76 -p tcp --
dropt 80 -j REJECT
firewall-cmd --direct --get-all-rules #查看所有规则
-s | 数据来源 |
---|---|
-o | 协议 |
-dport | 目的地端口 |
-sport | 数据端口 |
-j | 行为 |
–direct | 后边跟规则 |
–add-rule | 添加规则 |
filter | 表 |
INPUT | 表中规则(输入) |
1 | 排在第一个 |
DROP | 拒绝不提醒 |
ACCEPT | 接收 |
REJECT | 拒绝提醒,不停加载,不提示 |
7、地址伪装和端口转发
端口转发:
ssh服务开启端口 22
firewall-cmd --add-masquerade
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.76
firewall-cmd --list-all
客户端:
desktop虚拟机:设置IP为192.168.0.20
真机:设置IP为172.25.254.76
ssh root@192.168.0.176 #如果此时连接不上,需删掉提示中的/root/.ssh/know_hosts
输入真机密码
#input进来时,端口已经被转发
ip addr show #真机IP
w -i #查看真机上显示的是谁连接
#output时地址已经被伪装
进来时通过22端口,我帮你自动转换到别人。别人连我时我让你去连另一个人
出去时经过地址包装,展示给别的的是路由地址