一、firewalld的认识
1、firewalld
提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
2、firewalld
将网卡分为不同的区域,这些区域的区别在于对待来访的用户及传输的数据包的默认动作的不同,通过制定一些安全策略从而保证系统在被访问或传输数据时的安全。
二、firewalld区域(zones)
firewalld分为九个区域,含义如下:
trust(信任):可接受所有的网络连接;
home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服务连接;
internal(内部):用于内部网络,仅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服务连接;
work(工作区):用于工作区,仅接受ssh、ipp-client、dhcpv6-client服务连接;
public(公共):用于公共区域的使用,仅接受ssh、dhcpv6-client服务,为firewalld的默认区域;
external(外部区域):出去的ipv4的网络连接经过此区域的伪装和转发,只支持ssh服务;
dmz(非军事区):仅接受ssh服务;
block(限制):拒绝所有的网络服务;
drop(丢弃):任何访问的网络数据包都会被丢弃,没有任何回应。
三、firewalld的控制命令
[root@client Desktop]# systemctl stop iptables 关闭iptables
[root@client Desktop]# systemctl disable iptables 开机自动关闭
[root@client Desktop]# systemctl start firewalld 打开防火墙
[root@client Desktop]# systemctl enable firewalld 开机自动开启
[root@client Desktop]# yum search iptables 寻找iptables安装包
[root@client Desktop]# yum install iptables-services.x86_64 安装
1、firewalld图形管理工具:firewall-config
2、查看防火墙状态
3、查看被激活的空间(即添加网卡的空间)
4、查看当前默认空间
5、查看firewalld所有的空间
6、查看指定空间的信息
7、查看可通过firewalld进行设定的系统中的服务
8、查看所有空间的所有设定
9、设定默认空间,如下图firewall-cmd --set-default-zone=dmz为设置默认空间为dmz(非军事区):仅接受ssh服务;
四、网络接口改变所属域
1、改变网卡所属域
[root@jane1 Desktop]# nm-connection-editor 添加两个IP
[root@jane1 Desktop]# systemctl restart network 重启网络
[root@jane1 Desktop]# ifconfig 查看IP
1)查看,可以看到,eth0,eth1在public域
2)为了实验效果,我们在apache默认发布目录下,写入内容,并重启服务生效
3)这时我们将eth1加入信任域
4)进行测试,用eth1所属网卡访问apache可以查看到刚才我们写入的内容
2、移除和添加网卡到域
1)移除
2)添加
3、将IP添加到信任域
永久添加(刷新后依然存在)
[root@jane1 zones]# cd /etc/firewalld/
[root@jane1 firewalld]# cd zones/
[root@jane1 zones]# vim public.xml## 在文件中添加IP
4、将IP移除出信任域
5、将服务加入信任区域,其实只是将其端口加入允许列表,实验如下
1)先将http加入允许public域
2)此时两块网卡都可以访问
3)此时将http配置文件/etc/httpd/conf/httpd.conf这里改变为8080
4)改变完后,两块网卡都不能访问,即使http已经加入火墙允许列表
5)因为实际上实际火墙默认端口为80,在/usr/lib/firewalld/services/http.xml下可以查看
6)所以为了可以使8080可以使用,可以将8080端口加入允许列表
7)更改eth0和eth1的域
五、reload和complete-reload的区别
reload刷新之后不会中端连接,complete-reload刷新之后会中断连接。
用ssh服务来体现
1)用客户端先ssh链接到服务端
2)此时将ssh移除出火墙允许列表,用reload重启服务
3)此时在用客户端在打开一个shell用ssh链接客户端,将被拒绝
4)但是之前链接的还可以继续使用
5)这是我们如果用complete-reload重启服务
6)之前链接的也将不能工作,会卡住,不能执行命令
reload
改变之后的操作不影响之前的操作
complete-reload
改变所有操作包括正在运行的(永久性)
六、特定的规则 direct rules
在linux中想要保证主机的绝对安全以上的策略是远远不够的,还需要一些设定更为复杂、更加具体、更加安全的设定,即特定规则
1)firewall-cmd --direct --get-all-rules查看特定规则,如下图可以看到为空,下面我们进行编写实例
[root@localhost Desktop]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.29 -j ACCEPT ##只允许172.25.254.29访问
success
filter:表 INPUT:列 1:第几行 (先是表再是列) -p:正在使用的协议 --dport:目的地端口 -s:数据来源 -j: 动作 (REJECT 拒绝滚 ACCEPT 接受 DROP 丢弃)
[root@localhost Desktop]# firewall-cmd --direct --get-all-rule ##查看规则
ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.29 -j ACCEPT
2)我们可以查看大条件是允许http服务,但上面我们编写了特定的规则,实验可以看到172.25.254.66这台主机可以访问,但其他不可以
3)下面我们将刚才编写的数则移除,再次编写在前面加入!,表示除了192.168.0.205这台主机不可以,其他的主机都能访问http服务
4)实验测试,此时只有172.25.254.66这台主机不可以访问,其他都可以
firewall优先级先去direct规则里查找,如果有则按direct规则运行,如果没有则按默认list-all里的执行(默认允许就可以,没有就不行)
七、设定端口转发
[root@localhost Desktop]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.66
success
ssh 的端口是 22 所跳转到的主机IP是66
在另一台虚拟机中 ssh root@172.25.254.129 则就会跳转到所制定的IP 主机中
这里的密码是所跳转的IP主机的密码
八、地址伪装
在desktop添加两块网卡,设置两个网段的IP
[root@localhost network-scripts]# vim /etc/sysctl.conf
[root@localhost network-scripts]# sysctl -p ##启动
net.ipv4.ip_forward = 1
[root@localhost network-scripts]# firewall-cmd --list-all
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
masquerade: yes ##确保这个为开启状态
forward-ports: port=22:proto=tcp:toport=22:toaddr=172.25.254.19
icmp-blocks:
rich rules:
##用firewall-cmd --permanent --remove-forwardport=port=22:proto=tcp:toport=22:toaddr=172.25.254.19删除
**在server中**
[root@server]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 ##更改IP为172.25.4.229
[root@server]# systemctl restart network
[root@server]# ifconfig
[root@server]# route add default gw 172.25.4.129 ##添加网关(desktop里与server同网关的那个IP为这个的网关)
[root@server]# route -n ##查看网关
[root@server]# ping 172.25.254.19 可以ping的通
[root@server]# ssh root@172.25.254.19 ##也可以连接
[root@foundation19 ~]# w -i ##可以看到最后一行真正登陆IP