0
点赞
收藏
分享

微信扫一扫

Linux的Firewalld服务

胡桑_b06e 2023-02-26 阅读 57

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
  • 其他软件也都是这样

image-20220322095107486.png

查看防火墙系统提供的模板

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 设置开机不自启动防火墙

@根据于超老师讲解整理,同时借用一张图片,感谢!

举报

相关推荐

0 条评论