Linux防火墙--iptables与firewalld
程序员文章站
2024-03-21 09:24:28
...
一.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的配置模式分为临时配置和永久配置
二.防火墙工作原理图
- 区域介绍
三.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 匹配来源端口号
五.firewalld防火墙的配置方法
运行时配置
- 实时生效,并持续至firealld重新启动或重新加载配置
- 不中断现有的连接
- 不能修改服务配置
永久配置
- 不立即生效,除非firewalld重新启动或重新加载配置
- 中断现有连接
- 可以修改服务配置
-
firewall-config图形工具的工作流程
- 运行时配置/永久配置
- 重新加载防火墙
- 关联网卡到指定区域
- 修改默认区域
- 连接状态
六.firewalld命令行工具操作字符
- firewall-cmd命令支持全部防火墙特性
- 对于状态和查询模式,命令只返回状态,没有其他输出
- --permanent参数:该参数表示永久配置,否则表示运行时配置,一般放在最后
- 【--zone=<zone>】选项:不携带此选项表示针对默认区域操作,否则针对指定区域的操作
- 查看firewall的状态
[aaa@qq.com ~]# systemctl stop firewalld
[aaa@qq.com ~]# firewall-cmd --statenot running
[aaa@qq.com ~]# systemctl restart firewalld
[aaa@qq.com ~]# firewall-cmd --staterunning
[aaa@qq.com ~]#
- 重新加载firewalld的配置
[aaa@qq.com ~]# firewall-cmd --reload
success
//状态信息将会丢失,多用于处理防火墙出现问题
[aaa@qq.com ~]# firewall-cmd --complete-reload
success
[aaa@qq.com ~]#
- 查看预定义信息
[aaa@qq.com ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
//查看预定义的区域
[aaa@qq.com ~]# 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 openvpn 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
//查看预定义的服务
[aaa@qq.com ~]# firewall-cmd --get-icmptypes
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
//查看预定义的icmp类型
- 显示网络连接或者接口默认区域
[aaa@qq.com ~]# firewall-cmd --get-default-zone
public
[aaa@qq.com ~]#
- 设置网络连接或者接口的默认区为internal
[aaa@qq.com ~]# firewall-cmd --set-default-zone=internal
success
[aaa@qq.com ~]# firewall-cmd --get-default-zone
internal
[aaa@qq.com ~]#
- 显示已**的所有区域
[aaa@qq.com ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33
[aaa@qq.com ~]#
- 显示ens33接口绑定的区域
[aaa@qq.com ~]# firewall-cmd --get-zone-of-interface=ens33
internal
[aaa@qq.com ~]#
- 为ens33接口绑定work区域
[aaa@qq.com ~]# firewall-cmd --zone=work --add-interface=ens33
The interface is under control of NetworkManager, setting zone to 'work'.
success
[aaa@qq.com ~]# firewall-cmd --get-default-zone
internal
[aaa@qq.com ~]#
- 为work区域删除绑定的网络接口ens33
[aaa@qq.com ~]# firewall-cmd --zone=work --remove-interface=ens33
The interface is under control of NetworkManager, setting zone to default.
success
[aaa@qq.com ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33
[aaa@qq.com ~]#
- 查询work区域中是否包含接口ens33
[aaa@qq.com ~]# firewall-cmd --zone=work --query-interface=ens33
no
[aaa@qq.com ~]# firewall-cmd --zone=internal --query-interface=ens33
yes
[aaa@qq.com ~]#
- 显示internal区域的所有规则
[aaa@qq.com ~]# 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:
[aaa@qq.com ~]#
- 显示internal区域内允许访问的所有服务
[aaa@qq.com ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[aaa@qq.com ~]#
- 删除internal区域中的SSH服务
[aaa@qq.com ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[aaa@qq.com ~]# firewall-cmd --zone=internal --remove-service=ssh
success
[aaa@qq.com ~]# firewall-cmd --zone=internal --list-services
mdns samba-client dhcpv6-client
[aaa@qq.com ~]#
- 查询internal区域中是否启用了SSH服务
[aaa@qq.com ~]# firewall-cmd --zone=internal --query-service=ssh
no
[aaa@qq.com ~]#
- 显示internal区域内允许访问的所有端口号
[aaa@qq.com ~]# firewall-cmd --zone=internal --list-ports
[aaa@qq.com ~]#
- 启用internal区域22端口的TCP协议组合
[aaa@qq.com ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
success
[aaa@qq.com ~]# firewall-cmd --zone=internal --list-ports
22/tcp
[aaa@qq.com ~]#
- 禁用internal区域22端口的TCP协议组合
[aaa@qq.com ~]# firewall-cmd --zone=internal --list-ports
22/tcp
[aaa@qq.com ~]# firewall-cmd --zone=internal --remove-port=22/tcp
success
[aaa@qq.com ~]# firewall-cmd --zone=internal --list-ports
[aaa@qq.com ~]#
- 查询internal区域中是否启用了22端口和TCP协议组合
[aaa@qq.com ~]# firewall-cmd --zone=internal --query-port=22/tcp
no
[aaa@qq.com ~]#
- 显示work区域内阻塞的所有ICMP类型
[aaa@qq.com ~]# firewall-cmd --zone=work --list-icmp-blocks
[aaa@qq.com ~]#
- 为work区域设置阻塞echo-reply类型的ICMP
[aaa@qq.com ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
success
[aaa@qq.com ~]# firewall-cmd --zone=work --list-icmp-blocks
echo-reply
[aaa@qq.com ~]#
- 删除work区域为阻塞的echo-reply类型的ICMP
[aaa@qq.com ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success
[aaa@qq.com ~]# firewall-cmd --zone=work --list-icmp-blocks
[aaa@qq.com ~]#
- 查询work区域的echo-request类型的ICMP是否阻塞
[aaa@qq.com ~]# firewall-cmd --zone=work --query-icmp-block=echo-request
no
[aaa@qq.com ~]#
推荐阅读
-
Linux的基本操作——iptables防火墙介绍
-
Linux防火墙--iptables与firewalld
-
linux防火墙iptables配置简要 博客分类: Linux linux防火墙iptables配置
-
CentOS Linux开启和关闭防火墙命令 博客分类: centos 防火墙iptables
-
CentOS Linux开启和关闭防火墙命令 博客分类: centos 防火墙iptables
-
CentOS 7.0 关闭firewalld防火墙指令 及更换Iptables防火墙
-
linux查看防火墙状态与开启关闭命令详解
-
LINUX中IPTABLES防火墙的基本使用教程
-
Linux防火墙基础与编写防火墙规则
-
linux配置防火墙iptables实例分享