在linux中,firewalld并不具备防火墙功能,它的作用是管理和维护规则。
firewalld的基础设定
systemctl start firewalld ##开启
systemctl enabled firewalld ##设置开机自启
systemctl stop firewalld ##关闭
systemctl disable firewalld ##设置开机不自启
systemctl mask firewalld ##锁定
systemctl unmask firewalld ##解锁
这些命令用来设置firewalld开启关闭和是否自启动,如果将firewalld锁定了,那么需要先解锁才能开启。
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或dhcpv6-client服务连接,为firewalld的默认区域 |
external(外部) | 出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接 |
dmz(非军事区) | 仅接受ssh服务连接 |
block(限制) | 拒绝所有网络 |
drop(丢弃) | 任何接受的网络数据包都被丢弃,没有任何回复 |
这些是firewalld的域,在不同的域开放不同的网络连接。
firewalld的常用管理命令
1.简单的查询命令
firewall-cmd --state
查询服务是否开启
firewall-cmd --get-active-zones
查看当前正在使用的域
firewall-cmd --get-default-zone
查看当前默认域
firewall-cmd --get-zones
查看所有可用域
firewall-cmd --zone=pubic --list-all
查看public域的详细信息,使用这个命令同样可以查看其他域的详细信息
firewall-cmd --get-services
查看firewalld管理的服务有那些
firewall-cmd --list-all-zones
查看所有域的信息
firewall-cmd --set-default-zone=dmz
设置默认域为work,使用这个命令可以改变默认域
2.管理命令
firewall-cmd --permanent --zone=trusted --add-source=172.25.254.31/24
给特定的主机开放特定的域。
设置默认域为drop,对172.25.254.31主机开放trusted域。
用这条命令就可以控制对其他主机访问时开放的域。
firewall-cmd --permanent --zone=trusted --add-source=172.25.254.31/24
删除对其他主机设定域的信息。
firewall-cmd --permanent --zone=internal --add-interface=eth0
firewall-cmd --reload
在网卡eth0中设置internal域。
设置成功,需要注意的是,这里用永久设置,重启服务之后是生效的,如果需要临时设置的话就不要permanent参数,设置之后立即生效,不过重启服务之后设定会还原。
firewall-cmd --permanent --zone=public --change-interface=eth0
firewall-cmd --reload
systemctl restart firewalld
改变网卡eth0的域为public。
设置成功。
firewall-cmd --permanent --zone=public --remove-interface=eth0
firewall-cmd --reload
systemctl restart firewalld
移除网卡eth0中的public域。
设置成功,此时所有的域都不生效了。
我们看到默认域public支持的服务有ssh。
firewall-cmd --zone=public --remove-service=ssh
从public域中删除ssh服务
此时其他主机不能通过远程连接连接本机。
firewall-cmd --zone=public --add-service=ssh
添加ssh服务。
此时其他主机可以正常连接,使用这条命令可以控制允许那些服务,这里展示的是临时修改,如果要永久修改的话在前面加–permanent。
firewall-cmd --zone=public --add-prot=80/tcp
给public域设置允许端口80,此时其他主机可以使用本机的80端口
访问主机的测试页
firewall-cmd --zone=public --remove-prot=80/tcp
删除设置的端口,删除之后将不能访问。
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.31 -j ACCEPT
这条命令是添加一个规则,允许172.25.254.31.主机使用22端口,而其他主机则按照默认规则。
首先我们测试这条命令之前,把ssh服务设置默认不允许,这样在测试的时候,只有这台特定的主机能使用ssh服务访问本机。
此时,默认使用ssh远程连接是连不上的。
执行命令之后,172.25.254.31这台主机使用ssh连接成功,
而其他主机走默认规则,连接失败
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 !-s 172.25.254.31 -j ACCEPT
如果命令在端口后添加一个!,则表示取反,也就是使这台特定的主机使用默认规则,其他主机使用设置的这条规则,这样做的效果是,172.25.254.31这台主机使用默认规则,不能使用22端口,其他主机可以。
firewall-cmd --direct --get-all-rules
查看设置的规则。
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.31 -j ACCEPT
删除规则。
伪装和端口转发
1.打开firewalld伪装功能
sysctl -a | grep ip_forward
查看陆游功能是否打开,如果没有打开,则需要修改文件打开。
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
在文件中加入这行内容打开陆游公功能。
sysctl -p
更新文件信息。
这样陆游功能就打开了。
firewall-cmd --add-masquerade
之后就可以打开火墙伪装功能了。
2.端口转发
firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.131
所有通过22端口方法本机的设备,都去访问1.1.1.131这台主机的22端口,这就是端口转发。