iptables防火墙

一、Linux防火墙:

  • Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。
  • 体现在对包内的 IP 地址、端口等信息的处理上
  • Linux 系统的防火墙基于内核编码实现,具有非常稳定的性能和极高的效率,也因此获得广泛的应用

  1.iptables概述:

  • Linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件 netfilter和 iptables 组成。
  • 主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。

  2.netfilter/iptables关系:

  1. netfilter:属于“内核态”(Kernel Space, 又称为内核空间)的防火墙功能体系。 是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。
  2. iptables:属于“用户态”(User Space,又称为用户空间)的防火墙管理体系。 是一种用来管理Linux防火墙的命令程序,它使插入,修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。

二、iptables的四表五链:

     表中有链,链中有规则

   1.四表:

raw:主要用来决定是否对数据包进行状态跟踪 包含两个规则链,OUTPUT、PREROUTING

mangle :  修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING

nat:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。

filter:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个链,即INPUT、FORWARD、 OUTPUT

   2.五链:

INPUT:  处理入站数据包,匹配目标IP为本机的数据包。

OUTPUT:  处理出站数据包

FORWARD:  处理转发数据包,匹配流经本机的数据包。

PREROUTING链:  在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。
相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。

POSTROUTING链:  在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。
相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。

三、iptables用法:

  1.安装使用:

  Centos 7默认使用firewalld防火墙,没有安装iptables, 若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables

      使用前要把firewalld服务关闭

systemctl stop firewalld.service
systemctl disable firewalld.service
yum -y install iptables iptables-services

systemctl enable --now iptables.service  #开机自启,并现在启动

  2.iptables格式:

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

    2.1 管理选项:

-A  在指定链的末尾添加(append)一条新的规则

-D  删除(delete)指定链中的某一条规则,可以按规则序号和内容删除

-I  在指定链中插入(insert)一条新的规则,默认在第一行添加

-R  修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换

-L  列出(list)指定链中所有的规则进行查看

-E  重命名用户定义的链,不改变链本身

-F  清空(flush)

-N  新建(new-chain)一条用户自己定义的规则链

-X  删除指定表中用户自定义的规则链(delete-chain)

-P  设置指定链的默认策略(policy)

-Z 将所有表的所有链的字节和数据包计数器清零

-n  使用数字形式(numeric)显示输出结果

-v  查看规则表详细信息(verbose)的信息

-V  查看版本(version)

-h  获取帮助(help)

   2.2 匹配条件:

-s  原地址 单个地址 
-d  目的地址 同上
-p  指定协议,icmp  tcp  udp  ipv6
-i  数据从哪网口进来
-o  数据从哪个口出去
-j  跳转

   2.3 控制类型:

ACCEPT	    允许数据包通过

DROP	    直接丢弃数据包,不给出任何回应消息

REJECT	    拒绝数据包通过,会给数据发送端一个响应信息

SNAT	    修改数据包的源地址

DNAT	    修改数据包的目的地址

MASQUERADE	伪装成—个非固定公网IP地址

LoG	        在/varlog/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助 
            动作,并没有真正处理数据包

  3.规则链内的匹配顺序:

  • 自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
  • 要么放行,要么丢弃
  • 若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

  4.三种报文流向:

  • 流入本机:PREROUTING --> INPUT-->用户空间进程

  • 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING

  • 转发:PREROUTING --> FORWARD --> POSTROUTING

四、实际操作:

  1.查询:

iptables -vnL         #查看规则表,不指定  默认filter表

iptables -t nat -vnL  #查看nat表规则

iptables防火墙_第1张图片

  2.添加规则:

       表内的规则从上到下执行

iptables -t filter -A INPUT -p icmp -j REJECT

## 禁止icmp协议入站,本机的ping也被禁止

iptables防火墙_第2张图片

iptables防火墙_第3张图片

  3.删除、替换、清空:

    3.1 替换:

iptables -A INPUT -s 192.168.88.128 -j REJECT

ptables -R INPUT 1 -s 192.168.88.128 -j ACCEPT
 ## 替换上面的规则,注意加行号  -R

iptables防火墙_第4张图片

    3.2 删除:

iptables -D INPUT 1    #删除指定行


iptables -D INPUT -p icmp -j DROP

#将含有icmp协议使用DROP类型的规则删除

iptables防火墙_第5张图片

   3.3 清空:

iptables [-t 表] -F

## 不指定,默认清空filter表

iptables防火墙_第6张图片

4.设置默认规则:

iptables -P INPUT DROP

#默认规则设置为DROP

   设置后默认不通过所有访问

五、iptables备份与还原:

iptables-save  > /data/iptables.bak  ##备份

iptables-restore  < /data/iprule     ##还原

可以把还原文件写到  
 
/etc/rc.d/rc.local  ;  chmod +x /etc/rc.d/rc.local   

 或者 ~/.bashrc

开机自动执行

六、匹配规则:

   1. 禁止icmp协议:

iptables -A INPUT -s 192.168.91.101 -p icmp --icmp-type 8 -j REJECT

##上面禁止icmp,导致本机的ping不可用 

拒绝icmp的请求包,这样可以保证本机ping的使用

      拒绝icmp的请求包,可以保证本机ping的使用

iptables防火墙_第7张图片

iptables防火墙_第8张图片

   2.  指定端口号:

iptables -I INPUT 2 -s 192.168.88.128 -p tcp --dport 80 -j REJECT

## 2表示插入在第二行  禁止128访问目标主机的80端口

iptables防火墙_第9张图片

 

 3.设置白名单:

     这种方式相比较默认规则,清空不会影响连接  

iptables -A INPUT -s 192.168.88.128 -j ACCEPT

iptables -A INPUT -j REJECT  

# 手动白名单 最后加上拒绝所有

想设置允许访问机器在iptables -A INPUT -j REJECT 前插入

iptables防火墙_第10张图片

4.string 字符串:

iptables -A INPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "www.baidu.com" -j REJECT

##限制有www.baidu.com字段的通过

##也可以在服务端的出口限制字段

iptables防火墙_第11张图片

 

  5. 状态匹配state:

状态类型

  • NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求

  • ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态

  • RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系

  • INVALID:无效的连接,如flag标记不正确

  • UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪

ipatables  -A INPUT -m state --state   NEW            -j  REJECT

ipatables  -A INPUT  -m state --state  ESTABLISHED    -j   ACCEPT

##新用户不可以访问  老用户可以访问 

6.注意事项:

  1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高

  2. 谨慎放行入站的新请求

  3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝

  4. 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理

  5. 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更高

  6. 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率

  7. 设置默认策略,建议白名单(只放行特定连接)

    A:iptables -F,不建议,容易出现“自杀现象”

    B:规则的最后定义规则做为默认策略,推荐使用,放在最后一条

你可能感兴趣的:(服务器,网络,linux)