Linux 防火墙
本文防火墙配置是基于CentOS7进行叙述,其他linux版本仅供参考
防火墙概述
-
在 Centos7里有几种防火墙共存: firewalld 、 iptables 、 ebtables(基本不用)。
-
默认是使用 firewalld来管理 netfilter 子系统,不过底层调用的命令仍然是 iptables等。
firewalld 和 iptables 区别
firewalld 防火墙
firewalld的重要概念 - 区域管理 firewalld将网卡对应到不同的区域(zone),zone默认有9个
注意 :Firewalld的默认区域是 public
区域:
-
区域就像进入主机之前的安全检査的关口,毎个区域都具有不同程度的限制规则。
-
可以同时使用多个区域,但是每个区域都必须关联ip和接口。
-
默认情况下,public区域是默认区域,包含所有网卡。[/start-plane]
Firewalld 默认提供的9个zone配置文件。配置文件分别为:
block. xml、 dmz.xml、drop.xml、 external xml、 home. xml、 internal xml、 public. xml、trusted. xml、 work. xml
存放路径: /usr/ib/ firewall/ zones/ 目录下
firewalld 配置方法
Firewalld的配置方法主要有三种: firewall-config ,firewall-cmd 和 直接编辑xml文件
1. firewall-config :图形化工具
CentOS7默认服务都是关闭的,勾选Services服务即打开,或者新建一条端口规则打开
2. firewall-cmd :命令行工具
**允许或者拒绝任意端口/协议 ** 举例:允许或禁用1234端口的TCP流量
[root@localhost ~]# firewall-cmd --zone=public --add-port=1234/tcp --permanent #允许1234端口的TCP流量
[root@localhost ~]# firewall-cmd --zone=public --remove-port=1234/tcp --permanent #禁止1234端口的TCP流量
## 命令分析:
firewall-cmd:firewalld命令行工具
--ad-port:标识添加的端口
--permanent:表示设置为永久
--zone:指定到具体的zone配置文件
批量开放或限制端口 举例:批量开放端口,如从100-500之间的端口都开放[/c-alert]
[root@localhost ~]# firewall-cmd --zone=public --add-port=100-500/tcp --permanent
**启用或禁用服务 ** 举例:启用或禁用HTTP服务[/c-alert]
firewall-cmd --zone=public --add-service=http --permanent #永久允许http服务的流量
firewall-cmd --zone=public --remove-service=http --permanent #永久禁用http服务流量
3. 直接编辑xml 文件
可以直接修改xml文件(不推荐 )
用户配置目录有:
/etc/firewalld/
/etc/firewalld/services/
/etc/firewalld/zones/
注意 :更改完xml文件后,要使用 firewall-cmd --reload 命令 重新加载
iptables 防火墙
iptables 和 firewalld 一样不是真正的防火墙,我们可以将它理解成一个客户端代理,通过这个代理,我们将安全的设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,即 netfilter 。
iptables是按照规则,即网络管理员与定义的条件和方法来处理数据包,如:通过(accept)、丢弃(drop)等。
iptables的结构:iptables→ Tables→ Chains→ Rules,即 tables由 chains组成,而 chains又由rules组成。
iptables 四表五链
Linux防火墙过滤框架
如图为 Linux防火墙的过滤框架,从图中可以看出,
-
如果是 外部主机 发送数据包给 防火墙本机 ,数据将会经过 PREROUTING 链 与 INPUT 链;
-
如果是 防火墙本机 发送数据包到 外部主机 ,数据会经过 OUTPUT 链与 POSTROUTING 链;
-
如果防火墙作为路由负责转发数据 ,则数据将经过 PREROUTING 链、 FORWARD 链以及POSTROUTING 链。
iptables 语法构成
iptables [-t 表名] 选项 [链名] [条件] [控制类型]
[root@icq Desktop]# iptables -t filter -I INPUT -p icmp -j REJECT #阻止ping
-j:数据包的常见控制类型
ACCEPT:允许通过
REJECT:拒绝通过,必要时会给出提示
DROP:直接丢弃,不给出任何回应
LOG:记录日志信息,然后传给下一条规则继续匹配
-p:指定协议类型:tcp、udp、icmp
-m:表示启用扩展功能,一般和-p配合使用
注意 :
-
不指定表名时,默认指 filter表
-
不指定链名时,默认指表内的所有链
-
除非设置链的默认策略,否则必须指定匹配条件
-
选项、链名、控制类型使用大写字母,其余均为小写字母[/c-alert]
iptables 命令详解
iptables 添加新的规则
示例:
[root@icq Desktop]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@icq Desktop]# iptables -I INPUT -p udp -j ACCEPT
[root@icq Desktop]# iptables -I INPUT 2 -p icmp -j ACCEPT
参数:
-A:在链的末尾追加条规则
-I:在链的开头,或指定序号,插入一条规则
-d:指定IP地址
--dport:知道目的端口
iptables 规则查看
示例:
[root @icq Desktop]# iptables -n -L INPUT
参数:
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-I:以更详细的方式显示规则信息
iptables 删除、清空规则
示例:
[root@icq Desktop]# iptables -D INPUT 1
[root@icq Desktop]# iptables -F
[root@icq Desktop]# iptables -t 指定表 -F
参数:
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则