如何修复 Debian 11 中的“未找到:/sbin/iptables”

如何修复 Debian 11 中的“未找到:/sbin/iptables”

我正在尝试在代理服务器上进行实验工作以供研究。我应该立即警告您,我对这个主题一无所知,但我需要帮助。我按照老师的指示做了一切。那么,问题的关键是:

我有一个iptables.sh file看起来像这样的:

    #!/bin/bash
    
    IPTABLES=' /sbin/iptables'
    EXTIF='enp0s3'
    INTIF1='enp0s8'
    /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
    $IPTABLES -F
    $IPTABLES -t nat -F
    $IPTABLES -t mangle -F
    $IPTABLES -X
    $IPTABLES -t nat -X
    $IPTABLES -t mangle -X
    $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
    $IPTABLES -A FORWARD -i $INTIF1 -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT
    
    iptables -t nat -A PREROUTING -p tcp -m tcp -s 10.20.2.0/24 --dport 443 -j REDIRECT --to-ports 3129
    iptables -t nat -A PREROUTING -p tcp -m tcp -s 10.20.2.0/24 --dport 80 -j REDIRECT --to-ports 3128
    
    #iptables -t nat -A OUTPUT -o lo -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    #iptables -t nat -A PREROUTING -i enp0s3 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    #iptables -t nat -A OUTPUT -o lo -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3128
    #iptables -t nat -A PREROUTING -i enp0s3 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3128
    
    $IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT
    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    $IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    $IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP
    #$IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP

当我以 root 身份在虚拟机中运行以下命令时sh iptables.sh,我得到以下信息:

在此输入图像描述

未找到:/sbin/iptables

可能是什么原因以及如何解决?

答案1

看起来您的文件具有 Windows 样式的行终止符。

请使用命令进行测试file iptables.sh

输出将类似于:

iptables.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

如果with CRLF line terminators存在,则必须将脚本转换为使用 Unix 风格的行终止符:

fromdos iptables.sh   # in package "tofrodos"

或者

dos2unix iptables.sh   # in package "dos2unix"

如果之后仍然有错误,请检查第3行的变量赋值:

IPTABLES=' /sbin/iptables'

如果前面的空格字符/sbin是 ALT 空格或其他非真正的空格字符,则可能会导致一些错误。该空格是不必要的,因此只需将其删除:

IPTABLES='/sbin/iptables'

相关内容