SSH Bağlantı Sorunu: Sunucuya Bağlanamıyorum
SSH bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, SSH portu için filtre kuralı oluşturma ve sorun giderme adımları.
Port erişim sorunlarını teşhis etmek için netstat, ss, iptables, ufw ve servis dinleme kontrolü rehberi.
Sunucunuzda çalışan bir servise dışarıdan erişememeniz genellikle port erişim sorunlarından kaynaklanır. Bu rehberde, port erişim sorunlarını sistematik olarak teşhis etmek ve çözmek için kullanabileceğiniz araçları ve yöntemleri detaylı olarak anlatacağız.
ss komutu, modern Linux sistemlerinde soket istatistiklerini görüntülemek için kullanılır:
# Tüm dinlenen TCP portlarını listele
ss -tlnp
# Tüm dinlenen UDP portlarını listele
ss -ulnp
# Belirli bir portu kontrol et
ss -tlnp | grep :80
ss -tlnp | grep :443
ss -tlnp | grep :3306
# Tüm bağlantıları göster (dinlenen + bağlı)
ss -tanp
# Detaylı soket bilgisi
ss -tlnp -e
# Örnek çıktı:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=9012,fd=22))
| Alan | Açıklama |
|---|---|
| State LISTEN | Port aktif olarak dinleniyor |
| 0.0.0.0:port | Tüm arayüzlerden erişilebilir |
| 127.0.0.1:port | Sadece localhost'tan erişilebilir |
| Process | Portu dinleyen süreç bilgisi |
Eğer servis 127.0.0.1 üzerinde dinliyorsa, dışarıdan erişilemez. Servis yapılandırmasında bind-address veya listen direktifini 0.0.0.0 olarak değiştirmeniz gerekir.
# Tüm dinlenen portları listele
netstat -tlnp
# UDP dahil tüm portlar
netstat -tulnp
# Belirli port kontrolü
netstat -tlnp | grep :8080
# Bağlantı sayılarını göster
netstat -an | grep :80 | wc -l
# Tüm kuralları listele
sudo iptables -L -n -v
# INPUT zincirini kontrol et
sudo iptables -L INPUT -n -v --line-numbers
# NAT tablosunu kontrol et
sudo iptables -t nat -L -n -v
# Belirli port için kural ara
sudo iptables -L -n -v | grep 80
# TCP port 80 aç
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# TCP port 443 aç
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Belirli IP'den port erişimi
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
# Port aralığı aç
sudo iptables -A INPUT -p tcp --dport 8000:9000 -j ACCEPT
# Kuralları kaydet
sudo iptables-save > /etc/iptables/rules.v4
# Veya netfilter-persistent ile
sudo netfilter-persistent save
# UFW durumunu kontrol et
sudo ufw status verbose
# Numaralı kuralları listele
sudo ufw status numbered
# Port aç
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp
# Belirli IP'den port erişimi
sudo ufw allow from 192.168.1.100 to any port 3306
# Port aralığı aç
sudo ufw allow 8000:9000/tcp
# Kural sil
sudo ufw delete allow 8080/tcp
# UFW'yi etkinleştir
sudo ufw enable
# UFW'yi yeniden yükle
sudo ufw reload
# Aktif zone'u kontrol et
sudo firewall-cmd --get-active-zones
# Tüm kuralları listele
sudo firewall-cmd --list-all
# Port aç (geçici)
sudo firewall-cmd --add-port=80/tcp
# Port aç (kalıcı)
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
# Servis ekle
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
# /etc/nginx/sites-available/default
server {
listen 80; # Tüm arayüzlerden dinle
listen [::]:80; # IPv6 dahil
server_name example.com;
# Belirli IP'den dinle
# listen 192.168.1.10:80;
}
# /etc/apache2/ports.conf
Listen 80
Listen 443
# Belirli IP'den dinle
# Listen 192.168.1.10:80
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# Tüm arayüzlerden dinle (uzaktan erişim için)
bind-address = 0.0.0.0
# Sadece localhost (varsayılan, güvenli)
# bind-address = 127.0.0.1
port = 3306
# /etc/postgresql/15/main/postgresql.conf
listen_addresses = '*' # Tüm arayüzler
# listen_addresses = 'localhost' # Sadece localhost
port = 5432
# /etc/postgresql/15/main/pg_hba.conf
# Uzaktan erişim izni
host all all 0.0.0.0/0 md5
# /etc/redis/redis.conf
bind 0.0.0.0
# bind 127.0.0.1 # Varsayılan (sadece localhost)
port 6379
protected-mode yes
requirepass GÜÇLÜ_ŞİFRE
Veritabanı ve cache servislerini dışarıya açarken mutlaka güçlü şifre ve IP kısıtlaması kullanın. Aksi halde sunucunuz saldırılara açık hale gelir.
# Yerel makineden uzak port testi
nc -zv SUNUCU_IP 80
nc -zv SUNUCU_IP 443
nc -zv SUNUCU_IP 3306
# nmap ile detaylı port tarama
nmap -p 80,443,3306,5432,6379 SUNUCU_IP
# Servis versiyon tespiti
nmap -sV -p 80,443 SUNUCU_IP
# curl ile HTTP port testi
curl -I http://SUNUCU_IP:80
curl -I https://SUNUCU_IP:443
# telnet ile port testi
telnet SUNUCU_IP 80
REXE sunucularında bir IP'de hiç kural yokken tüm portlar açıktır. IP'nizde en az bir kural olduğunda ise otomatik Default Block devreye girer ve yalnızca izin verilen portlar açık kalır. Servisinize dışarıdan erişim sağlamak için Path Panel'den ilgili port için filtre kuralı oluşturmanız gerekir:
1. Path Panel'e giriş yapın (x.rexe.tr)
2. İlgili IP adresine tıklayın
3. "Yeni Kural Ekle" butonuna tıklayın
4. Protokol: TCP (veya UDP)
5. Yön: Symmetric (çift yönlü)
6. Hedef Port: Açmak istediğiniz port
7. Aksiyon: Allow
8. Kuralı kaydedin ve yayına alınmasını bekleyin
Path Panel kurallarının yayına alınması 2-5 dakika sürebilir.
Panelde kural henüz yayılmamış (güncellenmemiş) gibi görünse bile kural büyük olasılıkla 2-5 dakika içinde çoktan yayına alınmıştır. Panelin durum kontrol aralığı veya kuralın Path tarafında tüm node'lara (bizim tarafımız hariç) işlenme süreci gibi nedenlerle durum gecikmeli güncellenebilir. Bu yalnızca paneldeki görüntüsel bir gecikmedir; port aslında sistemde çoktan açılmıştır.
#!/bin/bash
# Port Erişim Sorun Giderme Script'i
PORT=$1
SERVER_IP=$2
if [ -z "$PORT" ] || [ -z "$SERVER_IP" ]; then
echo "Kullanım: $0 <port> <server_ip>"
exit 1
fi
echo "=== Port $PORT Erişim Kontrolü ==="
# 1. Servis dinliyor mu?
echo -e "\n[1] Servis Dinleme Kontrolü:"
ss -tlnp | grep ":$PORT" || echo "Port $PORT dinlenmiyor!"
# 2. Firewall kontrolü
echo -e "\n[2] Firewall Kontrolü:"
if command -v ufw &> /dev/null; then
sudo ufw status | grep "$PORT"
elif command -v firewall-cmd &> /dev/null; then
sudo firewall-cmd --list-ports | grep "$PORT"
else
sudo iptables -L -n | grep "$PORT"
fi
# 3. Dışarıdan erişim testi
echo -e "\n[3] Dışarıdan Erişim Testi:"
nc -zv -w 5 $SERVER_IP $PORT 2>&1
echo -e "\n=== Kontrol Tamamlandı ==="
| Sorun | Neden | Çözüm |
|---|---|---|
| Port dinlenmiyor | Servis çalışmıyor | systemctl start servis_adı |
| 127.0.0.1'de dinleniyor | Bind address localhost | Yapılandırmada 0.0.0.0 olarak değiştir |
| Firewall engelliyor | Port kuralı yok | iptables/ufw/firewalld ile port aç |
| Path Panel engelliyor | Filtre kuralı yok | Path Panel'den kural oluştur |
| Connection refused | Servis portu değişmiş | Servis yapılandırmasını kontrol et |
| Timeout | Ağ veya firewall sorunu | Traceroute ve mtr ile kontrol et |
Port erişim sorunlarını çözmek için üç katmanlı bir kontrol yapmanız gerekir: servis dinleme durumu, sunucu firewall kuralları ve REXE Path Panel kuralları. Önce servisin doğru portta ve doğru arayüzde dinlediğinden emin olun, ardından firewall kurallarını kontrol edin ve son olarak Path Panel'den gerekli kuralları oluşturun.
Üç olası neden var: 1) Servis 127.0.0.1 üzerinde dinliyor olabilir (0.0.0.0 olarak değiştirin), 2) Sunucu firewall'ı portu engelliyor olabilir (iptables/ufw ile açın), 3) REXE Path Panel'de filtre kuralı olmayabilir (kural oluşturun).
ss (socket statistics) modern Linux sistemlerinde netstat'ın yerini almıştır. Daha hızlı çalışır ve daha detaylı bilgi verir. netstat eski sistemlerde hâlâ kullanılabilir ancak yeni sistemlerde ss tercih edilmelidir.
UFW aslında iptables üzerine kurulu bir arayüzdür. İkisini aynı anda manuel olarak yönetmek karışıklığa neden olabilir. Birini seçip tutarlı kullanmanız önerilir. UFW daha basit, iptables daha esnek kontrol sağlar.
Doğrudan dışarıya açmak güvenlik riski oluşturur. Güçlü şifre kullanın, IP kısıtlaması ekleyin ve mümkünse SSH tüneli veya VPN üzerinden erişin. Sadece güvendiğiniz IP adreslerinden erişime izin verin.
Kuralın yayına alınması 2-5 dakika sürebilir. Ayrıca sunucu tarafındaki firewall'ın da portu açtığından emin olun. Path Panel ve sunucu firewall'ı bağımsız çalışır, her ikisinde de izin verilmelidir.
SSH bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, SSH portu için filtre kuralı oluşturma ve sorun giderme adımları.
RDP bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, RDP portu için filtre kuralı oluşturma ve sorun giderme adımları.
WinMTR ve Linux MTR ile ağ testi yapma, ICMP filtre kuralı oluşturma ve sonuçları destek ekibine gönderme rehberi. Paket kaybı ve gecikme analizi.