Port Knocking; önceden belirlenmiş portlara yapılan bağlantı isteklerine göre istenilen portların açılması tekniğidir. Önceden belirlenmiş portlara yine önceden belirlenmiş zaman aralığında bağlantı isteği gönderilmesi ile birlikte güvenlik duvarı kuralları dinamik olarak değiştirilerek gerçekte istenilen servisin portları açılır. Bu uygulama güvenlik nedeni ile dışarıdan hizmet verildiğinin gizlenmek istendiği durumlarda oldukça kullanışlıdır. Bu şekilde SSH servisinize erişimi çok daha güvenli bir hale getirebilirsiniz.

NOT: Aşağıda bahsedilen işlemler Centos 6.6 Final standart kurulu işletim sistemi sürümü üzerinde test edilmiştir.

1-Knockd Server Kurulumu ve Konfigürasyonu

-Sisteminizde eksik ise knockd uygulamasının ihtiyaç duyduğu libpcap kütüphanesini yükleyiniz.

[[email protected] ~]# yum -y install libpcap*
[...]
Dependencies Resolved
===============================================================
Package Arch Version Repository Size
===============================================================
Installing:
libpcap-devel x86_64 14:1.4.0-1.20130826git2dbcaa1.el6 base 114 k
Transaction Summary
===============================================================
Install 1 Package(s)
Total download size: 114 k
Installed size: 160 k
Downloading Packages:
libpcap-devel-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm | 114 kB 00:00
Installed:
libpcap-devel.x86_64 14:1.4.0-1.20130826git2dbcaa1.el6
Complete!

-Knock-Server uygulamasını yükleyiniz.

[[email protected] ~]# rpm -ivh http://li.nux.ro/download/nux/misc/el6/x86_64/knock-server-0.5-7.el6.nux.x86_64.rpm
Preparing... ########################################### [100%]
1:knock-server ########################################### [100%]

-İptables güvenlik duvarı kurallarınızı kontrol ediniz. Burada “ACCEPT tcp — anywhere anywhere state NEW tcp dpt:ssh” kuralı bulunuyorsa bu kuralı kaldırınız. Çünkü yapmak istediğimiz bu uygulamada Port Knocking için ssh erişimlerine default olarak izin verilmemesi gerekmektedir.

[[email protected] ~]# iptables -L
[...]
 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
 ACCEPT icmp -- anywhere anywhere
 ACCEPT all -- anywhere anywhere
 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
[...]

-Yukarıda bahsi geçen  ve  iptables kuralları arasında 4.sırada bulunan kuralı siliniz. (Sizin sisteminizde bu kural farklı satırda olabilir. Buna göre INPUT değerini değiştiriniz.)

[[email protected] ~]# iptables -D INPUT 4

-Tekrardan iptables kurallarınızı kontrol ederek ilgili kuralın silindiğinden emin olunuz.

[[email protected] ~]# iptables -L
[...]
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
[...]

-SSH erişimlerinizi iptables ile engellemek için aşağıdaki kuralı ekleyiniz.

[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j DROP

-Sildiğiniz ve eklediğiniz kuralların aktif olması için kaydediniz.

[[email protected] ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:  [ OK ]

-Knockd konfigürasyon dosyasını yapılandırınız. Aşağıdaki konfigürasyonu kısaca açıklamak gerekirse; Sırası ile 3333, 4444, 5555 portlarına 60 saniye süre içerisinde gönderilen paketler ile belirlediğiniz komutun (biz komut olarak iptables’e ssh portu olan 22’yi aktif hale getirmesi için kural eklemesini istedik) çalıştırılmasını sağlayabilirsiniz.

[[email protected] ~]# vi /etc/knockd.conf
[options]
    logfile = /var/log/knockd.log
 
[openSSH]
    sequence = 3333,4444,5555
    seq_timeout = 60
    tcpflags = syn
    Start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 
[closeSSH]
    sequence = 6666,7777,8888
    seq_timeout = 60
    command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags = syn

-Knockd servisini başlatınız.

[[email protected] ~]# /etc/init.d/knockd start
Starting knockd: could not open eth0: eth0: No such device exists (SIOCGIFHWADDR: No such device) [FAILED]

-Servisi başlatmak istediğinizde yukarıdaki gibi hata mesajı alabilirsiniz. Hata mesajında görebileceğiniz üzere sistemde eth0 isminde bir network  kartı olmadığı için servis başlatılamadı. Farklı bir network kartını dinlemek için (şuan ki test yaptığımız sistemde eth1) “/etc/rc.d/init.d/knockd” dosyası içerisinde ki “OPTIONS” bölümünü değiştirmeniz gerekmektedir.

[[email protected] ~]# vi /etc/rc.d/init.d/knockd
[...] 
OPTIONS=""   #satırını
[...]
[...] 
OPTIONS="-i eth1"  #olarak değiştiriniz. 
[...] 
 

-Knockd servisini yeniden başlatınız.

[[email protected] ~]# /etc/init.d/knockd start
Starting knockd: [ OK ]

-Knockd servisi başladı. Artık bu sunucuya ssh erişimi öncesi belirlenen portların sırası ile yoklanması gerekmektedir.

2-Knockd-Server Kurulu Sunucuya SSH Erişimi

-Knockd yapılandırmasını tamamladığınız sunucuya ssh ile erişimi test ediniz. Aşağıdaki çıktıda göreceğiniz üzere bağlantı sağlanamamaktadır.

[[email protected] ~]# ssh -l root 192.168.100.128
ssh: connect to host 192.168.100.128 port 22: No route to host

-SSH erişiminizi aktif hale getirmek için belirlediğiniz kurallarda olduğu gibi sırası ile 3333, 4444 ve 5555. portları nmap aracı ile yoklayınız. Dilerseniz bu işlemi telnet veya knockd-client ile de gerçekleştirebilirsiniz.

[[email protected] ~]# nmap -p 3333 192.168.100.128
Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-02 00:55 EET
Nmap scan report for 192.168.100.128
Host is up (0.00040s latency).
PORT STATE SERVICE
3333/tcp filtered dec-notes
MAC Address: 00:0C:29:E3:21:9A (VMware)
 
Nmap done: 1 IP address (1 host up) scanned in 13.11 seconds
[[email protected] ~]# nmap -p 4444 192.168.100.128
Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-02 00:55 EET
Nmap scan report for 192.168.100.128
Host is up (0.00033s latency).
PORT STATE SERVICE
4444/tcp filtered krb524
MAC Address: 00:0C:29:E3:21:9A (VMware)
 
Nmap done: 1 IP address (1 host up) scanned in 13.11 seconds
[[email protected] ~]# nmap -p 5555 192.168.100.128
Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-02 00:55 EET
Nmap scan report for 192.168.100.128
Host is up (0.00034s latency).
PORT STATE SERVICE
5555/tcp filtered freeciv
MAC Address: 00:0C:29:E3:21:9A (VMware)
 
Nmap done: 1 IP address (1 host up) scanned in 13.11 seconds

-Yaptığımız işlemler ile ilgili logları görmek için knockd-server ‘ın bulunduğu sunucuya local olarak erişim sağlayarak logları inceleyebilirsiniz. Aşağıdaki loglardan görebileceğiniz üzere 1,2 ve 3. adımlar geçilerek gerekli komut çalıştırılmış. Yani sunucu ssh erişimi için hazır.

[[email protected] ~]# tailf /var/log/knockd.log
 [2014-12-02 00:54] starting up, listening on eth1
 [2014-12-02 00:55] 192.168.100.129: openSSH: Stage 1
 [2014-12-02 00:55] 192.168.100.129: openSSH: Stage 2
 [2014-12-02 00:56] 192.168.100.129: openSSH: Stage 3
 [2014-12-02 00:56] 192.168.100.129: openSSH: OPEN SESAME
 [2014-12-02 00:56] openSSH: running command: /sbin/iptables -I INPUT -s 192.168.100.129 -p tcp --dport 22 -j ACCEPT

-Tekrardan client’a geçiş yaparak ssh erişiminizi test ediniz.

[[email protected] ~]# ssh -l root 192.168.100.128
[email protected]'s password:
Last login: Tue Dec 2 00:38:51 2014 from 192.168.100.129
[[email protected] ~]# hostname
musabyardim

-Erişim sağladıktan sonra kontrol amaçlı iptables kurallarınıza bakınız. Client’ın IP adresi olan 192.168.100.129 için ssh erişimi aktif hale getirilmiş.

[[email protected] ~]# iptables -L
 Chain INPUT (policy ACCEPT)
 target prot opt source destination
 ACCEPT tcp -- 192.168.100.129 anywhere tcp dpt:ssh
 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
 ACCEPT icmp -- anywhere anywhere
 ACCEPT all -- anywhere anywhere
 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
 DROP tcp -- anywhere anywhere tcp dpt:ssh
[...]

-SSH erişimi sağlayıp işlemlerinizi tamamladıktan sonra ssh erişiminizi kapatmayı unutmayınız. SSH erişiminizi kapatmak için belirlediğiniz kurallara uygun işlemleri sırası ile yapınız.

[[email protected] ~]# nmap -p 6666 192.168.100.128
Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-02 01:03 EET
Nmap scan report for 192.168.100.128
Host is up (0.00033s latency).
PORT STATE SERVICE
6666/tcp filtered irc
MAC Address: 00:0C:29:E3:21:9A (VMware)
 
Nmap done: 1 IP address (1 host up) scanned in 13.12 seconds
[[email protected] ~]# nmap -p 7777 192.168.100.128
Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-02 01:03 EET
Nmap scan report for 192.168.100.128
Host is up (0.00042s latency).
PORT STATE SERVICE
7777/tcp filtered cbt
MAC Address: 00:0C:29:E3:21:9A (VMware)
 
Nmap done: 1 IP address (1 host up) scanned in 13.11 seconds
[[email protected] ~]# nmap -p 8888 192.168.100.128
Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-02 01:04 EET
Nmap scan report for 192.168.100.128
Host is up (0.00035s latency).
PORT STATE SERVICE
8888/tcp filtered sun-answerbook
MAC Address: 00:0C:29:E3:21:9A (VMware)
 
Nmap done: 1 IP address (1 host up) scanned in 13.10 seconds

-SSH erişimini kapatmak için yaptığımız işlemlerin loglarını görmek için yeniden local olarak knockd-server’a erişim sağlayıp logları inceleyebilirsiniz. Aşağıdaki loglardan görebileceğiniz üzere ilgili portlara gelen istekler doğrultusunda ssh erişiminin kapatılması için gerekli komut çalıştırılmıştır.

[[email protected] ~]# tailf /var/log/knockd.log
[...]
 [2014-12-02 01:03] 192.168.100.129: closeSSH: Stage 1
 [2014-12-02 01:04] 192.168.100.129: closeSSH: Stage 2
 [2014-12-02 01:04] 192.168.100.129: closeSSH: Stage 3
 [2014-12-02 01:04] 192.168.100.129: closeSSH: OPEN SESAME
 [2014-12-02 01:04] closeSSH: running command: /sbin/iptables -D INPUT -s 192.168.100.129 -p tcp --dport 22 -j ACCEPT
[...]

Yapılan işlemleri grafiksel olarak özetlemek gerekirse;

Port Knocking

Port Knocking Şema

[Kaynak]
http://tecadmin.net/

 

2 Thoughts on “Port Knocking – Güvenli Port Açma

  1. Gürkan 4 Aralık 2014 12:02 tarihinde yorum yaptı:

    Konuyla ilgili daha da açıklayıcı bir örnek: http://devopsreactions.tumblr.com/post/67356052491/port-knocking

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Post Navigation