firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),他们有两个存储位置
1、/etc/firewalld/ 用户配置文件
2、/usr/lib/firewalld/ 系统配置文件,预置文件
我们知道每个zone就是一套规则集,但是有那么多zone,对于一个具体的请求来说应该使用哪个zone(哪套规则)来处理呢?这个问题至关重要,如果这点不弄明白其他的都是空中楼阁,即使规则设置的再好,不知道怎样用、在哪里用也不行。
对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址 优先级最高
2、interface,接收请求的网卡 优先级第二
3、firewalld.conf中配置的默认zone 优先级最低
这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是学生在前面给大家讲过的在firewalld.conf中配置的默认zone。
root执行 # yum install firewalld 启动:# systemctl start firewalld 查看状态:# systemctl status firewalld 或者 firewall-cmd --state 停止:# systemctl disable firewalld 禁用:# systemctl stop firewalld
查看版本:$ firewall-cmd --version 查看帮助:$ firewall-cmd --help 查看设置: 显示状态:$ firewall-cmd --state 查看区域信息: $ firewall-cmd --get-active-zones 查看指定接口所属区域:$ firewall-cmd --get-zone-of-interface=eth0 拒绝所有包:# firewall-cmd --panic-on 取消拒绝状态:# firewall-cmd --panic-off 查看是否拒绝:$ firewall-cmd --query-panic
# firewall-cmd --reload # firewall-cmd --complete-reload
# firewall-cmd --zone=public --add-interface=eth0
# firewall-cmd --set-default-zone=public 立即生效无需重启 查看public区域打开的端口: # firewall-cmd --zone=public --list-ports 加入一个端口到区域: # firewall-cmd --zone=public --add-port=8080/tcp 若要永久生效方法同上
查看当前系统已定义的服务,系统已经预置了很多常用的服务,配置文件在/usr/lib/firewalld/services文件夹下。
firewall-cmd --get-services
以smtp为例。这样添加完邮件服务后就不用再使用add-port添加端口了,非常方便。
# firewall-cmd --zone=work --add-service=smtp --permanent
# firewall-cmd --zone=work --remove-service=smtp --permanent
只允许指定IP访问某端口 firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.166" port protocol="tcp" port="1433" accept" 禁止指定的IP或IP组访问访问某服务 firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' service name='ssh' reject" 禁止指定的IP或IP组访问访问某端口 firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port port=22 protocol=tcp reject" 允许链转发GRE数据包 firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i ens33 -p gre -j ACCEPT
端口转发 开启防火墙伪装:firewall-cmd --add-masquerade --permanent //开启后才能转发端口 添加转发规则:firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent //将本机80端口数据转发到内网一个IP为192.168.1.100的8080端口上
以上双引号之内使用双引号还是单引号看个人习惯,实现的功能是一样的。
Firewalld里高级防火墙规则除了rich还是direct也很常用,如上面示例中的GRE转发,写法不同,direct规则优于rich规则执行,二者不建议混用。
如果有个程序test运行过程中需要开放10000端口,我们除了–add-port=8080/tcp外,也可以自定义一个test服务
随便复制一个配置文件:cp http.xml test.xml
然后根据格式修改下名称、端口以及说明信息,如下:
testThis is a test service.
来源:https://www.cnblogs.com/fatt/p/6656262.html
Proudly Powered By WordPress | IEWB.NET 2009-2024 版权所有