firewell的使用详解,端口转发和地址伪装

一.Firewalld域的了解

网络区名称 默认配置
trusted(信任) 可接受所有的网络连接
home(家庭) 用于家庭网络,仅接受ssh,mdns,ipp-client,samba-client,dhcpv6-client连接
internal(内部) 用于内部网络,仅接受ssh,mdns,ipp-client,samba-client,dhcpv6-client连接
work(工作) 用于工作区,仅接受ssh,ipp-client,dhcpv6-client服务连接
public(工作) 用于工作区,仅接受ssh,ipp-client,dhcpv6-client服务连接
public(工作) 在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,是firewalld的默认区域
external(外部) 出去的ipv4网络连接通过此区域为伪装或转发,仅接受ssh服务的连接
dmz(非军事区) 仅接受ssh服务的连接
block(限制) 拒绝所有网络的连接
drop (丢弃) 任何接收的网络数据包都被丢弃,没有任何回复

二.firewalld的管理

实验环境 : Redhat7 
实验主机IP:172.25.254.125
1.使用命令行接口配置防火墙
[root@base1 ~]# systemctl start firewalld
[root@base1 ~]# firewall-cmd --state       # 查看火墙状态           
running
[root@base1 ~]# firewall-cmd --get-default-zone # 查看火墙控制的域,默认为public
public
[root@base1 ~]# firewall-cmd --get-active-zones  # 查看火墙当前生效的域

在这里插入图片描述

[root@base1 ~]# firewall-cmd --get-services  # 列出可以控制的协议名称

在这里插入图片描述

[root@base1 ~]# firewall-cmd --list-all  # 列出默认域的所有规则

在这里插入图片描述

[root@base1 ~]# firewall-cmd --zone=work --list-all   # 查看work域所有规则	

在这里插入图片描述

[root@base1 ~]# firewall-cmd --zone=public  --list-all   # 查看public域

在这里插入图片描述

[root@base1 ~]# firewall-cmd --list-all-zones   # 列出所有域的状态

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@base1 ~]# firewall-cmd --permanent --remove-service=http   # 从默认域中永久移除http服务S
uccess 
[root@base1 Desktop]# firewall-cmd --permanent --zone=trusted --add-source=172.25.254.78  # 从172.25.254.78上来的所有数据都是trusted
success
[root@base1 ~]# firewall-cmd --reload   # 重新加载firewalld配置文件
success
[root@base1 Desktop]# firewall-cmd --list-all --zone=trusted   # 查看

在这里插入图片描述

测试(在172.25.254.78这台主机上)

在这里插入图片描述

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --permanent --zone=trusted --remove-source=172.25.254.78  # 从trusted表中移除172.25.254.78这台主机
success
[root@base1 Desktop]# firewall-cmd --reload 
success 

[root@base1 Desktop]# firewall-cmd --permanent --zone=block  --add-source=172.25.254.78   # 限制172.25.254.78这台主机连接本机,即当它连接我时,我直接回应拒绝它
success
[root@base1 Desktop]# firewall-cmd --reload 
success
[root@base1 Desktop]# firewall-cmd --list-all --zone=block # 查看是否添加成功 

在这里插入图片描述

测试(在172.25.254.78这台主机上)

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --permanent --zone=block  --remove-source=172.25.254.78   # 从block表中移除172.25.254.78这台主机s
uccess
[root@base1 Desktop]# firewall-cmd --reload 
success

[root@base1 Desktop]# firewall-cmd --permanent --zone=drop  --add-source=172.25.254.78  # 丢弃172.25.254.78这台主机连接本机,即当它连接我时,我一直不给出回应 
success
[root@base1 Desktop]# firewall-cmd --reload 
success
[root@base1 Desktop]# firewall-cmd --list-all --zone=drop  # 查看

在这里插入图片描述

测试 (在172.25.254.78这台主机上)

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd  --remove-interface=eth0 --zone=public  # 删除public域上的eth0接口
[root@base1 Desktop]# firewall-cmd --reload 
success
[root@base1 Desktop]# firewall-cmd --list-all --zone=trusted 	
[root@base1 Desktop]# firewall-cmd  --add-interface=eth0 --zone=trusted  # 把eth0接口添加到trusted策略里
success
[root@base1 Desktop]# firewall-cmd --reload 
success
[root@base1 Desktop]# firewall-cmd --list-all --zone=trusted  # 查看添加成功

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --get-active-zones   # eth0在哪个策略里,哪个策略就生效

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --list-all    # 查看public域,eth0已经不在了

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --change-interface=eth0 --zone=public  # 修改eth0接口到public域上
success
[root@base1 Desktop]# firewall-cmd --reload 
success
[root@base1 Desktop]# firewall-cmd --list-all	

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --add-port=8080/tcp --zone=public # 临时添加8080端口,重启就会失效
success
[root@base1 Desktop]# firewall-cmd --list-all # 查看

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --reload   # 重新加载
success
[root@base1 Desktop]# firewall-cmd --list-all  # 8080端口消失	

在这里插入图片描述

2.区分–reload和–comlete-reload
--reload             # 不断开当前连接
--complete-reload   # 把所有的连接中断,并刷新火墙策略

三. 三表五链

1.filter表
input Foward output
经过内核 通过内核进行路由 经过内核
2.nat表
input prerouting postouting output
不经过路由 路由前,目的地 地址转换(DNAT) 路由之后,源地址转换(SNAT) 不经过路由
3.mangle表(当filter和nat表不够用时,来进行说明,几乎不用)
input prerouting Foward postouting output
4.direct rules # 火墙的高级规则,当某服务服务未开放时才生效
[root@base1 Desktop]# firewall-cmd --list-all

在这里插入图片描述

[root@base1 Desktop]# systemctl start httpd
[root@base1 Desktop]# firewall-cmd --direct --get-all-rules         # 查看direct rules  里的所有规则
[root@base1 Desktop]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp -dport 80 -s 172.25.254.78 -j  ACCEPT   # 当从78上来的数据访问我本机的80端口时,允许访问,

filter      # 添加表
INPUT 1     # 添加第一条链,从上到下依次访问
-p tcp      # 添加tcp协议
--dport 80  # 目的地端口为
80-s        # 设定被允许访问的ip
-j          # 要执行的动作,ACCEPT表示接受,DROP表示丢弃,不回显,REJECT表示拒绝,回显
[root@base1 Desktop]# firewall-cmd --direct --get-all-rules    # 查看所有规则
ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.78 -j ACCEPT
# 测试(在172.25.254.78这台主机上)

在这里插入图片描述

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.78 -j ACCEPT    # 删除这条规则
[root@base1 Desktop]# firewall-cmd --add-service=ssh  # 允许ssh服务对外开放,即允许所有主机连接 
[root@base1 Desktop]# firewall-cmd  --list-all

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.78 -j REJECT  # 拒绝78这台主机连接,其他主机可以连接	
# 测试
[root@foundation78 ~]# ssh [email protected] -X   # 在78这台主机上不能连接
ssh: connect to host 172.25.254.125 port 22: Connection refused  
[root@base3 Desktop]# ssh [email protected]     # 在其他主机上可以连接
[email protected]'s password: Last login: Sun Dec  9 11:05:22 2018 from 172.25.254.178
[root@base1 ~]# ifconfig eth0   # 连接成功

在这里插入图片描述

四.端口转发和地址伪装

1.端口转发
[root@base1 Desktop]# firewall-cmd --add-masquerade --permanent  # 打开路由功能
[root@base1 Desktop]# firewall-cmd --reload
[root@base1 Desktop]# firewall-cmd --list-all

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.24   
[root@base1 Desktop]# firewall-cmd --list-all	

在这里插入图片描述

测试
[root@foundation78 ~]# ssh [email protected] -X  # 此处输入的密码是转发到的主机的密码,而不是172.25.254.125的密码
[root@foundation24 ~]# ifconfig br0

在这里插入图片描述

# 还原环境
[root@base1 Desktop]# firewall-cmd --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.24   
[root@base1 Desktop]# firewall-cmd --reload
2.地址伪装
# 配置服务端(添加双网卡)

[root@base1 Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 

在这里插入图片描述

[root@base1 Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-eth1	

在这里插入图片描述

[root@base1 Desktop]# systemctl restart network
[root@base1 Desktop]# ifconfig 

在这里插入图片描述

[root@base1 Desktop]# firewall-cmd --list-all

在这里插入图片描述

# 配置客户端

[root@base3 Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-eth0   
1 DEVICE=eth0  
2 BOOTPROTO=none  
3 ONBOOT=yes  
4 IPADDR=192.168.0.225  
5 PREFIX=24  
6 GATEWAY=192.168.0.125   # 这是路由器ip

在这里插入图片描述

[root@base3 Desktop]# systemctl restart network
[root@base3 Desktop]# route -n

在这里插入图片描述

[root@base3 Desktop]# ping 172.25.254.78   # 可以ping 通不同网段的主机

在这里插入图片描述

[root@base3 Desktop]# ssh [email protected]  也可以连接上

在这里插入图片描述

[root@foundation78 ~]# w -i  |  cat   # 客户端连接的78这台主机,查到的却是客户主机路由器的ip,说明伪装成功

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wzt888_/article/details/84978108