linux 防火墙与端口学习(一)(私房菜服务器篇)

TCP/IP数据包进入主机的流程:   (协议层拆解肯定就不细说了,这个在计算机网络就有,现在学的是操作系统)

                                      linux 防火墙与端口学习(一)(私房菜服务器篇)_第1张图片

linux有两层防火墙:

     1.  封包过滤防火墙:IP Filtering或Net Filter
要进入Linux本机的封包都会先通过Linux核心的预设防火墙,就是称为netfilter的咚咚,简单的说,就是 iptables这个软体所提供的防火墙功能。为何称为封包过滤呢?因为他主要是分析TCP/IP的封包表头来进行过滤的机制,主要分析的是OSI的第二、三、四层,主要控制的就是MAC, IP, ICMP, TCP与UDP的埠口与状态(SYN, ACK...)等

     2.第二层防火墙:TCP Wrappers
通过netfilter之后,网路封包会开始接受Super daemons及 TCP_Wrappers的检验,那个是什么呢?说穿了就是/etc/hosts.allow与/etc/hosts.deny的设定档功能啰。这个功能也是针对TCP的Header进行再次的分析,同样你可以设定一些机制来抵制某些IP或Port ,好让来源端的封包被丢弃或通过检验;

PS:透过防火墙的管控,我们可以将大部分来自网际网路的垃圾连线丢弃,只允许自己开放的服务的连线进入本机

 

即使预设的防火墙是Linux的内建功能,但防火墙主要管理的是MAC, IP, Port等封包表头方面的资讯,如果想要控管某些目录可以进入,某些目录则无法使用的功能,那就得要透过权限以及伺服器软体提供的相关功能了。举例来说,你可以在httpd.conf这个设定档之内规范某些IP来源不能使用httpd这个服务来取得主机的资料,那么即使该IP通过前面两层的过滤,他依旧无法取得主机的资源喔!但要注意的是, 如果httpd这支程式本来就有问题的话,那么client端将可直接利用httpd软体的漏洞来入侵主机,而不需要取得主机内root的密码!因此主机开启的服务也可能存在漏洞。

因此躲避服务漏洞攻击的做法:

  • 关闭不需要的网路服务:开的port越少,可以被入侵的管道越少,一部主机负责的服务越单纯,越容易找出问题点。
  • 随时保持更新:这个没话讲!一定要进行的!
  • 关闭不需要的服务功能。

常见端口列表:

                        linux 防火墙与端口学习(一)(私房菜服务器篇)_第2张图片

端口:

特权端口 : 需要取得root权限的端口 , 值小于1024

浏览器发送数据访问时,特定的80端口(通讯规范)就是httpd服务,而client则是用户这边的系统随机一个端口,不属于特权,端口值大于1024。

所谓的『监听』是某个服务程式会一直常驻在记忆体当中,所以该程式启动的port就会一直存在。只要伺服器软体启动的埠口不同,那就不会造成冲突。当用户端连接到此伺服器时,透过不同的埠口,就可以取得不同的服务资料啰。

端口查看命令: netstat  [-tulnp]

linux 防火墙与端口学习(一)(私房菜服务器篇)_第3张图片

端口也是一个程序,要关闭端口直接用kill 命令即可。

查看时,像 0.0.0.0:22     这样的IP/端口信息很多,这些网路服务其实仅针对本机的IO开放而已,网际网路是连接不到该埠口与服务的。

虽然端口也是一种程序,可以kill掉,但也可以通过停掉服务程序的方式关掉这个端口,直接systemctl stop 服务则对应的端口就关闭了。

因此,启动端口也就启动相应服务就可以了,一样使用systemctl系统服务命令工具。

 

防火墙:

                           相较于企业内网,外部的公网环境更加恶劣,罪恶丛生。在公网与企业内网

                           之间充当保护屏障的防火墙虽然有软件或硬件之分,但主要功能都是依据策略对

                           穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源目地址、端口号、协议、应用

                           等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略

                           规则相匹配,则执行相应的处理,反之则丢弃。这样一来,就可以保证仅有合法的流量在企业

                           内网和外部公网之间流动了。

             注意:RHEL 7 系统中,firewalld 防火墙取代了 iptables 防火墙。所以,只要学习这一款工具就足够了。因为配置防火墙的策略思想基本是一样的。

防火墙中的策略是从上到下加载的,并且当策略默认是拒绝所有流量时,就要设置某些放行(否则全部拒绝),默认放行流量时,就要设置拒绝(否则全部放行)。

linux 防火墙与端口学习(一)(私房菜服务器篇)_第4张图片

linux 防火墙与端口学习(一)(私房菜服务器篇)_第5张图片

linux 防火墙与端口学习(一)(私房菜服务器篇)_第6张图片

linux 防火墙与端口学习(一)(私房菜服务器篇)_第7张图片

 

 

查看 firewalld 服务当前所使用的区域:

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

public

查询 eno16777728 网卡在 firewalld 服务中的区域:

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

public

firewalld 服务中 eno16777728 网卡的默认区域修改为 external,并在系统重启后生效。分

别查看当前与永久模式下的区域名称:

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

eno16777728

success

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

public

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

external

firewalld 服务的当前默认区域设置为 public

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

success

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

public

启动/关闭 firewalld 防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器

时请慎用):

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

success

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

success

查询 public 区域是否允许请求 SSH HTTPS 协议的流量:

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

yes

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

no

firewalld 服务中请求 HTTPS 协议的流量设置为永久允许,并立即生效:

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

success

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

success

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

success

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

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

success

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

success

把在 firewalld 服务中访问 8080 8081 端口的流量策略设置为允许,但仅限当前生效:

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

success

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

8080-8081/tcp

把原本访问本机 888 端口的流量转发到 22 端口,要且求当前和长期均有效:

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

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

[root@client A ~]# ssh -p 888 192.168.10.10

The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't

be established.

ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts.

[email protected]'s password: root

Last login: Sun Jul 19 21:43:48 2017 from 192.168.10.10

firewalld 中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端

口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防火

墙策略中也是最高的。比如,我们可以在 firewalld 服务中配置一条富规则,使其拒绝

192.168.10.0/24 网段的所有用户访问本机的 ssh 服务(22 端口):

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="

rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"

success

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

success

在客户端使用 ssh 命令尝试访问 192.168.10.10 主机的 ssh 服务(22 端口):

[root@client A ~]# ssh 192.168.10.10

Connecting to 192.168.10.10:22...

Could not connect to '192.168.10.10' (port 22): Connection failed.

tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind

你可能感兴趣的:(linux,编程大白)