iptables,firewalld防火墙知识再回顾

iptables

首先来看看传统的iptables如何使用。默认的iptables规则表有:fileter表(过滤规则表)、nat表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表)。每个规则表中包含多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和POSTROUTING(路由后过滤),防火墙规则需要写入到这些具体的数据链中。Linux防火墙的过滤框架,从图中可以看出,如果是外部主机发送数据包给防火墙本机,数据将会经过PREROUTING链与INPUT链;如果是防火墙本机发送数据包到外部主机,数据将会经过OUTPUT链与POSTROUTING链;如果防火墙作为路由负责转发数据,则数据将经过PREROUTING链、FORWARD链以及POSTROUTING链。
在这里插入图片描述
iptables防火墙语法格式

管理员需要使用iptables命令添加、删除防火墙规则,下面我们看看iptables命令的具体用法。命令描述:netfilter防火墙规则管理工具。
用法:iptables[-t 表名]{-A|-D|-I|-D|-F|-L|-Z|-P} 链名 rule-specification
选项:-t 指定需要维护的防火墙规则表,不使用-t时,则默认操作对象为filter表。


-A 追加防火墙规则。
-D 删除防火墙规则。
-I 插入防火墙规则。
-F 清空防火墙规则。
-L 列出防火墙规则。
-R 替换防火墙规则。
-Z 清空防火墙数据表统计信息。
-P 设置链默认规则。
匹配参数:[!]-p  匹配协议,!代表取反[!]
-s  匹配源地址
[!]-d  匹配目标地址
[!]-i  匹配入站网卡接口
[!]-o  匹配出站网卡接口
[!]--sport 匹配源端口
[!]--dport 匹配目标端口
[!]--src-range 匹配源地址范围
[!]--dst-range 匹配目标地址范围
[!]--limit 匹配数据表速率
[!]--mac-source 匹配源MAC地址
[!]--sports 匹配源端口
[!]--dports 匹配目标端口
[!]--state 匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string 匹配应用层字串
触发动作: 
ACCEPT 允许数据包通过
DROP  丢弃数据包
REJECT 拒绝数据包通过
LOG  将数据包信息记录
DNAT  目标地址转换
SNAT  源地址转换
MASQUERADE 地址欺骗
REDIRECT 重定向

iptables防火墙规则的顺序非常重要,内核按顺序检查这些规则,如果发现有匹配的规则条目,则立刻执行相关动作,停止继续向下查找规则条目,如果所有的防火墙规则都未能匹配成功,则按照默认策略处理。我们使用-A选项添加防火墙规则会将该规则追加到整个链的最后,而使用-I选项添加的规则默认会插入到链中作为第一条规则。下面通过实例简单演示iptables命令的使用方法。

查看filter表的所有规则:

[root@m01 3]# iptables -nL 

查看nat表的所有规则:

[root@m01 3]# iptables -t nat -nL 

清空filter表中的所有规则:

[root@m01 3]# iptables -F

往filter表添加一条新的入站规则,丢弃192.168.1.1主机发送给防火墙本机的所有数据包。

[root@m01 3]# iptables -A INPUT -s 192.168.1.1 -j ACCEPT

往filter表插入一条新的入站规则,拒绝192.168.1.22 ping防火墙本机:

[root@m01 3]# iptables -A INPUT -s 192.168.1.22 -p icmp -j REJECT

查看filter表中防火墙规则并显示规则编号:

[root@m01 3]# iptables -nL --line-numbers

删除filter表中INPUT链的第一条规则:

[root@m01 3]# iptables -D INPUT 1

替换filter表中INPUT链的第二条规则,拒绝192.168.1.254之外的任何主机连接防火墙本机:

[root@m01 3]# iptables -A INPUT 2 ! -s 192.168.1.254 -j REJECT

将192.168.1.10主机发送给防火墙本机22端口的所有数据包信息记录到messages日志:

[root@m01 3]# iptables -I INPUT  -s 192.168.1.10 --p tcp --dport 22 -j LOG

允许任何主机从ens33网络接口访问防火墙本机的80端口:

[root@m01 3]# iptables -I INPUT  -i ens33 --p tcp --dport 80 -j ACCEPT

iptables防火墙应用案例:
允许任意客户端访问服务器主机提供的日常服务(HTTP、HTTPS、DNS、NTP、SMTP、POP3、SSH),在Linux系统中,/etc/services文件可以帮助我们找到各种服务所对应的标准端口信息。
在这里插入图片描述
防火墙备份与还原:
CentOS 7系统中防火墙规则默认保存在/etc/sysconfig/iptables文件中,使用iptables-save将规则保存至该文件中可以实现保存防火墙规则的作用,计算机重启后会自动加载该文件中的规则。如果使用iptables-save将规则保存至其他位置,可以实现备份防火墙规则的作用。当防火墙规则需要做还原操作时,可以使用iptables-restore将备份文件直接导入当前防火墙规则。
在这里插入图片描述

firewalld

firewalld将所有的网络流量都分类汇集到zones中,firewalld通过zones管理防火墙规则。每一个进入系统的数据包,都会首先检查她的源IP地址和接口(进出的网卡接口),如果地址与某个zone匹配,则该zone中的规则将生效。而每个zone都会有开启或关闭的服务和端口的列表,以实现允许或拒绝连接服务和端口。如何数据包的源IP地址和网卡接口都不能和任何zone匹配,则该数据包将匹配默认zone,一般情况下是一个名称为public的默认zone。firewalld会提供block、dmz、drop、external、home、internal、public、trusted、work这九个zone

比如,有一个数据包从eno16777736网卡进入本机,根据规则该数据包被导向到了work这个zone,而在work这个zone中有允许访问http服务的规则,则最后该数据包将可以进入本机并访问http服务。

大部分zone都定义的有自己的允许规则,规则通过端口/协议(631/udp)或者预定义的服务(ssh)这种形式设置,如果数据包没有匹配这些允许的规则,则该数据包一般会被防火墙拒绝。但又一个名称为trusted的zone,默认会运行所有的数据流量,如果有一个数据包进入了该zone,则被允许访问所有的资源。

具体的firewalld预定义zone及其描述信息见表

在这里插入图片描述
在这里插入图片描述
在没有特殊要求下使用默认的public zone即可满足大多数使用场景。

firewalld-cmd命令

使用firewall-cmd命令来管理我们的防火墙规则,安装firewalld这个软件包,系统就会提供该命令工具,其语法格式如下:
在这里插入图片描述
常用命令:

查看默认zone

[root@m01 3]# firewall-cmd --get-default-zone

设置默认zone,为home

[root@m01 3]# firewall-cmd --set-default-zone=home
success
[root@m01 3]# 

显示当前正在使用的zone信息:

[root@m01 3]# firewall-cmd --get-active-zones
public
  interfaces: ens33
[root@m01 3]# 

显示系统预定义的zone,默认为九个zone:

[root@m01 3]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
[root@m01 3]# 

显示系统预定义的服务名称:

[root@m01 3]# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger 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 isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

查询ens33接口与哪个zone匹配,网卡与public匹配,则该网卡的流量执行public中定义的规则,默认将允许访问所有服务:

[root@m01 3]# firewall-cmd --get-zone-of-interface=ens33
public

显示所有zone及其对应的规则信息:

[root@m01 3]# firewall-cmd --list-all-zones

在public这个zone中添加允许访问FTP服务的规则:

[root@m01 3]# firewall-cmd --add-service=ftp --zone=public
success

在public这个zone中添加允许访问3306端口的规则:

[root@m01 3]# firewall-cmd --add-port=3306/tcp --zone=public
success

从public这个zone中删除允许访问3306端口的规则:

[root@m01 3]# firewall-cmd --remove-port=3306/tcp --zone=public
success

将ens33网卡与public绑定,以后从该接口进入的流量,匹配public中的规则:

[root@m01 3]# firewall-cmd --add-interface=ens33 --zone=public

success

将ens33网卡接口与public解除绑定:

[root@m01 3]# firewall-cmd --remove-interface=ens33 --zone=public
success

将源IP地址1.1.1.1与public绑定,以后该主机访问本机时匹配public中的规则:

[root@m01 3]# firewall-cmd --add-source=1.1.1.1 --zone=public
success

查看默认zone的规则列表:

[root@m01 3]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 1.1.1.1
  services: dhcpv6-client ftp ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

查看public这个zone的规则列表:

[root@m01 3]# firewall-cmd --list-all --zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 1.1.1.1
  services: dhcpv6-client ftp ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

在public这个zone中添加一条永久规则(允许访问3306端口),该规则再重启防火墙后依然有效:

[root@m01 3]# firewall-cmd --permanent --add-port=3306/tcp --zone=public
success

重新加载读取防火墙规则:新添加规则后要重新加载firewall 规则才生效

[root@m01 3]# firewall-cmd --reload 
success
[root@m01 3]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 3306/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值