目录
一、防火墙基本介绍
iptables服务会把配置好的防火墙策略交由内核层面的 netfilter 网络过滤器来处理,firewalld 服务则是把配置好的防火墙策略交由内核层面的 nftables 包过滤框架来处理。
- iptables、firewalld:仅仅是定义防火墙规则的一个工具,写规则使用
- netfilter、nftables:实现过滤功能,是真正实现防火墙功能的一个内核模块
二、iptables(Centos6)
2.1、介绍
iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类是
- ACCEPT(允许流量通过)
- REJECT(拒绝流量通过)
- LOG(记录日志信息)、
- DROP(拒绝流量通过)
REJECT 和 DROP 的不同点:
- 就 DROP 来说,它是直接将流量丢弃而且不响应;
- REJECT 则会在拒绝流量后再回复一条“您的信息已经收到,但是被扔掉了”信息,从而让流量发送方清晰地看到数据被拒绝的响应信息。
tips:
1、在日常运维工作中,经常会使用 ping 命令来检查对方主机是否在线,而向防火墙的INPUT 规则链中添加一条允许 ICMP 流量进入的策略规则就默认允许了这种 ping 命令检测行为。
2、防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务。
3、配置的防火墙规则保存在以下文件中 /etc/sysconfig/iptables
2.2、相关命令
iptables中常用的参数
- -P 设置默认策略
- -F 清空规则链
- -L 查看规则链
- -A 在规则链的末尾加入新规则
- -I num 在规则链的头部加入新规则
- -D num 删除某一条规则
- -s 匹配来源地址 IP/MASK,加叹号“!”表示除这个 IP 外
- -d 匹配目标地址
- -i 网卡名称 匹配从这块网卡流入的数据
- -o 网卡名称 匹配从这块网卡流出的数据
- -p 匹配协议,如 TCP、UDP、ICMP
- --dport num 匹配目标端口号
- --sport num 匹配来源端口号
- -j 指定要进行的处理动作 (一般有 DROP(丢弃)、REJECT(拒绝)、ACCEPT(接受、允许))
开启防火墙
# service iptables start
关闭防火墙
# service iptables stop
查看防火墙状态
# service iptables status
设置开启禁用防火墙服务
# chkconfig iptables off
设置开机开启防火墙服务
# chkconfig iptables on
允许本地回环接口(即运行本机访问本机)
# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
允许已建立的或相关连的通行
- ESTABLISHED:已建立的链接状态
- RELATED:该封包为本机发出的封包有关
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许所有本机向外的访问
# iptables -A OUTPUT -j ACCEPT
允许访问22端口
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许访问80端口
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
拒绝所有向内的访问
# iptables -A INPUT -j reject
禁止转发所有数据包
# iptables -A FORWARD -j REJECT
如果想让配置的防火墙策略永久生效,还要执行保存命令:
# service iptables save
三、firewalld(Centos7)
3.1、介绍
firewalld(Dynamic Firewall Manager of Linux systems,Linux 系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于 GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
过滤规则(执行动作):
- accept 接受
- drop 丢弃
- reject 拒绝
firewalld 配置文件存放目录: /etc/firewalld
3.1.1、zone分类及相关命令
查看所有的zone
# firewall-cmd --list-all-zones
查看所有可用zone
# firewall-cmd --get-zones
查看默认zone
# firewall-cmd --get-default-zone
设置默认zone
# firewall-cmd --set-default-zone=<zone>
3.1.2、预定义的服务
查看预定义服务列表
# firewall-cmd --get-services
预定义服务的配置文件查看(在 /usr/lib/firewalld/services 目录下):
3.2、相关命令
3.2.1、服务安装
安装firewalld 命令
# yum install firewalld
安装图形化配置工具(可选)
# yum install firewall-config
直接在命令行输入:# firewall-config 进入图形化配置
查看防火墙版本
# firewall-cmd --version
3.2.2、服务启停命令
打开防火墙服务
# systemctl start firewalld
查看防火墙服务状态
# systemctl status firewalld
或者
# firewall-cmd –state
关闭防火墙服务
# systemctl stop firewalld
设置开机禁用防火墙
# systemctl disable firewalld
设置开机启用防火墙
# systemctl enable firewalld
检查服务是否正常运行
# systemctl is-active firewalld
检查确认服务是否开机运行
# systemctl is-enabled firewalld
设置开机禁用防火墙
# systemctl disable firewalld
设置开机启用防火墙
# systemctl enable firewalld
重新加载防火墙规则
# firewall-cmd --reload
3.2.3、firewalld规则添加
3.2.3.1、添加端口
查看所有打开的端口
# firewall-cmd --zone=public --list-ports
添加一个端口
# firewall-cmd --zone=public --add-port=80/tcp --permanent
删除一个端口
# firewall-cmd --zone=public --remove-port=80/tcp --permanent
查询防火墙有无开放某个端口
# firewall-cmd --query-port=23/tcp
tips:
1、-- permanent 持久配置: 修改后需要重载才会生效
注意:一旦使用了permanent,配置完成后一定要reload,否则只能待防火墙重启后这些配置才能生效。
3.2.3.2、添加服务(协议)
实质还是放行了服务默认的端口号
添加一个httpd服务设置
# firewall-cmd --permanent --add-service=http
删除一个httpd服务设置
# firewall-cmd --permanent --remove-service=http
查询一个httpd服务是否被添加
# firewall-cmd --query-service=http
3.2.3.3、添加IP
添加Postgresql端口设置。允许192.168.142.166访问5432端口
# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.209.134" port protocol="tcp" port="80" accept"
移除Postgresql端口访问设置
# firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.209.134" port protocol="tcp" port="80" accept"
3.3、富规则
添加Postgresql端口设置。允许192.168.142.166访问5432端口
# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.209.134" port protocol="tcp" port="80" accept"
移除Postgresql端口访问设置
# firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.209.134" port protocol="tcp" port="80" accept"