防火墙

保护服务器的安全,还可以定义各种流量匹配的规则。

防火墙的作用

防火墙具有对服务器很好的保护作用,入侵者必须穿透防火墙的安全防护线才能解除到目标机器。

防火墙的功能

防火墙对经过它的流量进行一个扫描,这样就能过滤掉一些恶意的流量。以免再目标机器上被执行。
防火墙能阻挡关闭一些不常用的端口,禁止该端口的进出流量。

防火墙概念

linux下防火墙一般分为软件防火墙和硬件防火墙。
硬件:功能多,性能好,成本高。在硬件级别实现防火墙流量过滤功能。
软件:性能略差,成本低,在软件系统内核级别实现流量网络的过滤。

软件防火墙

在linux上提供的软件防火墙,名字叫做iptables,它是一个防火墙命令行工具,iptables还是一个客户端代理,通过iptables的代理,将用户配置的安全策略,执行到对应的安全框架中netfilter

iptables只是一个命令行工具,处于用户空间,离用户最近。

真正实现流量过滤的软件是netfilter,处于系统内核空间,和操作系统离得是最近的。
iptables+netfilter 共同组成了linux的软件防火墙。一般就用来替代昂贵的硬件防火墙。

centos7系统下 firewalld软件又替代了iptables
iptables是把用户配置的防火墙规则,交给内核层的netfile工具去处理。 firewalld服务把用户配置的防火墙规则,交给内核层的。

iptables

iptables就是按照规则办事的,由运维人员制定流量的出入把控。

查看防火墙规则

  1. [root@localhost ~]# iptables -L
  2. Chain INPUT (policy ACCEPT) #输入链 默认放行
  3. target prot opt source destination
  4. Chain FORWARD (policy ACCEPT)
  5. target prot opt source destination
  6. Chain OUTPUT (policy ACCEPT)
  7. target prot opt source destination

iptables默认会自上而下的读取防火墙规则,匹配到正确的规则后,就结束匹配的工作,并且执行对应的工作。如果读取的防火墙所有规则都没有符合,就执行默认的策略。

默认策略

默认策略一般分为两种:
允许和拒绝

  • 当默认的规则全部都是拒绝的时候,你就得设置一些允许通过的流量,否则所有的流量都禁止了,就没意义了
  • 当默认的规则全部都是允许的时候,就得设置一些禁止,决绝的匹配规则,以保证服务器的安全

防火墙的规则是默认存储在linux内核空间的信息包中,这些规则定义了源地址信息,目的地址信息,传输的协议类型,服务类型。
当数据包符号条件的时候,iptables就根据所定义的动作,来处理这些数据包,放行,拒绝,丢弃。

由内向外一般都是安全的,由外向内大多都是危险的。

iptables服务

iptables把用于处理和过滤流量的策略,称之为规则,多条规则就组成了一个规则链,并且规则链,还有默认的动作。规则链根据数据包所处的不同的位置进行不同的分类。

Linux默认5个规则链:

  • 路由选择前处理数据包,prerouting链
  • 处理流入的数据包,input链
  • 处理流出的数据包,output链
  • 进行路由选择后处理数据包,postrouting链

主要使用input链

动作

服务器流量在通过input链之后,进入到服务器内,还得遵循一些动作去处理这些数据包

  • Accept 允许数据包通过。
  • Reject 拒绝数据包通过,还会给客户端一个响应。
  • log 在linux系统的日志目录下,/var/log/message中记录防火墙日志,再进行下一个数据包处理
  • drop 直接丢弃数据包,不给于任何的回应,客户端会认为自己的请求被丢弃。直到请求报错结束。
  • SNAT 源地址转换,解决内网用户同用一个公网的问题,用于Forward链
  • DNAT 目标地址转换
  • Redirect 在本地做端口映射

iptables案例

1.查看本地iptables命令

  1. iptables -L

2.清空本地防火墙规则

  1. iptables -F

3.禁止服务器被ping 服务器拒绝ICMP协议流量

  1. #参数解释
  2. #-A 指定链
  3. #-p 指定协议
  4. #--icmp-type 8 指定ICMP协议的类型 8 为回显类型
  5. #-s 指定源IP网段
  6. #-j 指定动作
  7. iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j REJECT

4.删除指定的iptables规则

  1. iptables -D INPUT 1

5.服务器禁止ping,直接丢弃请求,不给于响应

  1. #-A 指定链
  2. #-p 指定协议
  3. #--icmp-type 8 #指定协议类型
  4. #-s 指定ip网段
  5. #-j 指定动作
  6. iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

6.禁止/允许访问服务器80端口

  1. iptables -A INPUT -p tcp --dport 80 -j DROP
  2. iptables -A INPUT -p tcp --dport 80 -j ACCEPT

7.禁止/允许服务器ftp端口被访问 21

  1. iptables -A INPUT -p tcp --dport 21 -j DROP
  2. iptables -A INPUT -p tcp --dport 21 -j DROP

8.指定允许的ip地址访问服务器22端口,指定客户端远程连接,拒绝所有其他流量

虽然我们拒绝了所有的22端口流量,但是iptables是自上而下的,所以我们是先局域网连接,后拒绝了所有。我们才能连接上的。

  1. 1、只允许某一个客户端连接该服务器的22端口
  2. iptables -A INPUT -s 192.168.218.0/24 -p tcp --dport 22 -j ACCEPT
  3. 2、具有其他所有流量
  4. iptables -A INPUT -s 0/0 -p tcp --dport 22 -j DROP

9.禁止指定机器访问本地80端口

  1. iptables -A INPUT -p tcp --dport 80 -s 192.168.218.0/24 -j REJECT

10.禁止所有的主机网段,访问8000到9000端口

  1. iptables -A INPUT -p tcp --dport 8000:9000 -j REJECT
  2. iptables -A INPUT -p udp --dport 8000:9000 -j REJECT