Firewall
作为内核的管理软件 firewall-cmd
,通过使用这个软件来间接管理 Linux
内核的开启与关闭及其它功能,而 firewall-cmd
软件本身支持 firewall-cmd
(命令)和 firewall-config
(图形管理工具) 两种管理模式来管理 kernel netfilter
Firewall
能将不同的网络连接归类到不同的信任级别,Zone提供了以下几个级别:
drop
(丢弃)丢弃所有进入的包,而不给出任何响应
block
(拒绝)拒绝所有外部发起的连接,允许内部发起的连接
public
(公共)允许指定的进入连接,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域
external
(外部)对伪装的进入连接,一般用于路由转发,仅接受ssh服务连接
dmz
(非军事区)仅接受ssh服务连接
work
(工作)允许受信任的计算机被限制的进入连接,仅接受ssh、ipp-client(网络打印机)或dhcpv6-client服务连接
home
(家庭)允许受信任的计算机被限制的进入连接,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-lient服务连接
internal
(内部)允许受信任的计算机被限制的进入连接,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-lient服务连接
trusted
(信任)信任所有连接
实验环境
需要三台主机
第一台主机(真实主机或虚拟主机)
单网卡
广播域:
172.25.254.30/24
vim /etc/sysconfig/network-scripts/ens33
编辑网卡配置文件
DEVICE=ens33
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=172.25.254.30/24
NETMASK=255.255.255.0
systemctl restart network
测试网络
ping 172.25.254.130
网络可达
第二台主机(虚拟主机)
双网卡
第一块网卡
广播域:
172.25.254.130/24
第二块网卡
广播域:
192.168.0.130/24
添加第二块虚拟网卡设备
vim /etc/sysconfig/network-scripts/eth0
编辑第一块网卡eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=172.25.254.130
NETMASK=255.255.255.0
cp /etc/sysconfig/network-scripts/eth0 /etc/sysconfig/network-scripts/eth1
vim /etc/sysconfig/network-scripts/eth1
编辑第二块网卡eth1
DEVICE=eth1
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.130
NETMASK=255.255.255.0
systemctl restart network
测试网络
ping 172.25.254.131
网络可达
ping 192.168.0.230
网络可达
第三台主机(虚拟主机)
单网卡
广播域:
192.168.0.230/24
vim /etc/sysconfig/network-scripts/eth0
编辑网卡配置文件
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.230
NETMASK=255.255.255.0
systemctl restart network
测试网络
ping 192.168.0.130
网络可达
安装 Firewall
一般情况下,
Firewall
在Linux
系统中为默认安装如果
systemctl stats firewalld
查看,未找到Firewall
服务
yum install firewalld firewall-cmd -y
安装 Firewall
安装 Apache
yum install httpd -y
systemctl start httpd
开启 Apache
systemctl enable httpd
开机自启
实验流程
systemctl stop firewalld
关闭防火墙
systemctl start firewalld
开启防火墙
systemctl enable firewalld
开机自启防火墙
systemctl disable firewalld
开机关闭自启防火墙
firewall-cmd 命令
firewall-config
图形化界面管理防火墙
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 --list-all
查看默认域所有配置
firewall-cmd --get-services
firewall-cmd -list-all-zones
firewall-cmd --set-default-zone=home
Apache 测试防火墙服务
主机
172.25.254.30
浏览器输入
172.25.254.130
Apache 已开启,无法访问,防火墙 Apache 服务未开启
firewall-cmd --add-source=172.25.254.30 --zone=trusted
主机
172.25.254.30
浏览器输入
172.25.254.130
正常访问
firewall-cmd --remove-source=172.25.254.30 --zone=trusted
主机
172.25.254.30
浏览器输入
172.25.254.130
无法访问
ifconfig eth0
172.25.254.130
ifconfig eth1
192.168.0.130
firewall-cmd --list-all
firewall-cmd --remove-interface=eth1 --zone=public
firewall-cmd --add-interface=eth1 --zone=trusted
主机
192.168.0.230
浏览器输入
192.168.0.130
正常访问
firewall-cmd --list-all --zone=trusted
firewall-cmd change-interface=eth1 --zone=public
主机
192.168.0.230
浏览器输入
192.168.0.130
无法访问
reload
和 complate-reload
服务端
firewall-cmd --list-all
查看默认域里全部配置信息
firewall-cmd --permanent --zone=public --add-service=dns
添加 public 域 dns 服务
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --permanent --zone=public --remove-service=dns
移除 public 域 dns 服务
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --permanent --zone=public --list-ports
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --list-ports
firewall-cmd --reload
firewall-cmd --permanent --zone=public --list-ports
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
firewall-cmd --permanent --zone=public --list-ports
firewall-cmd --reload
firewall-cmd --permanent --zone=public --list-ports
firewall-cmd --list-all
查看有 ssh 服务
firewall-cmd --permanent --remove-service=ssh
移除 ssh 服务
firewall-cmd --reload
firewall-cmd --list-all
ssh root172.25.254.230
防火墙 ssh 服务未关闭之前连接成功
irewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
当我们移除 ssh 服务并且使用 reload 后,已连接的 ssh 服务不会断开,只会在下次生效
172.25.254.230 端 df 命令正常使用
firewall-cmd --complete-reload
172.25.254.230 端 命令行已被停止使用(命令行卡住,无法正常使用)
拒绝访问
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.250 -p tcp --dport 22 -j REJECT
防火墙规则:172.25.254.250主机 禁止通过 ssh 22 端口 远程连接本机
firewall-cmd --reload
地址伪装
双网卡主机端
sysctl -a | grep net.ipv4.ip_forward
查看内核路由功能是否开启
net.ipv4.ip_forward=1
内核路由功能已开启
net.ipv4.ip_forward=0
未开启内核路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -a | grep net.ipv4.ip_forward
再次查看
net.ipv4.ip_forward=1
内核路由功能已开启
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewall-cmd --list-all
开启防火墙地址伪装功能
测试端
ifconfig
ping 192.168.0.130
ping 双网卡主机
网络可达
ping 172.25.254.30
网络不可达
不在一个广播域
编辑网卡配置文件
GATEWAY
172.25.254.130
或192.168.0.130
添加网关:双网卡主机任意一个 ip 地址
systemctl restart network
ping 192.168.0.130
网络可达
ping 172.25.254.30
网络可达
双网卡主机端
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.30
双网卡主机设置地址转换功能
任何 ip 远程登录本机 端口 22 号 sshd 服务都将被连接到 ip 172.25.254.30 主机
firewall-cmd --reload
测试端
ssh root@192.168.0.130
这时候,我们远程连接的真实 ip 是172.25.254.30 主机
需要认证密码为 172.25.254.30 主机的 root 密码
当我们输入正确密码进入后,可以看到本机 ip 为 172.25.254.30
w -i
查看到来源 ip 是172.25.254.130 主机而不是172.25.254.230 主机