仅允许预定义设备通过 IP 表连接到我的设备

仅允许预定义设备通过 IP 表连接到我的设备

我只想允许 Ubuntu Core-16 中的几个特定连接。

  • 允许 SSH 连接
  • 允许从我的设备中的 MQTT 客户端到特定代理地址的 MQTT 连接。
  • 允许 REST 客户端 ip 连接到我的设备上的服务器。

我面临的问题是由于以下设置导致的与 MQTT 的连接:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT

以下是我从 txt 文件设置特定 IP 的方法:

input="/home/admin/ip.txt"

while read line; do
var=$line
#echo "var= $var"
var1="$(cut -d' ' -f 1 <<< $var)"
echo "string = $var1"
case $var1 in
     jumper)
          #echo "Thank you"
          #echo "Your type: jumper"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
          iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;
     mqtt)
          #echo "Thank you"
          #echo "Your type: mqtt"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A INPUT -p tcp --dport $port -m state --state ESTABLISHED -j ACCEPT
          iptables -A OUTPUT -p tcp --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;
     rest)
          #echo "Thank you"
          #echo "Your type: rest"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A INPUT -p tcp --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;
     server)
          #echo "Thank you"
          #echo "Your type: server"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          ;;
     *)
          echo "Sorry, invalid input"
          ;;
esac

done < $input

答案1

按以下方式获得结果(确保文件中填写了正确的IP地址和端口ip.txt):

首先通过在终端上运行以下 3 个命令使一切可连接以避免丢失现有连接:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

然后,刷新所有现有的 IP 表设置:

iptables -F

最后运行阻止所有连接的脚本,然后仅启用IP.txt文件中提到的 IP(此文件的示例在末尾):

iptables -P INPUT DROP 
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

while read line; do
var=$line
var1="$(cut -d' ' -f 1 <<< $var)"
case $var1 in

     jumper)
          ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
      iptables -A INPUT -p tcp --dport $port -s $ip -m state --state NEW,ESTABLISHED -j ACCEPT
      iptables -A OUTPUT -p tcp --sport $port -d $ip -m state --state NEW,ESTABLISHED -j ACCEPT          
      ;;

     mqtt)
      ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
      iptables -A INPUT -p tcp --sport $port -s $ip -m state --state ESTABLISHED -j ACCEPT
      iptables -A OUTPUT -p tcp --dport $port -d $ip -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;

     rest)
      ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp --dport $port -s $ip -m state --state NEW,ESTABLISHED -j ACCEPT
      iptables -A OUTPUT -p tcp --sport $port -d $ip -m state --state NEW,ESTABLISHED -j ACCEPT
      iptables -A INPUT -p tcp --dport $port -m state --state NEW -j ACCEPT
          ;;

     server)
      ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          ;;

     rangeJumper)
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -m iprange --src-range $ip --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          iptables -A OUTPUT -p tcp -m iprange --dst-range $ip --sport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;

     *)
          echo "Sorry, invalid input"
          ;;
esac

done < $input

示例 IP.txt 文件:

jumper 10.100.100.249 22
jumper 10.100.100.76 22
mqtt 10.100.99.238 8883
rest 10.100.100.76 34568
rest 10.100.100.249 34568
server 10.100.100.76 154
rangeJumper 10.100.99.71-10.100.99.100 22
rangeJumper 10.100.97.72-10.100.97.100 22

相关内容