我只想允许 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