赞
踩
firewalld 和 iptables service 之间最本质的不同是:
yum install firewalld firewall-config -y
systemctl start firewalld
systemctl enable firewalld
systemctl mask iptables
systemctl stop iptables
firewall-cmd --state ##防火墙状态
firewall-cmd --get-active-zones ##正在生效的域
firewall-cmd --get-default-zone ##默认的域
firewall-cmd --zone=public --list-all ##指定列出的域是public,查看public域里的设置
firewall-cmd --list-all ##列出默认的域
firewall-cmd --set-default-zone=public ##把默认的域设为public
firewall-cmd --get-zones ##查看所有的域
firewall-cmd --get-services ##查看所有可以添加到火墙里的服务
firewall-cmd --permanent --zone=internal --add-source=172.25.0.0/24 ##sources:数据包的属性 从这个网段的所有ip,走internal域
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24 ##remove 删除 删除设定
firewall-cmd --permanent --zone=internal --add-interface=eth0 ##给internal域添加网卡接口eth0
firewall-cmd --permanent --zone=internal --change-interface=eth0 ##把eth0移到internal域
firewall-cmd --permanent --zone=internal --remove-interface=eth0 ##删除internal域里的eth0
firewall-cmd --permanent --zone=public --add-service=smtp ##向public域里永久添加服务smtp
firewall-cmd --permanent --zone=public --remove-service=smtp ##永久删除
firewall-cmd --zone=public --list-ports ##列出所有开启的端口,ssh和22绑定
firewall-cmd --permanent --zone=public --add-port=8080/tcp ##用久添加tcp的8080端口到public域
firewall-cmd --permanent --zone=public --remove-port=8080/tcp ##永久删除
两台虚拟机的ip:
server:172.25.254.224
client:172.25.254.124
172.25.254.224
访问,因为此时在server端并没有将httpd服务加到防火墙列表中,所以访问不到。firewall-cmd --add-source=172.25.254.124 --zone=trusted
,即让client端的ip走trusted域,让client可以访问默认发布文件,除client之外的其他主机都不能访问。firewall-cmd --permanent --remove-source=172.25.254.124
firewall-cmd --reload
firewall-cmd --zone=trusted --list-all
client:1.1.1.124 eth0
server:172.25.254.224 eth0
1.1.1.224 eth1 双网卡
firewall-cmd --list-all
firewall-cmd --remove-interface=eth1 --zone=public 从此时默认的public域删除eth1网卡
firewall-cmd --list-all 查看是否删除成功
firewall-cmd --add-interface=eth1 --zone=trusted 把eth1加到trusted域
firewall-cmd --list-all --zone=trusted 查看是否添加成功
1.1.1.224
测试:firewall-cmd --change-interface=eth1 --zone=public 把eth1移到public域
172.25.254.224
可以访问firewall-cmd --change-interface=eth0 --zone=trusted
注意:所有操作加了permanent表示永久生效,不加重启主机后消失。
做完实验将eth0移回public域
firewall-cmd --change-interface=eth0 --zone=public
firewall-cmd --reload ##重载防火墙列表
firefwall-cmd --complete-reload
ssh root@172.25.254.224
连接上server端,在server端把ssh服务从防火墙列表中删除,并重载防火墙列表:firewall-cmd --permanent--remove-service=ssh --zone=public ##永久删除,否则重载防火墙列表后又出现了
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --complete-reload 断开全部连接
killall -9 ssh
如果没成功有可能是因为网卡eth0没有在默认的default域而在别的域比如trusted,需要移动eth0到default域里。
做完实验将ssh重新添加到default域中
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
firewall-cmd --list-all
注意:
1.关于/etc/firewalld/zones下public.xml和public.xml.old两个文件的说明:
删除了防火墙列表中的ssh服务时:
cd /etc/firewalld/zones 里面有public.xml public.xml.old 两个文件
删除之后public.xml文件中没有ssh行,public.xml.old有ssh行
此时我们重新把ssh加入列表里,public.xml里有ssh,public.xml.old就没有ssh了
2.permanent和不加permanent的区别:
目录cd /lib/firewalld/services 下有具体防火墙允许的所有服务以及服务对应的端口:
cd /lib/firewalld/services
vim ssh.xml更改端口号为23,重启防火墙服务systemctl restart firewalld,此时ssh就不能连接
如果此时默认的域时public
firewall-cmd --remove-service=ssh 删除ssh,不是永久的,重启后不生效
firewall-cmd --list-all ssh不在了
vim /etc/firewalld/zones/public.xml ssh行还在
firewall-cmd --reload
firewall-cmd --list-all ssh还在
但是firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
firewall-cmd --list-all ssh就被永久删除了
firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -p tcp --dport 80 -j ACCEPT
firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 10 -p tcp --dport 80 -j ACCEPT
firewall-cmd --direct --get-all-rules ##查看所有规则
source 指定源地址,可以是一个 ipv4/ipv6 的地址或网段,不支持使用主机名。
destination 指定目的地址,用法和 source 相同。
service服务名称 是 firewalld 提供的其中一种服务。
port端口 既可以是一个独立端口数字 ,又或者端口范围
协议可以指定为 tcp 或udp 。
协议值可以是一个协议 ID 数字,或者一个协议名。
用direct定位精准,限制哪个来源,到哪个端口
filter表 经过内核的 ssh
-s 来源
-p 协议
-dport目的端口
-j动作 accept reject拒绝,有响应的不能访问,客户端接受这个,不会继续访问。 drop丢弃,无响应的不能访问。但会一直给你发数据包,增加服务器的负载。
1 从1开始读,匹配了就读取了,不再往下读了
不匹配就继续往下找
1就是置顶,让他都执行
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
firewall-cmd --list-all 移走ssh,除指定的外,默认情况下都走的是这个
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.10 -p tcp --dport 22 -j ACCEPT 这个ip可以ssh连接,相当于白名单
filter表 连接ssh要经过内核 -s 来源 -p 协议 -dport目的端口 -j动作
firewall-cmd --direct --get-all-rules 查看添加的规则
firewall-cmd--direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.10 -p tcp --dport 22 -j ACCEPT 删除这条规则
firewall-cmd --direct --get-all-rules 查看有没有删成功
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.10 -p tcp --dport 22 -j ACCEPT
这条规则不包括10,10走默认的
firewall-cmd --direct --get-all-rules 查看
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.24 -p tcp --dport 22 -j REJECT
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.24 -p tcp --dport 22 -j DROP
firewall-cmd --direct --get-all-rules
实验结束将刚刚设置的两条规则删除。
firewall-cmd --direct --get-all-rules
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.10 -p tcp --dport 22 -j DROP
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.134 -p tcp --dport 134 -j REJECT
firewall-cmd --direct --get-all-rules
主要思想就是把双网卡主机server模拟为一个路由器,与我们之前学习的一样,给单网卡主机client设置网关,双网卡主机server开启防火墙伪装,路由转发功能。
firewall-cmd --permanent --add-masquerade 开启防火墙永久伪装
firewall-cmd --reload
sysctl -a | grep ip_forward 路由转发
ssh172.25.254.10
,在真机w -i
查看,显示当前登陆系统的ip,单网卡1.1.1. 124
伪装成172.25.254.224
了。最后连的是1.1.1.124,所以输124密码,最后连的是哪个主机就输哪个主机的密码。
路由之前 prerouting 端口转发
路由之后 postrouting 地址伪装
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.124
firewall-cmd --list-all 查看有没有设置成功
注意:因为没有加- -permanent不是永久设置,此时要是执行firewall-cmd --reload
我们刚刚添加的端口转发就没有了。
ssh 172.25.254.224
测试,我们连接的是server,但是端口转发之后最终连上的是client,而且连接的时候要输入的密码就是client的密码。注意:如果ssh连接失败,显示的是no route,可能的原因有:
1.client端的此时生效的域不是public域,而是block或其他。
2.server端的ssh服务没添加到防火墙列表里。
3.上个实验做的direct没有删除remove。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。