Firewalld
防火墙基本操作
# 查找防火墙服务名
[root@server ~]# systemctl list-units | grep fire
firewalld.service loaded active running firewalld - dynamic firewall daemon
# 查找firewalld.service文件位置
[root@server ~]# find / -type f -name 'firewalld.service'
/usr/lib/systemd/system/firewalld.service
# 这个脚本是运行防火墙命令的一个脚本文件看脚本的,第11 12 13行
[root@server ~]# cat -n /usr/lib/systemd/system/firewalld.service
1 [Unit]
2 Description=firewalld - dynamic firewall daemon
3 Before=network-pre.target
4 Wants=network-pre.target
5 After=dbus.service
6 After=polkit.service
7 Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
8 Documentation=man:firewalld(1)
9
10 [Service]
11 EnvironmentFile=-/etc/sysconfig/firewalld
12 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS
13 ExecReload=/bin/kill -HUP $MAINPID
14 # supress to log debug and error output also to /var/log/messages
15 StandardOutput=null
16 StandardError=null
17 Type=dbus
18 BusName=org.fedoraproject.FirewallD1
19 KillMode=mixed
20
21 [Install]
22 WantedBy=multi-user.target
23 Alias=dbus-org.fedoraproject.FirewallD1.service
服务管理脚本的作用
其实是执行了软件提供的二进制命令
- firewalld如此 /usr/sbin/fireawlld
- nginx也如此 /usr/sbin/nginx
- 其他软件也都是这样
查看防火墙系统提供的模板
1.列出所有的区域模板
# 列出区域模板,以及具体的信息
[root@server ~]# firewall-cmd --list-all-zones
# 列出所有的区域的名字
[root@yserver ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
2.列出当前使用的区域是
[root@server ~]# firewall-cmd --get-default-zone
public
3.查看当前的public区域,以及其详细信息
# 列出当前使用的区域,以及详细信息
[root@server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client ntp
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
4.先运行一个80端口的服务
[root@server ~]# python -m SimpleHTTPServer 80
5.给当前的防火墙区域,添加一个策略,允许80端口通过
[root@server ~]# firewall-cmd --add-port=80/tcp
success
6.再添加一个8000端口的规则,我们接触的绝大多数,都是端口号/tcp 这个即可.
[root@server ~]# firewall-cmd --add-port=8000/tcp
success
7.删除,添加的端口规则
[root@server ~]# firewall-cmd --remove-port=80/tcp
success
[root@server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
8. 针对服务名添加,比如ntp服务
[root@server ~]# firewall-cmd --add-service=ntp
9. 查看当前public区域,使用了哪些规则
[root@server ~]# firewall-cmd - -list-all
10. firewalld,作用其实是添加iptables的规则
查看系统上所有iptables的命令
iptables -L
tcp 是一个安全可靠的连接,需要双向确认,客户端,和服务端,都要确认对方以及连接上了
udp 是一个不可靠的额连接协议,客户端可以随便给服务端发,不需要对方确认
比如一个很差的网络环境下,网页无法访问,无法做dns解析(网络服务,网站服务,用的都是tcp协议)
但是qq可以收发消息(qq用的是udp协议,以及ntp用的也是udp协议)
# 查看到firewalld命令,添加的防火墙规则如下
[root@server ~]# iptables -L |grep ntp
ACCEPT udp -- anywhere anywhere udp dpt:ntp ctstate NEW
永久性添加防火墙策略
1. 永久性添加 8000/tcp的策略
[root@server ~]# firewall-cmd --permanent --add-port=8000/tcp
2.需要重新加载firewalld服务
[root@server ~]# firewall-cmd --reload
success
3.重新加载后,规则自动生成了,生效了
[root@server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client ntp
ports: 80/tcp 8000/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
firewalld命令,可以创建出iptables规则
systemctl status firewalld 查看防火墙状态
systemctl enable firewalld 设置开机自启动
systemctl stop firewalld 停止防火墙,系统重启后防火墙会运行
systemctl disable firewalld 设置开机不自启动防火墙
@根据于超老师讲解整理,同时借用一张图片,感谢!
标签:服务,--,cmd,firewalld,server,firewall,Linux,root,Firewalld From: https://blog.51cto.com/u_7175088/6086432