我的linux学习之路(第十一节)

橙三吉。 提交于 2020-03-08 12:33:56

(一)iptables与Firewalld防火墙

防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制。在RHEL7系统中,firewalld防火墙取代了iptables防火墙。iptables与firewalld都不是真正的防火墙,而是一种服务,是用来定义防火墙策略的防火墙管理工具。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。

防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。

1.1、iptables

iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:

  • 在进行路由选择前处理数据包(PREROUTING);即SNAT源地址转换
  • 处理流入的数据包(INPUT);WANàLAN
  • 处理流出的数据包(OUTPUT);LANàWAN
  • 处理转发的数据包(FORWARD);
  • 在进行路由选择后处理数据包(POSTROUTING);即DNAT目的地址转换

ACCEPT(允许流量通过)、REJECT(告诉对方拒绝流量通过)、LOG(记录日志信息)、DROP(不告诉对方拒绝流量通过)。其中,DROP(不告诉对方拒绝流量通过)直接将流量丢弃而且不响应;REJECT(告诉对方拒绝流量通过)则会在拒绝流量后再回复一条“您的信息已经收到,但是被扔掉了”信息,从而让流量发送方清晰地看到数据被拒绝的响应信息。

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

匹配目标端口号,格式:--dport num或--dport=num

--sport num

匹配来源端口号,格式:--sport num或--sport=num

[root@linuxprobe ~]# iptables -L

//查看规则链

[root@linuxprobe ~]# iptables -F

//清空规则链

[root@linuxprobe ~]# iptables -P INPUT DROP

//设置INPUT规则链的默认策略为拒绝DROP,其它拒绝的策略动作使用REJECT。使用-P参数后不再使用-j参数。

[root@linuxprobe ~]# iptables -I INPUT -p icmp -j ACCEPT

//向INPUT规则链中添加允许ICMP流量进入的策略规则

[root@linuxprobe ~]# iptables -D INPUT 2

//删除INPUT规则链中的策略(策略编号2)

[root@linuxprobe ~]# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport=22 -j ACCEPT

[root@linuxprobe ~]# iptables -I INPUT -p tcp --dport=22 -j REJECT

//将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量。

--dport后面可用=号跟端口号,也可用空格跟端口号。

 

[root@linuxprobe ~]# iptables -I INPUT -s 192.168.20.0/24 -d 192.168.10.10 -p tcp --dport=80 -j REJECT

//向INPUT规则链中添加拒绝192.168.20.0/24子网访问192.168.10.10的80端口(Web服务)的策略规则。

[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport=1000:2000 -j REJECT

[root@linuxprobe ~]# iptables -A INPUT -p udp --dport=1000:2000 -j REJECT

//向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则。如果要限制某个端口的全部流量则需要配置匹配TCP和UDP的流量。

注意:iptables命令配置的防火墙规则默认会在系统下一次重启时失效,如果想让配置的防火墙策略永久生效还要执行保存命令:[root@linuxprobe ~]#service iptables save

1.2、firewalld

RHEL7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。

firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。

firewall-config是firewalld防火墙配置管理工具的GUI(图形用户界面)版本。

区域(zone)是firewalld预先准备的防火墙策略集合(或策略模板)。用户可以根据场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

firewalld中常用的区域名称及策略规则(匹配从本机外部INPUT进入网卡的流量)

  • public:默认当前正在使用的区域。注:public、DMZ、external、internal区域只允许选中的服务通过。
  • trusted:默认允许所有流入的流量(没有开放任何服务)。
  • drop:默认拒绝所有流入的流量(任何流入网络的包都被丢弃,不作出任何响应,只允许流出的网络连接。即使开放了某些服务(比如http),这些服务的数据也是不允许通过)。

说明:默认情况下是允许所有类型的ICMP通过

1.2.1、firewalld防火墙配置管理工具CLI(命令行界面):firewall-cmd

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=<网卡名称>

将某个网卡与区域进行关联,与“--zone=区域”结合使用。

--list-all

显示当前区域的网卡配置参数、资源、端口以及服务等信息

--list-all-zones

显示所有区域的网卡配置参数、资源、端口以及服务等信息

--add-service=<服务名>

设置默认区域允许该服务的流量

--add-port=<端口号/协议>

设置默认区域允许该端口的流量

--remove-service=<服务名>

设置默认区域不再允许该服务的流量

--remove-port=<端口号/协议>

设置默认区域不再允许该端口的流量

--reload

让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

--panic-on

开启应急状况模式

--panic-off

关闭应急状况模式

firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加--permanent参数,这样配置的防火墙策略就可以永久生效,参需要系统重启之后才能自动永久生效。让配置的策略立即生效,需要手动执行firewall-cmd --reload命令。

//执行yum install firewalld命令进行安装

//启动:systemctl start firewalld
//关闭:systemctl stop firewalld
//查看状态:systemctl status firewalld
//查看状态:firewall-cmd --state
//开机启用:systemctl enable firewalld
//开机禁用:systemctl disable firewalld

//firewalld的默认区域配置文件位置在/etc/firewalld/zones/下的.xml文件中

[root@linuxprobe ~]# firewall-cmd --state

running

//查看firewall的运行状态

[root@linuxprobe ~]# systemctl status firewalld.service

firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)

   Active: active (running) since Sun 2020-03-08 11:20:14 CST; 22min ago

 Main PID: 1034 (firewalld)

   CGroup: /system.slice/firewalld.service

           └─1034 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

 

Mar 08 11:20:13 linuxprobe.com systemd[1]: Starting firewalld - dynamic firewall daemon...

Mar 08 11:20:14 linuxprobe.com systemd[1]: Started firewalld - dynamic firewall daemon.

//查看firewall服务状态

 

===========================================================

[root@linuxprobe ~]# firewall-cmd --set-default-zone=public

success

//设置firewalld服务默认所使用的区域。

[root@linuxprobe ~]# firewall-cmd --get-default-zone

public

//查看firewalld服务默认所使用的区域。

===========================================================

[root@linuxprobe ~]# firewall-cmd --set-default-zone=trusted

success

//设置firewalld服务当前所使用的区域为trusted。

[root@linuxprobe ~]# firewall-cmd --get-default-zone

trusted

//trusted区域设置成功。

===========================================================

[root@linuxprobe ~]# firewall-cmd --get-zones

block dmz drop external home internal public trusted work

[root@linuxprobe ~]# firewall-cmd --get-services

amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

[root@linuxprobe ~]# firewall-cmd --get-active-zones

public

  interfaces: eno16777736

===========================================================

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-source=192.168.20.0/24

Success

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-source=192.168.20.0/24

success

===========================================================

[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777736

external

//查询eno16777738网卡在firewalld服务中的区域。

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --change-interface=eno16777736

success

[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777736

external

[root@linuxprobe ~]# firewall-cmd --permanent --get-zone-of-interface=eno16777736

public

//把firewalld服务中eno16777736网卡的默认区域external修改为public,需要在系统重启后生效。分别查看当前与永久模式下的区域名称。

===========================================================

[root@linuxprobe ~]# firewall-cmd --panic-on

[root@linuxprobe ~]# firewall-cmd --panic-off

//启动或关闭firewalld防火墙服务的应急状况模式,阻断一切进出流量的网络连接(当远程控制服务器时请慎用)。

===========================================================

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=http

Success

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https

success

//把firewalld服务中请求http和https协议的流量设置为永久允许。

[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=http

no

[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https

no

//未立即生效前查询public区域是否允许请求http和https协议的流量。

[root@linuxprobe ~]# firewall-cmd --reload

Success

//立即生效

[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=http

Yes

[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https

yes

//立即生效前查询public区域是否允许请求http和https协议的流量。

===========================================================

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-service=http

success

[root@linuxprobe ~]# firewall-cmd --reload

Success

//把firewalld服务中请求HTTP协议的流量设置为永久拒绝,并立即生效。

===========================================================

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-port=8080-8090/tcp

success

[root@linuxprobe ~]# firewall-cmd --reload

success

[root@linuxprobe ~]# firewall-cmd --zone=public --list-ports

8080-8090/tcp

//把在firewalld服务中访问8080至8090端口的流量策略设置为允许,且立即生效。

===========================================================

端口转发(访问端口A时转发到端口B)配置:

命令格式:firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10

success

[root@linuxprobe ~]# firewall-cmd --reload

success

//把原本访问192.168.10.10主机888端口的流量转发到22端口,要求当前和长期均有效,并立即生效。

在客户端使用ssh命令尝试访问192.168.10.10主机的888端口:

[root@linuxprobe ~]#ssh -p 888 192.168.10.10

===========================================================

firewalld富规则(优先级在所有的防火墙策略中是最高的):

firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务/端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" destination address="192.168.10.10" service name="ssh" accept log level=warning audit"

success

[root@linuxprobe ~]# firewall-cmd --reload

success

//在firewalld服务中配置一条富规则,使其允许192.168.10.0/24网段的所有用户访问192.168.10.10主机的ssh服务(22端口),同时记录告警日志并审计。

1.2.2、firewalld防火墙配置管理工具GUI(图形用户界面):firewall-config

[root@linuxprobe ~]# firewall-config

选择运行时(Runtime)模式或永久(Permanent)模式配置。如要使配置的策略立即生效,可通过option菜单中的Reload Firewalld实现。

:可选的策略集合区域(策略或区域模板)列表。

:常用的系统服务列表,可在永久(Permanent)模式下自定义服务(先定义名称,在名称中再添加端口和协议)。

:当前正在使用的区域,可通过option菜单中的Change Default Zone进行修改。

:管理(选择为允许、不选为拒绝)当前使用区域被选中的服务。与对应。

:管理(自定义)当前被选中区域中的端口。

:开启或关闭SNAT(源地址转换)协议技术。

:设置端口转发策略,即客户端访问外部虚拟端口A转发到内部真实端口B

:控制请求icmp服务的流量。

:管理防火墙的富规则。如:服务或端口、协议、端口转发、SNAT源地址转换,ACCEPT允许或REJECT拒绝的动作,源和目标地址,是否记录日志及日志的级别,是否审计。

:管理网卡设备。把网卡与区域(策略)进行绑定。

:被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与该服务相关的流量。与对应。

:firewall-config工具的运行状态。默认区域(可通过option菜单中的Change Default Zone进行修改),应急状况模式(Panic Mode)是否启用(enabled或disabled)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!