• 【无标题】


    一.前言

    其实在IT行业里了,不仅是专职的运维人员需要了解iptables,开发、测试等人员在了解系统架构,环境搭建等过程中也是需要多多少少对iptables进行简单的认识与了解的,这样才能在更快的了解架构,环境配置,才能在实际过程中出了问题能有效的排除网络防火墙等原因,iptables就是系统里的防火墙,所有数据的进入都是要经过iptables符合其一定的规则才能流入或流出。我是一位测试人员,对iptables的了解也仅限于表面,认识,够用就行。本文就是针对对iptables了解不多,需要知道其基本原理,数据包处理流向及常用的配置设置等进行总结叙述,以达到在最短的时间内找到所需求的知识,进行常规配置操作。

    二. iptables简介

    IPTABLES在Linux内核为3.5版本集成了 IP 信息包过滤,在系统是Red Hat Linux 7.1 或更高版中自带有此工具无需下载安装,如果是低于7.1版本则需要下载安装才能正常使用。

    防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

    虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。

    netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

    iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息端口
    包过滤表中的规则变得容易。端口

    三. iptables原理

    在网上看了一些资料,汇总了主要核心内容,iptables主要原理:四表五链。只需要知道明白以下几个问题,在平常操作中基本够用了。

    1.iptables四表五链,指的是那些表,那些链?

    2.每个链的作用是什么,每个链中包含那些表?

    3.在同一链中表之间的优先级?

    4.同一类表都作用于那些链中?

    5.整体的数据流向的处理过程大致是什么?

    把上面的问题了解后基本上对iptables也就有了大致的了解了。方便快速的认识与理解,我把以上所要了解的信息都汇总到一个图上,结合图表会更容易理解与记忆。
    在这里插入图片描述

    四. iptables设置规则

    了解了原理再了解一下设置规则,基本上就可以上手实操练习或是看懂他们设置的规则不是什么难事了。话不多说,还是方便快速的理解与记忆,规则就一条信息,基本语法格式:

    iptables [ -t 表名 ] 命令选项 [ 链名 ] [ 条件匹配 ] [ -j 目标动作或跳转 ]
    里面的项,具体信息全在下面的表格里了。

    在这里插入图片描述

    五. Linu常用实例

    原理、规则已经介绍完了,接下来就是实例,照着实例操作一遍加深理解记忆,也算是上手了。以下列出了常用的操作实例。

    1.删除所有现有规则

     iptables -F
    
    • 1

    2.设置默认的 chain 策略

    iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT DROP
    
    • 1

    3.阻止某个特定的 IP 地址#BLOCK_THIS_IP=“x.x.x.x”#

     iptables -A INPUT -s$BLOCK_THIS_IP-j DROP
    
    • 1

    4.允许全部进来的(incoming)SSH

     iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    
    • 1

    5.只允许某个特定网络进来的 SSH

     iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    
    • 1
    • 2

    6.允许进来的(incoming)HTTP

     iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
    
    • 1

    7.多端口(允许进来的 SSH、HTTP 和 HTTPS)

    iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
    
    • 1

    8.允许出去的(outgoing)SSH

    iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    
    • 1

    9.允许外出的(outgoing)SSH,但仅访问某个特定的网络#

    iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    
    • 1
    • 2

    10.允许外出的(outgoing) HTTPS

    iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
    
    • 1

    11.对进来的 HTTPS 流量做负载均衡

    iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
    
    iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
    
    iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
    
    • 1
    • 2
    • 3
    • 4
    • 5

    12.从内部向外部 Ping

    iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
    
    • 1

    13.从外部向内部 Ping

    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    
    • 1

    14.允许环回(loopback)访问

     iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT
    
    • 1

    15.允许 packets 从内网访问外网if eth1 is connected to external network (internet)if eth0 is connected to internal network (192.168.1.x)

     iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
    
    • 1

    16.允许外出的 DNS

    iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPTiptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
    
    • 1

    17.允许 NIS 连接 #rpcinfo -p | grep ypbind ; This port is 853 and 850

    iptables -A INPUT -p tcp --dport 111 -j ACCEPT
    
    iptables -A INPUT -p udp --dport 111 -j ACCEPT
    
    iptables -A INPUT -p tcp --dport 853 -j ACCEPT
    
    iptables -A INPUT -p udp --dport 853 -j ACCEPT
    
    iptables -A INPUT -p tcp --dport 850 -j ACCEPT
    
    iptables -A INPUT -p udp --dport 850 -j ACCEPT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    18.允许某个特定网络 rsync 进入本机

    iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
    
    • 1
    • 2

    19.仅允许来自某个特定网络的 MySQL 的链接

    iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
    
    • 1
    • 2
    • 3

    20.允许 Sendmail 或 Postfix

    iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
    
    • 1

    21.允许 IMAP 和 IMAPS

    iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
    
    iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    22.允许 POP3 和 POP3S

    iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
    
    iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    23.防止 DoS 攻击

    iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    
    • 1

    24.设置 422 端口转发到 22 端口

    iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
    
    iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
    
    • 1
    • 2
    • 3
    • 4
    • 5

    25.为丢弃的包做日志(Log)

    iptables -N LOGGINGiptables -A INPUT -j LOGGINGiptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7iptables -A LOGGING -j DROP
    
    • 1

    六. 注意事项

    6.1.命令书写规则:

    所有链名必须大写

        INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
    
    • 1

    所有表名必须小写

        filter/nat/mangle
    
    • 1

    所有动作必须大写

        ACCEPT/DROP/SNAT/DNAT/MASQUERADE
    
    • 1

    所有匹配必须小写

        -s/-d/-m/-p
    
    • 1

    6.2. 谨慎使用的动作 DROP

    这个动作是抛弃所有的包,此动作后的所有规则执行的包将会被自动过滤掉,即不生效。所在在使用时小心自己把自己关在防火墙外。

    想生效的规则动作要放在DROP前。

    iptables规则是顺序执行的,为减少资源使用率高的规则放在最前面。

    6.3. 永久生效

    默认iptables设置的防火墙规则会立即生效,但重启后失效。

    永久生效就要把规则放到iptables配置文件里,设置开机自启动。

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT   #开启tcp协议的22端口
    
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT   #开启udp协议的22端口
    
    iptables-save > /etc/sysconfig/iptables  #保存规则
    
    systemctl enable iptables       #开机自启动
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果您觉得此文对您有帮忙就顺手点个**,给予我继续写作下去的精神支持;

    如果您对此文有疑问需要讨论或是解答的问题,请留言。

  • 相关阅读:
    03.操作系统内存管理
    GO语言篇之WebAssembly
    Spring Bean 详解
    论文阅读--Diffusion Models for Reinforcement Learning: A Survey
    MATLAB2016笔记(五):进阶矩阵操作
    外包干了3个月,技术退步明显。。。。。
    pytorch基础学习(1)
    Java Double isInfinite(double v)方法具有什么功能呢?
    染色法判断二分图
    强转对象方法
  • 原文地址:https://blog.csdn.net/sunnygirltest/article/details/128075015