一、防火墙


简介

  • 防火墙:通过硬件或软件限制非法用户访问资源,可预防DDos、检测***
  • 防火墙工作在传输层(通过对不用软件标识所采用协议及端口、接收方采用相同协议及端口打开数据)

分类

  • 硬件级防火墙:绿盟、深信服、天融信、思科华为等
  • 软件防火墙:Windows Defender(Windows)、iptables(Centos6)、firewalld(Centos7)

二、iptables概述


  • iptables是Linux 内核集成的 IP 信息包过滤系统,如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
  • 防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
  • 虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
  • netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
  • iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

1.iptables组成

  • netfilter:Linux内核模块,提供防火墙功能,但用户不可直接干预;内核态

  • iptables:一种防火墙规则编写工具(类似于CMOS与BIOS之间关系),修改的操作都写入到netfilter中;用户态

2.iptables的四表五链

四表:针对不同的功能


  • raw:状态跟踪; raw PREROUTING raw OUTPUT

  • mangle:标记; mangle INPUT mangle PREROUTING mangle POSTROUTING mangle FORWARD mangle OUTPUT

  • nat:地址转换;修改包IP、端口等实现上网等需求 nat PREROUTING nat POSTROUTING nat OUTPUT

  • filter:地址过滤; filter INPUT filter OUTPUT filter FORWARD

五链:针对不同时机


  • INPUT:入站数据包,过滤指定包到达本地服务器
  • OUTPUT:出站数据包,一般不做控制,全部放心
  • FORWARD:转发数据包,一般用于网关型防火墙,用于实现数据转发
  • PREROUTING:路由前数据包,用于在网关型防火墙下,实现DNAT,用于将内部主机发布到公网,公网用户访问
  • POSTROUTING:路由后数据包,用于网关型防火墙下,实现SNAT,用于内部主机共享独立公网IP,实现内网上网需求

PREROUTING(路由前)详解:DNAT

前提:内网服务器192.168.1.10/24:80通过路由转换到公网地址200.0.0.1/24:80

有一个公网的客户端200.0.0.222想访问我内网服务器192.168.1.10

请求到达网关路由器,在路由前(PREROUTING)转换IP为内网地址

客户端访问到内网服务器

POSTROUTING(路由后)详解:SNAT

前提:内网客户端192.168.1.10/24想通过地址转换到公网地址200.0.0.1/24

客户端192.168.1.10想访问公网200.0.0.0/24

请求到达网关路由器,在路由后(POSTROUTING)转换IP为公网地址

客户端访问公网

3.iptables匹配顺序

(1)表:raw --> mangle --> nat --> filter (2)链:

  • 入站:PREROUTING --> INPUT
  • 出战:OUTPUT --> POSTROUTING
  • 转发:PREROUTING --> FORWARD --> POSTROUTING
  • 普通服务器:INPUT
  • 网关:PREROUTING、POSTROUTING、FORWARD

三、iptables规则编写


格式

iptables [ -t 表名 ] 选项 [ 链名 ] [ 匹配条件 ] [ -j 控制类型 ]

选项

-A:链中最后增加一条 -I:链中最开始增加一条 -D:删除指定链 -L:列表显示所有规则 -n:以数字显示端口、IP等 -v:详细信息显示 -P:指定默认规则 --line-numbers:显示规则的序号

控制类型

ACCEPT:允许 REJECT:拒绝 DROP:丢弃 LOG:日志

匹配条件

1.通用匹配 -p:协议(tcp、udp、icmp) -s:源地址 -d:目标地址 -i:入口网卡 -o:出口网卡

2.隐含匹配(需配合-p选项) --dport:目标端口 --sport:源端口 --icmp-type:icmp协议类型;0(回显)、3(网络不可达)、8(请求) --tcp-flages:TCP标记

3.显式匹配 -m multiport --sports:源端口列表 -m multiport --dports:目标端口列表 -m iprange --src-range:IP地址范围 -m mac --mac-source:MAC地址 -m state --state:连接状态;NEW(DROP)、ESTABLISHED(ACCEPT)、RELATED(ACCEPT)

*** 通用匹配案例:**

/etc/init.d/iptables stop //清空默认规则

vim clean_iptables.sh #!/bin/bash iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -t raw -F iptables -t raw -X iptables -t security -F iptables -t security -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT

iptables -t filter -I INPUT -s 192.168.12.0/24 -p icmp -j ACCEPT //允许192.168.12.0网段使用icmp协议访问

iptables -t filter -P INPUT DROP //设置默认INPUT链为拒绝

*** 隐含匹配案例:**

/etc/init.d/iptables stop

iptables -t filter -I INPUT -p tcp --dport 22 -s 192.168.12.0/24-j ACCEPT //允许192.168.12.0网段访问本机的22端口

iptalbes -t filter -P INPUT DROP

*** 显式匹配案例:**

/etc/init.d/iptables stop

iptables -t filter -I INPUT -p icmp --icmp-type 0 -j ACCEPT

iptables -t filter -I INPUT -p icmp --icmp-type 3 -j ACCEPT

iptables -t filter -I INPUT -p icmp --icmp-type 8 -j DROP

iptalbes -t filter -P INPUT DROP

//服务器可以ping外部,但外部不可ping服务器

四、案例


个人电脑(Linux)

/etc/init.d/iptables stop iptables -t filter -I INPUT -i lo -j ACCEPT iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP /etc/init.d/iptables save //保存当前防火墙配置;/etc/sysconfig/iptables chkconfig --level 35 iptables on

服务器(Linux)

/etc/init.d/iptables stop iptables -t filter -I INPUT -i lo -j ACCEPT iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT iptables -t filter -A INPUT -p udp -m multiport --dports 53 -j ACCEPT iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP /etc/init.d/iptables save //保存当前防火墙配置;/etc/sysconfig/iptables chkconfig --level 35 iptables on

  • 可根据自己的需要自行更改iptables规则