CentOS 防火墙 firewall-cmd 命令

2023-07-18 18:05:04 浏览数 (2)

防火墙状态及规则
  1. 查看防火墙状态:firewall-cmd --state
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --state 
2running
  1. 查看防火墙:firewall-cmd --list-all
代码语言:javascript复制
 1[root@localhost ~]# firewall-cmd --list-all
 2public (active)
 3  target: default
 4  icmp-block-inversion: no
 5  interfaces: eth0
 6  sources:
 7  services: dhcpv6-client http
 8  ports: 999/tcp
 9  protocols:
10  masquerade: no
11  forward-ports:
12  source-ports:
13  icmp-blocks:
14  rich rules:
  1. 更新防火墙规则:firewall-cmd --reload
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --reload
2success
端口
  1. 临时增加(reload之后消失):不需要reload
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --add-port=999/tcp
2success
3[root@localhost ~]# firewall-cmd --query-port=999/tcp
4yes
5[root@localhost ~]# firewall-cmd --reload
6success
7[root@localhost ~]# firewall-cmd --query-port=999/tcp
8no
  1. 永久增加:reload后生效
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --permanent --add-port=999/tcp
2success
3[root@localhost ~]# firewall-cmd --reload
4success
5[root@localhost ~]# firewall-cmd --query-port=999/tcp
6yes
  1. 临时删除端口:reload后消失
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --remove-port=999/tcp
2success
3[root@localhost ~]# firewall-cmd --query-port=999/tcp
4no
5[root@localhost ~]# firewall-cmd --reload
6success
7[root@localhost ~]# firewall-cmd --query-port=999/tcp
8yes
  1. 永久删除端口:reload后生效
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --permanent --remove-port=999/tcp
2success
3[root@localhost ~]# firewall-cmd --query-port=999/tcp
4yes
5[root@localhost ~]# firewall-cmd --reload
6success
7[root@localhost ~]# firewall-cmd --query-port=999/tcp
8no
  1. 查询端口
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --query-port=999/tcp
2yes
  1. 查看所有放行的端口
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --list-ports
2999/tcp
IP
  1. 防火墙添加允许访问的IP 注:添加允许访问的IP后,需要reload才能生效
代码语言:javascript复制
1[root@localhost logs]# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="10.45.2.35" accept' --permanent
2success
3[root@localhost logs]# firewall-cmd  --reload
4success
服务
  1. 防火墙服务的状态
代码语言:javascript复制
 1[root@localhost ~]# systemctl status firewalld.service
 2● firewalld.service - firewalld - dynamic firewall daemon
 3   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
 4   Active: active (running) since 五 2021-10-29 11:09:30 CST; 3 days ago
 5     Docs: man:firewalld(1)
 6 Main PID: 42215 (firewalld)
 7   CGroup: /system.slice/firewalld.service
 8           └─42215 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
 9
1010月 29 11:09:30 localhost.localdomain systemd[1]: Starting firewalld - dyna...
1110月 29 11:09:30 localhost.localdomain systemd[1]: Started firewalld - dynam...
1211月 02 10:22:44 localhost.localdomain firewalld[42215]: WARNING: ALREADY_EN...
1311月 02 10:23:29 localhost.localdomain firewalld[42215]: WARNING: ALREADY_EN...
14Hint: Some lines were ellipsized, use -l to show in full.
  1. 启动/关闭防火墙
代码语言:javascript复制
1[root@localhost ~]# systemctl stop firewalld.service
2[root@localhost ~]# systemctl start firewalld.service
  1. 获取所有支持的服务
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --get-services
2RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry docker-swarm dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls managesieve mdns minidlna mongodb mosh mountd ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
  1. 增加服务(临时增加)
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --add-service=https
2success
3[root@localhost ~]# firewall-cmd --query-service=https
4yes
5[root@localhost ~]# firewall-cmd --reload
6success
7[root@localhost ~]# firewall-cmd --query-service=https
8no
  1. 删除服务(临时删除)
代码语言:javascript复制
 1[root@localhost ~]# firewall-cmd --query-service=https
 2yes
 3[root@localhost ~]# firewall-cmd --remove-service=https
 4success
 5[root@localhost ~]# firewall-cmd --query-service=https
 6no
 7[root@localhost ~]# firewall-cmd --reload
 8success
 9[root@localhost ~]# firewall-cmd --query-service=https
10no
  1. 查询服务
代码语言:javascript复制
1[root@localhost ~]# firewall-cmd --query-service=https
2yes
  1. 增加服务(永久)
代码语言:javascript复制
1[root@localhost bin]# firewall-cmd --permanent --add-service=http
2success
3[root@localhost bin]# firewall-cmd --reload
4success
5[root@localhost bin]# firewall-cmd --query-service=http
6yes
  1. 删除服务(永久)
代码语言:javascript复制
1[root@localhost bin]# firewall-cmd --permanent --remove-service=ssh
2success
3[root@localhost bin]# firewall-cmd --reload
4success
5[root@localhost bin]# firewall-cmd --query-servicessh
6no
封禁IP
  1. 查看所有的规则:
代码语言:javascript复制
 1firewall-cmd --list-all-zones
 2# drop: 丢弃所有进入的包,而不给出任何响应
 3# block: 拒绝所有外部发起的连接,允许内部发起的连接
 4# public: 允许指定的进入连接
 5# external: 同上,对伪装的进入连接,一般用于路由转发
 6# dmz: 允许受限制的进入连接
 7# work: 允许受信任的计算机被限制的进入连接,类似 workgroup
 8# home: 同上,类似 homegroup
 9# internal: 同上,范围针对所有互联网用户
10# trusted: 信任所有连接
  1. 管理端口
代码语言:javascript复制
1#列出 dmz 级别的被允许的进入端口
2firewall-cmd --zone=dmz --list-ports
3# 允许 tcp 端口 8080 至 dmz 级别
4firewall-cmd --zone=dmz --add-port=8080/tcp
5# 允许某范围的 udp 端口至 public 级别,并永久生效
6firewall-cmd --zone=public --add-port=5060-5059/udp --permanent
  1. 网卡接口
代码语言:javascript复制
1# 列出 public zone 所有网卡
2firewall-cmd --zone=public --list-interfaces
3# 将 eth0 添加至 public zone,永久
4firewall-cmd --zone=public --permanent --add-interface=eth0
5# eth0 存在与 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除
6firewall-cmd --zone=work --permanent --change-interface=eth0
7# 删除 public zone 中的 eth0,永久
8firewall-cmd --zone=public --permanent --remove-interface=eth0
  1. 管理服务
代码语言:javascript复制
1# 添加 smtp 服务至 work zone
2firewall-cmd --zone=work --add-service=smtp
3# 移除 work zone 中的 smtp 服务
4firewall-cmd --zone=work --remove-service=smtp
  1. 配置 external zone 中的 ip 地址伪装
代码语言:javascript复制
1# 查看
2firewall-cmd --zone=external --query-masquerade
3# 打开伪装
4firewall-cmd --zone=external --add-masquerade
5# 关闭伪装
6firewall-cmd --zone=external --remove-masquerade
  1. 配置 public zone 的端口转发
代码语言:javascript复制
1# 要打开端口转发,则需要先
2firewall-cmd --zone=public --add-masquerade
3# 然后转发 tcp 22 端口至 3753
4firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=3753
5# 转发 22 端口数据至另一个 ip 的相同端口上
6firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
7# 转发 22 端口数据至另一 ip 的 2055 端口上
8firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
  1. 配置 public zone 的 icmp
代码语言:javascript复制
1# 查看所有支持的 icmp 类型
2firewall-cmd --get-icmptypes
3destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded
4# 列出
5firewall-cmd --zone=public --list-icmp-blocks
6# 添加 echo-request 屏蔽
7firewall-cmd --zone=public --add-icmp-block=echo-request [--timeout=seconds]
8# 移除 echo-reply 屏蔽
9firewall-cmd --zone=public --remove-icmp-block=echo-reply
  1. IP 封禁 (这个是我们平时用得最多的)
代码语言:javascript复制
 1# 单个IP
 2firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' reject"
 3# IP段
 4firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.0/24' reject" 
 5# 单个IP的某个端口
 6firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2 port port=80 protocol=tcp accept" 
 7# 这个是我们用得最多的,封一个IP和一个PORT。reject:拒绝;accept:允许。当然,我们仍然可以通过 ipset 来封禁 ip
 8# 封禁 ip
 9firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:ip
10firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.222
11# 封禁网段
12firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:net
13firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.0/24
14# 导入 ipset 规则
15firewall-cmd --permanent --zone=public --new-ipset-from-file=/path/blacklist.xml
16# 然后封禁 blacklist
17firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blacklist drop'
  1. IP封禁和端口
代码语言:javascript复制
1firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2 port port=80 protocol=tcp accept"
2# 只对192.168.1.2这个IP只能允许80端口访问  (拒绝访问只需把  accept 换成 reject、删除该规则把 –add-rich-rule 改成 –remove-rich-rule即可)
3----------------------------------------- 
4firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.2/24 port port=80 protocol=tcp accept"
5# 只对192.168.1.2这个IP段只能允许80端口访问(拒绝访问只需把  accept 换成 reject、删除该规则把 –add-rich-rule 改成 –remove-rich-rule即可
  1. 双网卡内网网卡不受防火墙限制
代码语言:javascript复制
1# 公网网卡–zone=public默认区域
2firewall-cmd --permanent --zone=public --add-interface=eth1
3
4# 内网网卡–zone=trusted是受信任区域 可接受所有的网络连接
5firewall-cmd --permanent --zone=trusted --add-interface=eth2
  1. 重新载入以生效
代码语言:javascript复制
1firewall-cmd --reload

0 人点赞