Firewall防火墙 概述 在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管 理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。
对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定 要求,所以学习成本较高。但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不 少,所以建议刚接触CentOS7系统的人员直接学习Firewalld。
防火墙的一个规则
防火墙默认是全部拒绝
区域选项
默认规则策略
trusted
允许所有的数据包流入流出
home
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、 amba-client与dhcpv6-client服务相关,则允许流量
internal
等同于home区域
work
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client、dhcpv6- client服务相关,则允许流量
public
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相 关,则允许流量
external
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block
拒绝流入的流量,除非与流出的流量相关
drop
拒绝流入的流量,除非与流出的流量相关
trusted 允许所有的数据包流入流出,允许任何流量进入可以访问我的任何服务,任何端口
puiblic 下载默认的防火墙
drop 无论什么端口加到drop都会被拒绝
防火墙命令 区域相关 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 firewall-cmd --get-default-zone public firewalld-cmd --set -default-zone=drop firewall-cmd --get-active-zones firewall-cmd --get-zones block dingding dmz drop external home internal public trusted work firewall-cmd --new-zone=dingding --permanent firewall-cmd --reload firewall-cmd --get-zones block dingding dmz drop external home internal public trusted work
服务相关 1 2 3 4 5 6 7 8 9 10 11 12 13 14 RH-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 firewall-cmd --add-service=http firewall-cmd --remove-service=http firewall-cmd --add-service=htt --permanent firewall-cmd --remove-service=htt --permanent
端口先关 1 2 3 4 5 firewall-cmd --add-port=80/tcp firewall-cmd --remove-port=80/tcp
防火墙添加网卡命令 1 2 3 firewall-cmd --add-interface=eth0 --zone=drop firewall-cmd --list-all --zone=drop
其他先关命令 1 2 3 4 5 firewall-cmd --list-all firewall-cmd --reload
讲解–list-all
1 2 3 4 5 6 7 8 9 10 11 12 13 public (active) target: default icmp-block-inversion: no interfaces: eth1 eth0 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source -ports: icmp-blocks: rich rules:
使用firewall配置,调整默认public区域拒绝所有的流量,但是如果 来源是10.0.0.0/24网段则允许
1 2 3 4 5 6 7 8 9 10 11 firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client firewall-cmd --add-source=10.0.0.0/24 --zone=trusted firewall-cmd --get-active-zone public interfaces: eth1 eth0 trusted sources: 10.0.0.0/24
查询public区域是否语序请求SSH HTTPS协议的流量
1 2 3 4 5 0 ✓ 11:29:09 root@web01,172.16.1.7:/opt yes 0 ✓ 11:29:09 root@web01,172.16.1.7:/opt no
防火墙的放行自定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 firewall-cmd --get-services firewall-cmd --add-services=sersync cp /usr/lib/firewalld/services/{ssh,sersync}.xml vim /usr/lib/firewalld/services/sersync.xml <?xml version="1.0" encoding="utf-8" ?> <service> <short>sersync</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for thisoption to be useful.</description> <port protocol="tcp" port="874" /> </service> firewall-cmd --reload firewall-cmd --get-services firewall-cmd --add-services=sersync
firewall做端口转发 1 2 3 4 5 6 7 8 9 10 11 12 13 firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协 议>:toport=<目标端口号>:toaddr=<目标IP地址> firewall-cmd --permanent --zone=public --add-forward-port=port=8888:proto=tcp:toport=80:toaddr=10.0.0.7 firewall-cmd --reload firewall-cmd --add-masquerade 10.0.0.8:8888
防火墙富语言规则策略 firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地 址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面 为firewalld富语言规则帮助手册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@m01 ~] [root@m01 ~] rule [source ] [destination] service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source -port [log ] [audit] [accept|reject|drop|mark] rule [family="ipv4|ipv6" ] source address="address[/mask]" [invert="True" ]service name="service name" port port="port value" protocol="tcp|udp" protocol value="protocol value" forward-port port="port value" protocol="tcp|udp" to-port="port value" to- addr="address" accept | reject [type ="reject type" ] | drop
允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能够访问 ssh/22端口
1 2 3 4 5 firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.1" service name="http" accept' firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.16.1.0/24" service name="ssh" accept'