• linux 防火墙介绍以及iptables的使用


    背景介绍

            在前几天,于工发现我们内部的150服务器7554端口被外网访问了。该应用提供着内部的摄像头资源。为了避免被入侵,于是我添加了一些iptables规则,防止外网的访问。

    解决方式

    解决方式有两种:

    • 关闭公司公网路由器对150服务器进行端口映射
    • 在150服务器上进行iptables的规则设置,只允许内部网段进行访问。

    对于第一种方式,只要将路由器上对应的端口映射关闭即可,不需要做其他操作。

    第二种方式,需要在150上进行设置:

    1. iptables -I INPUT -p tcp --dport 7554 -j DROP
    2. iptables -I INPUT -s 192.168.18.0/24 -p tcp --dport 7554 -j ACCEPT
    3. iptables -I INPUT -s 180.168.172.70 -p tcp --dport 7554 -j ACCEPT
    4. service iptables save

    第一条命令:在INPUT链中,将所有TCP协议,目的端口是7554的数据包,全部丢掉
    第二条命令:在INPUT链中,将源IP为192.168.18.0/24网段,传输协议为TCP,目标端口是7554的数据包接收
    第三条命令:和第二条类似,只不过接受的是某一个具体源IP。
    第四条命令:保存设置,否则重启之后就不再生效。

            iptables可通过 -t 来选择表,内建的规则表有三个,分别是:nat、mangle 和 filter。若没有指定,则默认为filter表。

            至此,问题就解决了。但是在过程中,发现自己对netfilter表不熟悉了,iptables命令使用的也不熟练。顺便回顾一遍。

    netfilter的四表五链

    linux的防火墙其实就是netfilter。它主要包含以下四表五链:
    filter表:过滤数据包
    Nat表: 用于网络地址转换
    Mangle表: 修改数据包的服务类型,TTL,并且可以配置路由器实现QOS
    RAW表: 决定数据包是否被状态跟踪器机制处理

    四张表的由优先级:raw>mangle>nat>filter

    INPUT链:进来的数据包应用此规则链中的策略
    OUTPUT链:外出的数据包应用此规则链中的策略
    FORWARD链: 转发数据包时应用此规则链中的策略
    PREROUTING链:对数据包做路由选择前应用此链中的规则
    POSTROUTING链: 对数据包作路由器选择后应用此链中的规则

    netfilter图可参考以下:

    由图可知:
    RAW(conntrack)表在PREROUTING和OUTPUT链中
    mangle表在五链中都有
    nat表存在PREROUTING和OUTPUT和POSTROUTING链中
    filter表存在FORWARD和INPUT,OUTPUT链中。

    iptables介绍

            iptables只是一个应用工具。通过对netfilter的介绍,我们知道linux的防火墙框架就是netfilter。但是它是处于内核空间的,我们无法直接去控制。而iptables就是应用层的工具。

            由于iptables内容较多,我这里主要通过几个例子来介绍。能够达到看懂命令,根据需求去搜索资料即可。

    iptables的命令格式如下:

    1. iptables command chain rule-specification [options]
    2. //chain 指哪一条链

    command

    -APPEND (-A):表示附加,它会将规则添加到已有防火墙链中的末尾。规则在防火墙链中的位置很重要,因为在一般情况下,防火墙链中的最后一条是丢弃所有包。很可能导致新建规则无效

    -DELETE (-D):表示删除规则。一般使用iptables -D chain rulenum,删除chain中编号是rulenum的规则

    -INSERT (-I):表示插入规则。一般使用iptables -I chain [rulenum] firewall-rule,在chain中的添加规则为第rulenum条。后面的规则全都加1.若没有指定rulenum,默认是第一条

    -LIST (-L):列出规则,一般使用iptables -L --line-numbers

    -FLUSH (-F):清空规则。一般使用iptables -F [chain],清空chain中的规则。若没有指定chain,则全部清空。

    options

    -P 代表协议。若不指定定协议,则默认为all。/etc/protocols文件包含了所支持的协议和值。

    -S 代表源地址。可以是ip,网路地址或主机名。若不指明源地址,则匹配所有源地址

    -D 代表目的地址。和-S相似。

    -J 表示跳转。指当某个数据包满足该规则时就跳转到写一个处理规则。不再继续顺序处理后面的规则判断。处理规则一般有:ACCEPT,DORP,QUEUE,RETURN。分别表示接受,丢弃,进入队列,返回。

    -I 表示进入的网络接口。比如:-I eth0,表示该规则主要针对eth0接口进入的数据包。

    -O 代表出站网络接口,和-I相似。

    -SPORT 表示源端口。可以指定端口号或端口名称。在/etc/service文件中包含了所有允许的端口和对应的端口号(内容很多)。

    -DPOT 表示目的端口。和-SPORT相似。

    练习

    基本的iptables的语法已经介绍完了,通过几个例子,更快的上手。

    1. 删除现有规则。iptables -F
    2. 阻止一个特定的IP地址。iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
    3. 允许所有传入SSH。
    1. iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    2. iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

    4.将来自422端口的流量全部转到22端口。

    iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

     

     若我的内容对您有所帮助,还请关注我的公众号。不定期分享干活,剖析案例,也可以一起讨论分享。
    我的宗旨:
    踩完您工作中的所有坑并分享给您,让你的工作无bug,人生尽是坦途

  • 相关阅读:
    嵌入式软件工程师面试题(三)
    面向对象——封装
    【PAT(甲级)】1042 Shuffling Machine
    在线 sha1 加密
    javascript 正则表达式匹配替换
    LabVIEW进行MQTT通信及数据解析
    pdf怎么转换成jpg图片?收藏这几种方法
    刘二大人 PyTorch深度学习实践 笔记 P7 处理多维特征的输入
    以周一为每周的第一天,计算周数
    测试的分类
  • 原文地址:https://blog.csdn.net/xieyihua1994/article/details/133920596