Я хочу разрешить только несколько конкретных подключений в Ubuntu Core-16.
Проблема, с которой я сталкиваюсь, это соединение с 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
Вот так я настраиваю конкретный IP из txt файла:
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
Результат получил следующим образом (убедитесь, что в файле ip.txt
указаны правильные IP-адреса и порты):
Сначала сделайте все подключаемым, чтобы не потерять существующие соединения, выполнив следующие 3 команды на терминале:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Затем сбросьте все существующие настройки IP-таблиц:
iptables -F
Наконец запустите скрипт, который блокирует все соединения, а затем включает только IP-адреса, упомянутые в IP Файл .txt
(образец этого файла в конце):
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