zoukankan      html  css  js  c++  java
  • 【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作

    1、黑白名单
    当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是"黑名单"机制。
    当链的默认策略为DROP时,链中的规则对应的动作应该为ACCEPT,表示只有匹配到规则的报文才会被放行,没有被规则匹配到的报文都会被默认拒绝,这就是"白名单"机制。
    如果使用白名单机制,我们就要把所有人都当做坏人,只放行好人。如果使用黑名单机制,我们就要把所有人都当成好人,只拒绝坏人。白名单机制似乎更加安全一些,黑名单机制似乎更加灵活一些。

    白名单机制设置技巧:默认策略设置为ACCEPT,先将放行规则放在前面,最后插入一条拒绝所有报文的规则。不是将默认策略设置为DROP,否则管理员都登录不进去。
    eg:
    iptables -P INPUT ACCEPT
    iptables -I INPUT -p tcp --dport 22 -j ACCEPT
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -j REJECT

    2、自定义链
    自定义一条链,链名叫IN_WEB,我们可以将所有针对80端口的入站规则都写入到这条自定义链中,当以后想要修改针对web服务的入站规则时,就直接修改IN_WEB链中的规则就好了;
    同理,可以将针对sshd的出站规则放入到OUT_SSH自定义链中,将针对Nginx的入站规则放入到IN_NGINX自定义链中,这样,我们就能想改哪里改哪里,再也不同担心找不到规则在哪里了。
    (1)新建
    #新建名字为IN_WEB的自定义链
    iptables -t filter -N IN_WEB

    (2)引用
    让自定义链生效,需要用默认链引用自定义链,-j后面不是动作而是自定义链
    eg:
    iptables -I INPUT -p tcp --dport 80 -j IN_WEB

    (3)修改
    #将自定义链IN_WEB名字改为WEB
    iptables -E IN_WEB WEB

    (4)删除
    #删除自定义链WEB
    iptables -X IN_WEB WEB
    删除自定义链要满足两个条件:
    (4.1)自定义链没有被任何默认链引用,即自定义链的引用计数为0,否则报错:Too many links
    eg:iptables -D INPUT 1
    (4.2)自定义链中没有任何规则,即自定义链为空,否则报错:Directory not empty
    eg:iptables -t filter -F WEB

    3、网络防火墙
    防火墙从逻辑上讲,可以分为主机防火墙与网络防火墙。
    主机防火墙:针对于单个主机进行防护,起作用的是INPUT链与OUTPUT链;
    网络防火墙: 往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。
    网络防火墙的职责就是"过滤并转发",要想"过滤",只能在INPUT、OUTPUT、FORWARD三条链中实现,要想"转发",报文则只会经过FORWARD链(发往本机的报文才会经过INPUT链),所以,iptables的角色变为"网络防火墙"时,规则只能定义在FORWARD链中。


    上图中,橘黄色主机为iptables所在主机,iptables充当网络防火墙的角色,浅蓝色圆形表示网络防火墙所防护的网络区域,圆形内的蓝色矩形表示网络内的主机。
    当外部网络中的主机与网络内部主机通讯时,不管是由外部主机发往内部主机的报文,还是由内部主机发往外部主机的报文,都需要经过iptables所在的主机,由iptables所在的主机进行"过滤并转发",所以,防火墙主机的主要工作就是"过滤并转发"。

    网络防火墙设置
    (1)开启网络防火墙的转发功能
    #如果想要iptables作为网络防火墙,iptables所在主机开启核心转发功能,以便能够转发报文。
    #使用如下命令查看当前主机是否已经开启了核心转发,0表示为开启,1表示已开启
    cat /proc/sys/net/ipv4/ip_forward
    #使用如下两种方法均可临时开启核心转发,立即生效,但是重启网络配置后会失效。
    方法一:echo 1 > /proc/sys/net/ipv4/ip_forward
    方法二:sysctl -w net.ipv4.ip_forward=1
    #使用如下方法开启核心转发功能,重启网络服务后永久生效。
    配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中将 net.ipv4.ip_forward设置为1

    (2)配置防火墙FORWAED链规则
    #示例为允许网络内主机访问网络外主机的web服务与sshd服务。
    iptables -A FORWARD -j REJECT
    iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
    iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 80 -j ACCEPT
    iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
    iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 22 -j ACCEPT
     
    #可以使用state扩展模块,对上述规则进行优化,使用如下配置可以省略许多"回应报文放行规则"。
    iptables -A FORWARD -j REJECT
    iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
    iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
    iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    4、常用动作
    4.1 REJECT
    使用--reject-with选项,可以设置提示信息,当对方被拒绝时,会提示对方为什么被拒绝。
    icmp-net-unreachable
    icmp-host-unreachable
    icmp-port-unreachable(默认值)
    icmp-proto-unreachable
    icmp-net-prohibited
    icmp-host-pro-hibited
    icmp-admin-prohibited

    eg:
    iptables -I INPUT 2 -j REJECT --reject-with icmp-host-unreachable

    4.2 LOG
    使用LOG动作,可以将符合条件的报文的相关信息记录到日志中,默认记录到/var/log/messages
    修改日志文件:/etc/rsyslog.conf文件(或者/etc/syslog.conf),在rsyslog配置文件中添加如下配置即可,然后重启:
    #vim /etc/rsyslog.conf
    kern.warning /var/log/iptables.log
    #service rsyslog restart

    --log-level选项可以指定记录日志的日志级别,可用级别有emerg,alert,crit,error,warning,notice,info,debug。
    --log-prefix选项可以给记录到的相关信息添加"标签"之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤。
    注:--log-prefix对应的值不能超过29个字符。

    4.3 SNAT
    网络内部的主机可借助SNAT隐藏自己的IP地址,同时还能够共享合法的公网IP,让局域网内的多台主机共享公网IP访问互联网。
    eg:
    iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.1.146
    将10.1.0.0/16网段的报文的源地址改为公司的公网IP地址。
    -t nat表示操作nat表,filter表的功能是过滤,nat表的功能就是地址转换,所以我们需要在nat表中定义nat规则。
    -A POSTROUTING表示将SNAT规则添加到POSTROUTING链的末尾,在centos7中,SNAT规则只能存在于POSTROUTING链与INPUT链中,在centos6中,SNAT规则只能存在于POSTROUTING链中。
    -j SNAT表示使用SNAT动作,对匹配到的报文进行处理,对匹配到的报文进行源地址转换。
    --to-source 192.168.1.146"表示将匹配到的报文的源IP修改为192.168.1.146,"--to-source"就是SNAT动作的常用选项,用于指定SNAT需要将报文的源IP修改为哪个IP地址。

    4.4 DNAT
    利用DNAT,将公网客户端发送过来的报文的目标地址与端口号做了映射,将访问web服务的报文转发到了内网中的C主机中,将访问远程桌面的报文转发到了内网中的D主机中。
    eg:
    iptables -t nat -I PREROUTING -d 192.168.1.146 -p tcp --dport 3389 -j DNAT --to-destination 10.1.0.6:3389
    -j DNAT --to-destination 10.1.0.6:3389表示将符合条件的报文进行DNAT,也就是目标地址转换,将符合条件的报文的目标地址与目标端口修改为10.1.0.6:3389
    --to-destination就是动作DNAT的常用选项。

    4.5 MASQUERADE
    MASQUERADE理解为动态的、自动化的SNAT.
    当拨号网上时,每次分配的IP地址往往不同,不会长期分给我们一个固定的IP地址,如果这时,我们想要让内网主机共享公网IP上网,就会很麻烦,因为每次IP地址发生变化以后,我们都要重新配置SNAT规则,通过MASQUERADE动态的将源地址转换为可用的IP地址,其实与SNAT实现的功能完全一致,都是修改源地址,只不过SNAT需要指明将报文的源地址改为哪个IP,而MASQUERADE则不用指定明确的IP,会动态的将报文的源地址修改为指定网卡上可用的IP地址
    eg:
    iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eno50332184 -j MASQUERADE

    4.6 REDIRECT
    使用REDIRECT动作可以在本机上进行端口映射,只能定义在PREROUTING链或者OUTPUT链中。
    eg:
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    当别的机器访问本机的80端口时,报文会被重定向到本机的8080端口上。

    参考:

    iptables之网络防火墙 

    iptables常用动作

  • 相关阅读:
    Java 中的四种权限修饰符
    Java final关键词
    Java 多态
    Java 接口
    Java 抽象类
    iOS下JS与OC互相调用(八)--Cordova详解+实战
    iOS下JS与OC互相调用(七)--Cordova 基础
    计算机网络中的TCP/IP模型
    计算机网络中的七层模型
    Android简易实战教程--第三十一话《自定义土司》
  • 原文地址:https://www.cnblogs.com/cac2020/p/11813779.html
Copyright © 2011-2022 走看看