ฉันใช้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