Я внедрил следующие правила iptables
на моем тестовом сервере для курса.
Брандмауэр выключается, и я не могу получить доступ к порту 22. Однако после стука в порты 1111, 2222 и 3333 в таком порядке - порт 22 должен быть открыт.
Тем не менее, мой ssh
по-прежнему заблокирован.
Я стучу к каждому порту через скрипт Python:
# knock_list = [1111, 2222, 3333]
for port in knock_list:
time.sleep(1.5)
sock = None
try:
print 'Knocking:', ip_address, port
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.set_timeout(1)
sock.connect((ip_address, port))
except:
pass
finally:
if sock:
sock.close()
Почему моя конфигурация iptables для стука портов не работает?
Моя конфигурация iptables
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
sudo iptables -N KNOCKING
sudo iptables -N GATE1
sudo iptables -N GATE2
sudo iptables -N GATE3
sudo iptables -N PASSED
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -j KNOCKING
sudo iptables -A GATE1 -p tcp --dport 1111 -m recent --name AUTH1 --set -j DROP
sudo iptables -A GATE1 -j DROP
sudo iptables -A GATE2 -m recent --name AUTH1 --remove
sudo iptables -A GATE2 -p tcp --dport 2222 -m recent --name AUTH2 --set -j DROP
sudo iptables -A GATE2 -j GATE1
sudo iptables -A GATE2 -j GATE1
sudo iptables -A GATE3 -m recent --name AUTH2 --remove
sudo iptables -A GATE3 -p tcp --dport 3333 -m recent --name AUTH3 --set -j DROP
sudo iptables -A GATE3 -j GATE1
sudo iptables -A PASSED -m recent --name AUTH3 --remove
sudo iptables -A PASSED -p tcp --dport 22 -j ACCEPT
sudo iptables -A PASSED -j GATE1
sudo iptables -A KNOCKING -m recent --rcheck --seconds 30 --name AUTH3 -j PASSED
sudo iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH2 -j GATE3
sudo iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH1 -j GATE2
sudo iptables -A KNOCKING -j GATE1