- 防火墙管理工具
- iptables
- 策略与规则链
- 基本的命令参数
- Firewalld
- 终端管理工具
- 图形管理工具
- 服务的访问控制列表
防火墙管理工具
防火墙虽然有软件或硬件之分,但主要功能都是依据策略对穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。这样一来,就可以保证仅有合法的流量在企业内网和外部公网之间流动了
iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。网络的连通是防火墙运行的基础
iptables rhel5-6-7 最新版本仅支持到rhel7.0-7.1 版本(后续版本已排除)
首先配置IP的四种方式
前三种修改完网络配置都需要重启网络服务才能生效
1.修改网卡文件:
vim /etc/sysconfig/network-scripts/ifcfg-xxx
重启网络服务: systemctl restart network
2.nmtui 配置工具 (对应rhel5-6是setup)
nmtui 选项卡交互式配置
3.迷你图形化界面配置
nm-connection-editor
4.纯图形化配置
配置完开关一下即刻生效
IPtables
策略与规则链
防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。默认策略是允许所有,一般而言,防火墙策略规则的设置有两种:一种是“通”(即放行),一种是“堵”(即阻止)。当防火墙的默认策略为拒绝时(堵),就要设置允许规则(通),否则谁都进不来;如果防火墙的默认策略为允许时,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用。
iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:
在进行路由选择前处理数据包(DNAT)
处理流入的数据包(INPUT)
处理流出的数据包(OUTPUT)
处理转发的数据包(FORWARD)
在进行路由选择后处理数据包(SNAT)
防火墙的四种包处理方式
1.允许/放行 accept
2.拒绝 reject (返回拒绝信息,REJECT拒绝动作后,流量发送方会看到端口不可达的响应)
3.丢弃 drop (不返回信息),DROP拒绝动作后,流量发送方会看到响应超时的提醒。但是他无法判断流量是被拒绝,还是接收方主机当前不在线
4.日志 log
基本的命令参数
iptables是一款基于命令行的防火墙策略管理工具,具有大量参数,学习难度较大。好在对于日常的防火墙策略配置来讲,大家无需深入了解诸如“四表五链”的理论概念,只需要掌握常用的参数并做到灵活搭配即可,这就足以应对日常工作了
iptables命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量。
另外,再次提醒,防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务,以免发生错误
iptables中常用的参数以及作用
参数 |
作用 |
-P |
设置默认策略 |
-F |
清空规则链 |
-L |
查看规则链 |
-A |
在规则链的末尾加入新规则 |
-I num |
在规则链的头部加入新规则 |
-D num |
删除某一条规则 |
-s |
匹配来源地址IP/MASK,加叹号“!”表示除这个IP外 |
-d |
匹配目标地址 |
-i 网卡名称 |
匹配从这块网卡流入的数据 |
-o 网卡名称 |
匹配从这块网卡流出的数据 |
-p |
匹配协议,如TCP、UDP、ICMP |
--dport num |
匹配目标端口号 |
--sport num |
匹配来源端口号 |
|
|
规则查询清理
iptables --line-numbers -L 查看所有防火墙规则链
iptables -F 清空所有防火墙策略
iptables -D INPUT xx 指定删除某条INPUT方向策略(xx为策略编号)
默认策略修改
iptables -P INPUT DROP 修改默认策略为拒绝任何外部到内部的访问
iptables -P INPUT ACCEPT 修改默认策略为允许所有外部到内部的访问
策略插入
iptables -I INPUT -p icmp 在规则的头部插入一条允许ICMP进入的策略
iptables -I INPUT -p icmp -j REJECT 插入一条拒绝ICMP访问内部的策略(-j 指后续会跟上执行动作)
iptables -I INPUT -p icmp -j DROP 插入一条丢弃ICMP访问内部的策略
iptables -I INPUT -p tcp -s 192.168.10.5/24 --dport=22 -j REJEC 拒绝该网段的SSH端口连接
iptables -I INPUT -p tcp --dport=22 -j REJECT 禁止所有人对SSH22端口的连接 (等号也可以用空格替代)
iptables -I INPUT -p tcp --dport 333,444,555 -j REJECT 禁止所有人对特定几个TCP端口的连接
iptables -I INPUT -p tcp --dport 1000:2000 -j REJECT 禁止所有人对1000-2000的所有TCP端口连接
-s源可以是IP,网段,域名
iptables 里面提到限制xxx端口的时候协议后面最好把tcp和udp都写上
firewalld (重点)
终端管理工具
两个子类:firewall-cmd
firewall-config (图形化)
策略场景化,模板化,区域化
RHEL 7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。firewalld中常见的区域名称(默认为public)
命令行终端是一种极富效率的工作方式,firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。它的参数一般都是以“长格式”来提供的
firewalld中常用的区域名称及策略规则
区域 |
默认规则策略 |
trusted |
允许所有的数据包 |
home |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal |
等同于home区域 |
work |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量 |
public |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
external |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block |
拒绝流入的流量,除非与流出的流量相关 |
drop |
拒绝流入的流量,除非与流出的流量相关 |
区域(zone)
firewall-cmd --get-default-zone 查看系统所在的默认区域
firewall-cmd --set-default-zone=dmz 修改系统默认区域为dmz区域
firewall-cmd --zone=public --change-interface=eno16777736 绑定网卡到public区域
firewall-cmd --panic-on(用于被攻击时,开启紧急模式,断开所有网络连接)
firewall-cmd --panic-off 关闭紧急模式
firewall-cmd命令中使用的参数以及作用
参数 |
作用 |
--get-default-zone |
查询默认的区域名称 |
--set-default-zone=<区域名称> |
设置默认的区域,使其永久生效 |
--get-zones |
显示可用的区域 |
--get-services |
显示预先定义的服务 |
--get-active-zones |
显示当前正在使用的区域与网卡名称 |
--add-source= |
将源自此IP或子网的流量导向指定的区域 |
--remove-source= |
不再将源自此IP或子网的流量导向某个指定区域 |
--add-interface=<网卡名称> |
将源自该网卡的所有流量都导向某个指定区域 |
--change-interface=<网卡名称> |
将某个网卡与区域进行关联 |
--list-all |
显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
--list-all-zones |
显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
--add-service=<服务名> |
设置默认区域允许该服务的流量 |
--add-port=<端口号/协议> |
设置默认区域允许该端口的流量 |
--remove-service=<服务名> |
设置默认区域不再允许该服务的流量 |
--remove-port=<端口号/协议> |
设置默认区域不再允许该端口的流量 |
--reload |
让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
--panic-on |
开启应急状况模式 |
--panic-off |
关闭应急状况模式 |
配置防火墙策略时有两种运行模式
1.runtime 当前生效,重启服务器后失效(默认配置运行模式)
2.permanent 当前不生效,重启服务器后生效
如果不想重启需要直接生效 则执行 firewall-cmd --reload
查询某服务是否被允许
firewall-cmd --query-service=ssh
firewall-cmd --query-service=https
将服务添加到允许的列表中
firewall-cmd --add-service=http 添加http服务到允许列表 当前生效 重启后无效
firewall-cmd --permanent --add-service=https 当前无效 重启后永久生效
firewall-cmd --reload 此时可以用该命令使https服务立即生效
将端口号添加到允许列表中
firewall-cmd --zone=public --list-ports 查看允许的端口号 (服务)
firewall-cmd --zone=public --add-port=80/tcp 添加80端口到允许列表中
firewall-cmd --zone=public --add-port=80-1000/tcp 添加80-1000的所有端口到允许列表中
把访问本地888端口的流量转发到22端口上
firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
firewall-cmd --reload
流量精准匹配---富规则(最高优先级的规则)
firewalld中的富规则表示更细致、更详细的防火墙策略配置,是对主规则的补充,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防火墙策略中也是最高的。比如,我们可以在firewalld服务中配置一条富规则,使其拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口):
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
firewall-cmd --reload
图形管理工具
它是firewalld防火墙配置管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作。毫不夸张的说,即使读者没有扎实的Linux命令基础,也完全可以通过它来妥善配置RHEL 7中的防火墙策略。firewall-config的界面如图8-2所示,其功能具体如下。
firewall-config 打开图形化配置模式
1:选择运行时(Runtime)模式或永久(Permanent)模式的配置。
2:可选的策略集合区域列表。
3:常用的系统服务列表。
4:当前正在使用的区域。
5:管理当前被选中区域中的服务。
6:管理当前被选中区域中的端口。
7:开启或关闭SNAT(源地址转换协议)技术。
8:设置端口转发策略。
9:控制请求icmp服务的流量。
10:管理防火墙的富规则。
11:管理网卡设备。
12:被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与之相关的流量。
13:firewall-config工具的运行状态。
将当前区域中请求http服务的流量设置为允许,但仅限当前生效
尝试添加一条防火墙策略规则,使其放行访问8080~8088端口(TCP协议)的流量,并将其设置为永久生效,以达到系统重启后防火墙策略依然生效的目的。还需要在Options菜单中单击Reload Firewalld命令,让配置的防火墙策略立即生效。这与在命令行中执行--reload参数的效果一样
服务的访问控制列表
应用层防火墙
TCP Wrappers是RHEL 7系统中默认启用的一款流量监控程序,它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作。换句话说,Linux系统中其实有两个层面的防火墙,第一种是前面讲到的基于TCP/IP协议的流量过滤工具,而TCP Wrappers服务则是能允许或禁止Linux系统提供服务的防火墙,从而在更高层面保护了Linux系统的安全运行。
TCP Wrappers服务的防火墙策略由两个控制列表文件所控制,用户可以编辑允许控制列表文件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来阻止对服务的请求流量。控制列表文件修改后会立即生效,系统将会先检查允许控制列表文件(/etc/hosts.allow),如果匹配到相应的允许策略则放行流量;如果没有匹配,则去进一步匹配拒绝控制列表文件(/etc/hosts.deny),若找到匹配项则拒绝该流量。如果这两个文件全都没有匹配到,则默认放行流量
命令:vim /etc/hosts.allow 或vim /etc/hosts.deny
TCP Wrappers服务的控制列表文件中常用的参数
客户端类型 |
示例 |
满足示例的客户端列表 |
单一主机 |
192.168.10.10 |
IP地址为192.168.10.10的主机 |
指定网段 |
192.168.10. |
IP段为192.168.10.0/24的主机 |
指定网段 |
192.168.10.0/255.255.255.0 |
IP段为192.168.10.0/24的主机 |
指定DNS后缀 |
.linuxprobe.com |
所有DNS后缀为.linuxprobe.com的主机 |
指定主机名称 |
主机名称为www.linuxprobe.com的主机 |
|
指定所有客户端 |
ALL |
所有主机全部包括在内 |
在配置TCP Wrappers服务时需要遵循两个原则:
- 编写拒绝策略规则时,填写的是服务名称,而非协议名称;
- 建议先编写拒绝策略规则,再编写允许策略规则,以便直观地看到相应的效果。
禁止本机所有ssh服务的流量 配置/etc/hosts.deny 文件 加入sshd*
允许192.168.1.0/24网段访问本机sshd服务的所有流量 配置/etc/hosts.allow文件 加入sshd192.168.1.
来源:oschina
链接:https://my.oschina.net/u/3115396/blog/3189958