首先我们认识到防火墙是什么:所谓防火墙,是指在与及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施一般包括隔离和保护,有这样功能的我们称之为防火墙。
其次,防火墙也有以下的几个作用。第一个就是包过滤的作用,简单的理解就是可以实现阻挡攻击、禁止外部或者内部访问某些站点,限制每个IP的流量和连接数,也就是有放行和阻止的权利。然后就是包的透明转发,简单来说就是防火墙都是建立在网络边境上的。如果这个时候有网络区域的包需要到达另一个网络,那么必须由防火墙进行转发才行。然后就是阻挡外部攻击的作用了,如果出现了防火墙规则里不允许的,那么防火墙会向护盾一样把其阻挡在外,阻断在外。最后一个呢就是记录攻击的作用。平时我们受到的攻击,防火墙有必要的话都是会记录下来的,不过一般还是由专门的IDS入侵检测系统来完成,只不过防火墙也是有这样的作用的。
说完防火墙的作用,就可以来说一下防火墙一共分几种类型。首先是现在大部分都在用的,centos7版本以后默认的防火墙firewalld防火墙。第二种就是centos7版本之前的默认防火墙iptables防火墙。第三种就是ufw防火墙,是一种比较简单的防火墙。
首先,我们来说firewalld防火墙。它有一个最大的优点就是支持动态更新以及加入了防火墙“ZONE”概念,firewalld防火墙支持IPV4和IPV6。可以命令行firewall-cmd进行管理也可以通过图形化管理工具firewall-config进行管理,比较方便查看以及管理操作。
值得注意的是firewalld是有规则的,它的规则也分两种形态,一种是runtime(正在运行生效的状态),在runtime状态添加的防火墙规则会立刻生效,但是也是临时的规则,下一次加载就没有了。另外一种呢是permanent(永久生效),在永久态添加规则不会立刻生效,需要重启防火墙活者刷新才可以生效。
命令 | 说明 |
--get-default-zone | 查看当前默认区域 |
--set-default-zone=value | 设置默认区域 |
--get-zones | 列出所有可用区域 |
--get-active-zones | 列出当前正在使用的区域及区域对应的网卡 |
--change-interface=网卡 [--zone=区域] | 将指定网卡接口与指定区域做关联,如果没有指定区域则关联到默认区域 |
--add-interface=网卡 [--zone=区域] | 将来自指定接口的所有流量都路由到指定区域。没有指定区域时使用默认区域 |
--add-source=ip地址 [--zone=区域] | 添加源IP规则 并将来自ip地址或网段的所有流量路由到指定区域,没有指定区域时使用默认区域 |
--remove-source=ip地址 [--zone=区域] | 移出指定区域的指定规则 |
--list-all [--zone=区域] | 列出指定区域的规则 |
--add-service=服务名 [--zone=区域] | 添加服务准入规则。允许到该服务的流量通过区域,没有指定区域时为默认区域 |
--remove-service=服务名 [--zone=区域] | 删除指定服务准入规则 |
--add-port=端口 [--zone=区域] | 添加到指定端口的准入规则 |
--remove-port=端口 [--zone=区域] | 删除到指定端口的准入规则 |
以上为防火墙的命令。
然后呢就谈到了防火墙的端口转发。那么什么是端口转发呢,比如当我们需要把某个端口隐藏起来的时候,就可以在防火墙上阻止这个端口的访问,然后再开一个不规则的端口,配置一下防火墙就可以进行端口转发啦。
举个例子,比如呢我们开放的是80端口,但是为了隐藏的话,可以进行端口转发:
firewall-cmd --add-masquerade
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80 转发8080流量到80
firewall-cmd --add-port=8080/tcp 设置8080准入
firewall-cmd --remove-service=http 设置http服务禁入
接下来就是关于防火墙的富规则这一块,所谓富规则就是添加高级复杂的规则。例如:
添加允许内网主机访问109端口的规则:
firewall-cmd --add-rich-rule='rule service name="POP2" accept'
firewall-cmd --add-port=109/tcp
添加允许内网主机访问tcp/25端口的规则:
firewall-cmd --permanent --add-rich-rule='rule service name="stmp" accept'
firewall-cmd --permanent --add-port=25/tcp
规则也分以下几类:
1. service:服务名称,是firewalld提供其中一种服务,格式为:service name=服务名
2. port:端口,端口号或者端口范围,协议为TCP或UDP,格式为:port port=端口号或者范围 protocol=tcp/udp
3. protocol:协议,可以是协议名也可以是协议ID号,格式为:protocol=协议名或ID
4. icmp-block:阻断一个或多个ICMP类型,格式为:icmp-block name=icmy类型名
5. masquerade:IP伪装,用源地址而不是目标地址来把伪装限制在一个范围内
6. forward-port:端口转发 格式:forward-port port=源端口号 protocol=协议名 to-port=转发的端口号 to-addr=地址
接下来就是关于iptables防火墙。它其中包括了四表五链。首先四表分为:raw表:确定是否对该数据包进行状态跟踪。mangle表:为数据包设置标记。nat表:修该数据包中的源、目标IP地址或端口。filter表:过滤,是否放行。然后五链分为:INPUT链:处理入站数据包。OUTPUT链:处理出站数据包。FORWARD链:处理转发数据包。POSTROUTING链:在进行路由选择后处理数据包。PREROUTING链:在进行路由选择前处理数据包。iptables一般的语法格式为Iptables[-t 表名]管理选项[键名][条件][-j 动作]