Linux防火墙-----iptables与firewalld

一.netfilter、iptables、firewalld的概念

netfilter

  • netfilter位于Linux内核中的包过滤功能体系,称为Linux防火墙的“内核态”。
  • netfilter的主要工作模块位于内核,在网络层的五个位置(prerouting,posrouting,input,output,forware)注册了一些函数,用来抓取函数包
  • 把数据包的信息拿出来匹配各个链位置在对应表中规则
  • 匹配之后,进行相应的处理ACCEPT、DROP等等

iptables

  • iptables是centos6中用来管理linux防火墙的命令程序,通常为位于/sbin/iptables目录下,属于用户态的防火墙管理体系
  • iptables的作用是为包过滤机制的实现提供规则(或策略),告诉netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理

firewalld

  • firewalld防火墙是centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙
  • firewalld也属于包过滤防火墙或者称为网络层防火墙,firewalld和iptables都是用来管理防火墙的工具(属于用户态),来定义防火墙的各种规则
  • firewalld的内部规则也指向netfilter网络过滤子系统,以实现包过滤防火墙功能
  • firewalld防火墙最大的优点在于支持动态更新以及加入了防火墙的“zone”概念
  • firewalld可以通过字符管理工具firewall-cmd和图形化管理工具firewall-config
  • firewalld的配置模式分为临时配置和永久配置

firewalld和iptables的区别

  firewalld iptables
配置文件 /etc/firewalld/firewalld.conf或/usr/lib/firewalld/ /etc//sysconfig/iptables
对规则的修改 不需要全部刷新策略,不丢实现行连接 需要全部刷新策略,丢失连接
防火墙类型 动态防火墙 静态防火墙

二.iptables默认的四表五链

  • 表是存储的规则;数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行、丢弃、转发还是修改等操作
  • 链就是位置;一共有五个PREROUTING(进路由)、INPUT(进系统)、FORWARD(转发)、OUTPUT(出系统)、POSTROUTING(出路由)

四表

  • filter表——过滤数据包——包含三个链INPPUT,FORWARD、OUTPUT
  • nat表——用于网络地址转换(ip,端口)——包含三个链PREROUTING、POSTROUTING、OUTPUT
  • mangle表——修改数据包的服务类型、TTL,并且可以配置路由实现流量整形——PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
  • raw表——决定数据包是否被状态跟踪机制处理——包含两个链PREROUTING、OUTPUT

五链

  • INPUT链——进来的数据包应用此规则链中的策略
  • OUTPUT链——外出的数据包应用此规则链中的策略
  • FORWARD链——转发数据包时应用此规则链中的策略
  • PREROUTING链——对数据包作路由选择前用此链中的规则(所有的数据包进来的时候都由这个链处理)
  • POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时候都先由这个链处理)

三.iptables的语法格式

  • iptables [-t 表名 ]  选项  [ 链名 ] [ 条件] [ -j 控制类型 ]

iptables常用参数

  • -p :设置默认策略:iptables
  • -P INPUT  (DROP | ACCEPT)
  • -F:清空规则链
  • -L:查看规则链
  • -A:在规则链的末尾加入新规则
  • -I num :在规则链的头部加入新规则
  • -D num:删除某一条规则
  • -s 匹配来源 IP/MASK,加叹号“!”表示除了这个IP外
  • -d 匹配目标地址
  • -i 网卡名称 匹配从这块网卡流入的数据
  • -o 网卡名称 匹配从这块网卡流出的数据
  • -p 匹配协议,如tcp,udp,icmp
  • --dport num 匹配目标端口号
  • --sport num 匹配来源端口号
服务器
[root@localhost ~]# yum install httpd -y

[root@localhost ~]# iptables -I INPUT -i ens33 -p tcp --dport 80 -s 192.168.43.155/24 -j ACCEPT
//192.168.43.155客户机的IP地址

四.firewalld网络区域以及数据处理流程

  • 区域如同进入一个主机的安全门,每个区域都具有不同限制程度的规则
  • 可以使用一个或者多个区域,但是任何一个活跃区域至少需要关联源地址或接口
  • 默认情况下,public区域是默认区域,包含所有接口(网卡)
firewalld网络区域 网络区域描述
drop(丢弃) 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接
block(限制)   任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝
public(公共)   在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接
exiernal(外部)   特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接
dmz(非军事区)  用于你的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接

work(工作)

用于工作区,您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接

 

home(家庭)                

用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接
internal(内部) 用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接
trusted(信任)  可接受所有的网络连接

firewalld数据处理流程

  • 检查数据来源的源地址
  • 如果源地址关联到特定的区域,则执行该区域所指定的规则
  • 如果源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所指定的规则
  • 如果网络接口未关联到特定的区域,则使用默认区域并且执行该区域所指定的规则

五.firewalld防火墙的配置方法

运行时配置

  • 实时生效,并持续至firealld重新启动或重新加载配置
  • 不中断现有的连接
  • 不能修改服务配置

永久配置

  • 不立即生效,除非firewalld重新启动或重新加载配置
  • 中断现有连接
  • 可以修改服务配置

注:业务繁忙时,不能使用永久配置,不然会造成业务中断

firewall-config图形工具的工作流程

  • 运行时配置/永久配置
  • 重新加载防火墙
  • 关联网卡到指定区域
  • 修改默认区域
  • 连接状态

Linux防火墙-----iptables与firewalld_第1张图片

注:利用firewall-config命令在终端上进入图形化界面

命令行工具 firewall-cmd

firewalld的配置文件目录/etc/firewalld ,/usr/lib/firewalld
[root@localhost ~]# cd /etc/firewalld
[root@localhost firewalld]# ls
firewalld.conf  helpers  icmptypes  ipsets  lockdown-whitelist.xml  services  zones
[root@localhost firewalld]# cd /usr/lib/firewalld
[root@localhost firewalld]# ls
helpers  icmptypes  ipsets  services  xmlschema  zones
[root@localhost firewalld]# 

六.firewalld命令行工具操作字符

  • firewall-cmd命令支持全部防火墙特性
  • 对于状态和查询模式,命令只返回状态,没有其他输出
  • --permanent参数:该参数表示永久配置,否则表示运行时配置,一般放在最后
  • 【--zone=】选项:不携带此选项表示针对默认区域操作,否则针对指定区域的操作
  • 查看firewall的状态
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# firewall-cmd --state
not running
[root@localhost ~]# systemctl restart firewalld
[root@localhost ~]# firewall-cmd --state
running
[root@localhost ~]# 
//功能同比systemctl status firewalld
  • 重新加载firewalld的配置
[root@localhost ~]# firewall-cmd --reload
success
//状态信息将会丢失,多用于处理防火墙出现问题
[root@localhost ~]# firewall-cmd --complete-reload
success
[root@localhost ~]# 
  • 查看预定义信息
//查看预定义的区域
[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
//查看预定义的服务
[root@localhost ~]# firewall-cmd --get-service
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp open ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
//查看预定义的icmp类型
[root@localhost ~]# firewall-cmd --get-icmptypes
  • 显示网络连接或者接口默认区域
[root@localhost ~]# firewall-cmd --get-default-zone
public
[root@localhost ~]# 
  • 设置网络连接或者接口的默认区为internal
[root@a ~]# firewall-cmd --set-default-zone=internal
success
[root@a ~]# firewall-cmd --get-default-zone
internal
[root@a ~]# 
  • 显示已激活的所有区域
[root@a ~]# firewall-cmd --get-active-zones
internal
  interfaces: ens33
[root@a ~]# 
//区域至少关联着一个接口(网卡)或者一个源地址/网段

注:get在linux中有下载和查看的含义

  • 显示ens33接口绑定的区域
[root@a ~]# firewall-cmd --get-zone-of-interface=ens33
internal
  • 为ens33接口绑定work区域
[root@a ~]# firewall-cmd --zone=work --add-interface=ens33
The interface is under control of NetworkManager, setting zone to 'work'.
success
查看网络连接的默认区域,默认区域没有改变
[root@a ~]# firewall-cmd --get-default-zone
internal
  • 为work区域更改绑定的网络接口ens37
[root@a ~]# firewall-cmd --zone=work --change-interface=ens33
The interface is under control of NetworkManager and already bound to 'work'
The interface is under control of NetworkManager, setting zone to 'work'.
success
[root@a ~]# firewall-cmd --get-active-zones
work
  interfaces: ens33 ens37
[root@a ~]# 

  • 为work区域删除绑定的网络接口ens33
[root@a ~]# firewall-cmd --zone=work --remove-interface=ens33
The interface is under control of NetworkManager, setting zone to default.
success
//解除的接口会分配给默认区域
[root@a ~]# firewall-cmd --get-active-zones
work
  interfaces: ens37
internal
  interfaces: ens33
[root@a ~]# 
  • 查询work区域中是否包含接口ens33
[root@a ~]# firewall-cmd --zone=work --query-interface=ens33
no
[root@a ~]# firewall-cmd --zone=work --query-interface=ens37
yes
[root@a ~]# 
  • 显示所有区域及其规则
[root@a ~]# firewall-cmd --list-all-zones
  • 显示internal区域的所有规则
[root@a ~]# firewall-cmd --zone=internal --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@a ~]#
  • 显示默认区域的所有规则
[root@a ~]# firewall-cmd --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh mdns samba-client dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@a ~]# 
  • 显示internal区域内允许访问的所有服务
[root@a ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[root@a ~]# 
  • 为public区域设置允许访问SMTP服务
[root@a ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client
[root@a ~]# firewall-cmd --zone=public --add-service=smtp
success
[root@a ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client smtp
[root@a ~]# 
  • 删除internal区域中的SSH服务
[root@a ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[root@a ~]# firewall-cmd --zone=internal --remove-service=ssh
success
[root@a ~]# firewall-cmd --zone=internal --list-services
mdns samba-client dhcpv6-client
[root@a ~]# 
  • 查询internal区域中是否启用了SSH服务
[root@a ~]# firewall-cmd --zone=internal --query-service=ssh
no
[root@a ~]#
  • 显示internal区域内允许访问的所有端口号
[root@a ~]# firewall-cmd --zone=internal --list-ports

  • 启用internal区域22端口的TCP协议组合
[root@a ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
success
//timeout表示时间持续为5分钟
[root@a ~]# firewall-cmd --zone=internal --list-ports
22/tcp
[root@a ~]# 
  • 禁用internal区域22端口的TCP协议组合
[root@a ~]# firewall-cmd --zone=internal --list-ports
22/tcp
[root@a ~]# firewall-cmd --zone=internal --remove-port=22/tcp
success
[root@a ~]# firewall-cmd --zone=internal --list-ports

[root@a ~]#
  • 查询internal区域中是否启用了22端口和TCP协议组合
[root@a ~]# firewall-cmd --zone=internal --list-ports

[root@a ~]# firewall-cmd --zone=internal --query-port=22/tcp
no
[root@a ~]# 
  • 显示work区域内阻塞的所有ICMP类型
[root@a ~]# firewall-cmd --zone=work --list-icmp-blocks
  • 为work区域设置阻塞echo-reply类型的ICMP
[root@a ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
success
[root@a ~]# firewall-cmd --zone=work --list-icmp-blocks
echo-reply
[root@a ~]# 

  • 删除work区域为阻塞的echo-reply类型的ICMP
[root@a ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success
[root@a ~]# firewall-cmd --zone=work --list-icmp-blocks

[root@a ~]# 

  • 查询work区域的echo-request类型的ICMP是否阻塞
[root@a ~]# firewall-cmd --zone=work --query-icmp-block=echo-request
no
[root@a ~]# 

 

你可能感兴趣的:(firewalld)