基础命令
firewall-cmd --state ###查看状态
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 ###防火墙所有支持的服务,在/usr/lib/firewalld/services/下
firewall-cmd --list-all-zones ###显示所有域的详细信息
firewall-cmd --set-default-zone=dmz ###设置默认状态为dmz
防火墙访问限制
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
systemctl stop iptables
systemctl start firewalld
yum install httpd -y
echo "<h1>172.25.254.125</h1>" >/var/www/html/index.html
systemctl start httpd
firewall-cmd --remove-interface=eth1
firewall-cmd --add-interface=eth1 --zone=trusted 或 firewall-cmd --change-interface=eht1 --zone=trusted
测试
客户端:192.168.0.225,加入网关:192.168.0.125
由于防火墙的存在,我们通过http访问是无法成功的,因此加入防火墙信任区的eth1(192.168.0.125)可以访问,而eth0(172.25.254.125)就无法访问
http://172.25.254.125
http://192.168.0.125
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
systemctl restart firewalld ###由于我们刚写的命令都没加--permanent,没有写入到配置文件中,所以重启就还原配置了
firewall-cmd --add-source=172.25.254.0/24 --zone=trusted ###添加网段到信任域
firewall-cmd --remove-source=172.25.254.0/24 --zone=trusted ###测试完成我们可以把网段移出信任域
测试
客户端:192.168.0.225,加入网关:192.168.0.125
真机:172.25.254.56
防火墙端口访问
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
vim /usr/lib/firewalld/services/http.xml ###改变防火墙的默认开启端口
5 <port protocol="tcp" port="8000"/>
vim /etc/httpd/conf/httpd.conf ###改变http端口
42 Listen 8000
systemctl restart httpd
systemctl restart firewalld
firewall-cmd --add-service=http ###添加http到活跃域中
测试
客户端:192.168.0.225,加入网关:192.168.0.125
http://172.25.254.125:8000
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
vim /usr/lib/firewalld/services/http.xml
5 <port protocol="tcp" port="80"/>
systemctl restart firewalld
测试
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
firewall-cmd --add-service=http
客户端:192.168.0.225,加入网关:192.168.0.125
我们开启http服务发现并不能访问,由于我们开启的80端口
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
systemctl restart firewalld
firewall-cmd --zone=public --add-port=8000/tcp
客户端:192.168.0.225,加入网关:192.168.0.125
从中我们可以发现防火墙开启对应服务的权限就是对应的端口开启,当服务改变端口时,我们开启改变的端口就可以访问服务了
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=trusted
测试
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
firewall-cmd --permanent --remove-service=ssh
客户端:192.168.0.225,加入网关:192.168.0.125
ssh root@172.25.254.125 ###我们可以ssh还可以连接
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
firewall-cmd --reload ###重载,客户端ssh不能连接
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
firewall-cmd --complete-reload ###完全重载,客户端ssh连接断了
单个IP访问控制
vim /etc/httpd/conf/httpd.conf
42 Listen 80
systemctl restart httpd
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.0.225 -p tcp --dport 80 -j REJECT ###剧界192.168.0.225访问80端口
firewall-cmd --direct --get-all-rules ###查看
发现192.168.0.225 http无法访问
firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -s 192.168.0.225 -p tcp --dport 80 -j REJECT ###删除
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 ! -s 192.168.0.225 -p tcp --dport 80 -j REJECT ###只有192.168.0.225 http可以访问
地址转发(路由前)
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
firewall-cmd --permanent --remove-service=ssh --zone=trusted
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=trusted ###上步和这步为了还原环境
systemctl restart firewalld ###重启,可以清空之前的临时设置
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --zone=public --add-forward port=22:proto=tcp:toport=22:toaddr=172.25.254.56 ###地址转换为172.25.254.56(真机)
firewall-cmd --permanent --add-masquerade ###打开masquerade
firewall-cmd --reload ###重新加载
测试
客户端:192.168.0.225,加入网关:192.168.0.125
注意:ssh连接输入的密码为真机(172.25.254.56)的密码
我们也可以用w来查看登陆的来源:
地址伪装(路由后)
服务器IP:eth0:172.25.254.125,eth1:192.168.0.125
(1)
firewall-cmd --permanent --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.56 ###删除上面的设置,还原环境
systemctl restart firewalld
(2)
firewall-cmd --permanent --remove-masquerade ###关闭masquerade
firewall-cmd --reload
firewall-cmd --add-rich-rule='rule family=ipv4 masquerade'
测试
我们可以发现上面2种的效果客户端(192.168.0.225)可以ssh真机(172.25.254.56),并且连接的IP为服务器的IP