美文网首页
【ubuntu】 防火墙iptables怎么用的?

【ubuntu】 防火墙iptables怎么用的?

作者: Joyner2018 | 来源:发表于2022-10-16 10:41 被阅读0次

    简介

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

    iptables处理流程

    iptables处理流程

    table 的顺序其实并不十分重要,特定的功能只能在特定的 table 中完成, chain 通常只关心 INPUT 是进入流量, output 是外出流量即可。 chain 内 rule 的顺序是用户自己控制的。 rule 由两部分组成 match 和 target , match 指定了匹配条件,例如: -p tcp --dport 6379 -m connlimit --connlimit-above 5 。 target 指定了 packet 匹配时的操作,常用的有 ACCEPT REJECT DROP LOG 等,有的 target 会终止 chain 匹配后面的 rule ,有的则不会。例如目标是 ACCEPT 会终止 , LOG 则不会。

    对于请求,传入Filter,首先区分是INPUT(从外部主机访问本机)、还是OUTPUT(反之)、FORWARD
    查看相应的Chain规则,从上到下开始匹配,访问的端口的状态
    ACCEPT则放行,并退出Chain,DROP则禁止改请求访问
    若访问的规则不在chain的端口规则中,则进行默认的规则处理

    安装

    判断是否安装

    (1)$service iptables
    提示unrecognized service则没有安装防火墙服务

    (2)Ubuntu 默认有装iptables,可通过dpkg -l或which iptables确认

    • 安装iptables
      添加脚本到/etc/init.d/,脚本如下
      建议将其保存为/etc/init.d/iptables,然后chmod +x /etc/init.d/iptables 添加运行权限。
    #!/bin/sh -e
    ### BEGIN INIT INFO
    # Provides: iptables
    # Required-Start:
    # Required-Stop:
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: start and stop iptables firewall
    # Description: Start, stop and save iptables firewall
    ### END INIT INFO 
    PATH=”/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin” 
    IPTABLES=/sbin/iptables
    IPTABLES_SAVE=/sbin/iptables-save
    IPTABLES_RESTORE=/sbin/iptables-restore
    IPTABLES_CONFIG=/etc/iptables.conf
    [ -x $IPTABLES ] || exit 0
     . /lib/lsb/init-functions
     case "$1" in
     start)
        log_action_begin_msg "Starting firewall"
             type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
        if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
             type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
        ;;
     stop)
        log_action_begin_msg "Saving current firewall configuration"
        if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        log_action_begin_msg "Flushing ALL firewall rules from chains!"
        if $IPTABLES -F ; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        log_action_begin_msg "Deleting ALL firewall chains [Warning: ACCEPTING ALL PORT SERVICES!]"
        if $IPTABLES -X ; then
            $IPTABLES -P INPUT ACCEPT
            $IPTABLES -P FORWARD ACCEPT
            $IPTABLES -P OUTPUT ACCEPT
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;
     save)
        log_action_begin_msg "Saving current firewall configuration"
        if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;
     force-reload|restart)
        log_action_begin_msg "Reloading firewall configuration [Warning: POTENTIAL NETWORK INSECURITY DURING RELOAD]"
        $IPTABLES -F
        $IPTABLES -X
        if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;
     *)
        echo "Usage: /etc/init.d/iptables {start|stop|save|restart|force-reload}"
        exit 1
        ;;
     esac
     exit 0
    

    用法命令

    用法例子

    • 查看iptables规则
      sudo iptables -L

    • 查看iptables规则,以数字形式
      sudo iptables -L -n

    • 查看iptables规则的序号,用于删除规则参考
      sudo iptables -L -n --line-numbers

    • 停止iptables,
      iptables -F 清空所有配置效果等同于停止
      iptables -X 清除预设表filter中使用者自定链中的规则
      iptables -Z

    • 配置,禁止进,允许出,允许回环网卡
      iptables -P INPUT DROP
      iptables -A OUTPUT -j ACCEPT
      iptables -A INPUT -i lo -j ACCEPT

    • 允许ping
      iptables -A INPUT -p icmp -j ACCEPT

    • 允许ssh
      iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    • 允许ftp
      iptables -A INPUT -p tcp --dport 21 -j ACCEPT
      iptables -A INPUT -p tcp --dport 20 -j ACCEPT

    • 允许ftp被动接口范围,在ftp配置文件里可以设置
      iptables -A INPUT -p tcp --dport 20000:30000 -j ACCEPT

    • 把smtp设成本地
      iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -s 127.0.0.1
      iptables -A INPUT -p tcp -m tcp --dport 25 -j REJECT

    • 允许DNS
      iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
      iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

    • 允许http和https
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      iptables -A INPUT -p tcp --dport 443 -j ACCEPT

    • 允许已建立的或相关连的通行
      iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    • 允许某段IP访问本机的所有类型的所有端口
      sudo iptables -I INPUT -s 192.168.2.0/24 -p all -j ACCEPT
      sudo iptables -I INPUT -s 192.168.0.0/16 -p all -j ACCEPT

    • 允许本机127.0.0.1访问自身所有端口
      sudo iptables -I INPUT -s 127.0.0.1 -p all -j ACCEPT

    • 允许某段IP访问本机的TCP 3306端口
      sudo iptables -I INPUT -s 192.168.2.0/24 -p tcp --dport 3306 -j ACCEPT

    • 允许某段IP访问本机的某段TCP端口
      sudo iptables -I INPUT -s 192.168.2.0/24 -p tcp --dport 3306:65525 -j ACCEPT

    • 向所有IP开放ssh的远程连接,这里是已经更改了的19515端口,默认为22端口
      sudo iptables -A INPUT -p tcp --dport 19515 -j ACCEPT

    • 清除单条iptables规则
      sudo iptables -D INPUT(表) 3(规则对应的序号)

    • 修改单条iptables规则,使用 -R,修改INPUT链序号为3的规则为允许,第4条规则为拒绝,丢弃
      sudo iptables -R INPUT 3 -j ACCEPT
      sudo iptables -R INPUT 4 -j DROP

    • 禁止其他未允许的规则访问
      iptables -A INPUT -j REJECT #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
      iptables -A FORWARD -j REJECT

    • 保存iptables规则
      iptables-save > /etc/iptables

    • 保存ipv6 的iptables规则
      sudo ip6tables-save

    相关文章

      网友评论

          本文标题:【ubuntu】 防火墙iptables怎么用的?

          本文链接:https://www.haomeiwen.com/subject/jnnrzrtx.html