631 portu IPP, yani yazdırma protokolü. Bu portu dinleyen bir şey varsa o, masaüstü Linux'un yazdırma sistemi CUPS (cupsd, TCP üzerinde) ya da yardımcısı cups-browsed (UDP üzerinde). Bir web sunucusunun yazıcısı olmaz. Neden orada olduğunu bilmiyorsan kaldır. Gerçekten gerekiyorsa yalnızca 127.0.0.1 üzerinde dinlediğinden ve cups-browsed'un kapalı olduğundan emin ol.
Sunucuda CUPS ne arıyor?
Sade bir Ubuntu Server kurulumunun buna ihtiyacı yok; Ubuntu'nun sunucu belgeleri CUPS'ı sudo apt install cups ile senin kurduğun bir şey olarak anlatıyor. Bir VPS'te karşına çıkıyorsa genelde başka bir şeyle birlikte gelmiştir:
- Sunucu bir masaüstü imajından kurulmuştur ya da sağlayıcının şablonu "masaüstü" veya "GUI'li" bir şablondur.
- Biri uzak masaüstü için bir masaüstü ortamı kurmuştur. Ubuntu'nun ubuntu-desktop-minimal gibi masaüstü meta paketleri
cupspaketine bağımlı. - Bir paket yazdırma desteğini bağımlılık olarak çekmiştir.
Bunların hiçbiri tek başına sorun değil. Sorun, ağda dinleyen ve kimsenin ilgilenmediği bir servis.
2024'teki cups-browsed açıkları
Eylül 2024'te dört CVE birlikte yayımlandı: CVE-2024-47076, CVE-2024-47175, CVE-2024-47176 ve CVE-2024-47177. Ubuntu'nun açıklaması zinciri anlatıyor: saldırgan CUPS'ı kendi kontrolündeki bir PPD dosyası üretmeye kandırabiliyor ve bu dosyadaki komutlar, bir yazdırma işi gönderildiğinde lp kullanıcısıyla çalışıyor. Giriş kapısı cups-browsed. Ubuntu'nun CVE-2024-47176 sayfası: "cups-browsed binds to INADDR_ANY:631, causing it to trust any packet from any source." Yani bütün arayüzlerde 631'i dinliyor ve her kaynaktan gelen pakete güveniyor. OpenPrinting'in güvenlik bildirimi sonucu özetliyor: bir yazdırma işi başladığında saldırgan hedef makinede kimlik doğrulama olmadan uzaktan komut çalıştırabiliyor.
Ubuntu, desteklenen bütün LTS sürümleri için cups-browsed, cups-filters, libcupsfilters ve libppd paketlerine düzeltme yayımladı (aynı yazı, 26 Eylül 2024); USN-7041-1 de cups paketinin kendisini kapsıyor. Yani güncel bir sunucu bu zincire karşı ardına kadar açık değil. Ama yamalı olsun olmasın, bir web sunucusunda bütün internete cevap veren bir yazıcı keşif servisi, karşılığında hiçbir şey vermeyen bir risk.
Neyin dinlediğine bak
sudo ss -tulpn | grep ':631'
-t TCP, -u UDP, -l dinleyenler, -p sahibi olan süreç, -n adlar yerine sayılar (ss). CUPS'ı bir masaüstü kurulumundan almış bir sunucuda tipik sonuç:
udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:* users:(("cups-browsed",pid=1187,fd=7))
tcp LISTEN 0 4096 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1102,fd=7))
tcp LISTEN 0 4096 [::1]:631 [::]:* users:(("cupsd",pid=1102,fd=6))
Nasıl okunur:
- UDP'de
0.0.0.0:631,cups-browsed. Her arayüzde dinliyor. CVE-2024-47176'nın giriş noktası bu. - TCP'de
127.0.0.1:631ve[::1]:631,cupsd. Yalnızca loopback; sunucunun kendisinden erişilir, internetten erişilmez. Ubuntu belgesiyle de uyumlu: Ubuntu'da CUPS varsayılan olarak yalnızca 127.0.0.1 loopback arayüzünü dinliyor. - TCP'de
0.0.0.0:631ya da*:631. Biricupsd.conf'u değiştirmiş (Port 631satırı, Ubuntu belgesinin ifadesiyle 631 portunu bütün arayüzlerde dinlemek demek). Yönetim web arayüzü artık ağa bakıyor.
ufw'nin bunu durdurup durdurmayacağına da bak: sudo ufw status verbose. ufw etkin ve varsayılanı deny (incoming) ise, servis dinlese bile dışarıdan 631'e gelen paketler düşer. Güvenlik duvarı yoksa dinleyen her port açıktır. Güvenlik duvarını çözüm değil, ikinci katman olarak gör.
![631 portuna süzülmüş ss -tulpn çıktısının öncesi ve sonrası: önce cups-browsed UDP 0.0.0.0:631 üzerinde herkese açık olarak, cupsd ise TCP 127.0.0.1:631 ve [::1]:631 üzerinde yalnızca yerel olarak dinliyor; paketler kaldırıldıktan sonra aynı komut hiçbir şey yazmıyor](/img/guides/cups-631/ss-before-after-tr.webp)
0.0.0.0 üzerindeki UDP satırı herkese açık olan. Sonra: 631'de hiçbir şey dinlemiyor.yol: kaldır (çoğu sunucu için)
Bir şey kaldırmadan önce neyin ona bağlı olduğuna bak:
apt-cache rdepends --installed cups cups-browsed
Sonra önce keşif servisini durdurup kaldır, ardından yazdırma sunucusunu:
sudo systemctl disable --now cups-browsed
sudo apt purge cups-browsed
sudo apt purge cups cups-daemon
Onaylamadan önce apt'nin yazdığı listeyi oku. İçinde ubuntu-desktop-minimal ya da ubuntu-desktop varsa, CUPS'ı getiren meta paket bu. Yalnızca SSH ile bağlandığın bir sunucuda meta paketi kaldırmak sorun değil; ama bir sonraki apt autoremove, o paketin yerinde tuttuğu masaüstünün büyük kısmını kaldırmayı önerir. O listeyi de oku. Uzak masaüstünü kullanıyorsan burada dur ve 2. yolu seç.
yol: CUPS kalsın ama yalnızca yerelde
Sunucuda gerçekten yazdıran bir şey varsa (örneğin ofisteki yazıcıya fatura gönderen bir uygulama), cupsd'yi tut ve ağ tarafını kapat.
cups-browsed'u kapat; sunucuda yazıcı keşfine ihtiyacın yok:
sudo systemctl disable --now cups-browsed
Sonra /etc/cups/cupsd.conf dosyasına bak:
sudo grep -nE '^\s*(Port|Listen|Browsing)' /etc/cups/cupsd.conf
Görmek istediğin Listen localhost:631 (yanında soket satırı Listen /run/cups/cups.sock) ve hiç Port 631 olmaması. Port 631 ya da Listen *:631 varsa Listen localhost:631 ile değiştir. Browsing No yap; cupsd.conf başvurusuna göre Browsing, paylaşılan yazıcıların duyurulup duyurulmayacağını belirliyor. Ardından:
sudo systemctl restart cups.service
Paketler kurulu kalsın ama hiçbir şey çalışmasın istiyorsan, ihtiyaç anında servisi başlatabilen socket ve path birimleri dahil hepsini kapat:
sudo systemctl disable --now cups.service cups.socket cups.path cups-browsed.service
Doğrula
sudo ss -tulpn | grep ':631'
- yoldan sonra bu komut hiçbir şey yazmaz. 2. yoldan sonra yalnızca
cupsdiçin127.0.0.1:631ve[::1]:631satırlarını görmelisin, UDP satırı olmamalı. Tuttuğun paketlerin güncel olduğunu da kontrol et:
apt policy cups cups-browsed cups-filters
Installed sürümü Candidate ile aynı olmalı. Değilse sudo apt update && sudo apt upgrade.
Aynı kontrolü her port için yap
CUPS yalnızca en sık karşılaşılan sürpriz. grep olmadan sudo ss -tulpn çalıştır ve 0.0.0.0 ya da [::] üzerindeki her satır için sor: bunun ne olduğunu biliyor muyum, internetin buna ihtiyacı var mı? Can yakanlar veritabanları (3306, 5432, 6379, 27017) ve yönetim panelleri. Docker'ın yayınladığı portlar da burada görünür ve ufw'yi tamamen atlar; bunları 127.0.0.1'e nasıl bağlayacağını SSH ve UFW rehberi anlatıyor. Giriş tarafı için fail2ban kurulumu rehberine bak; sunucunun zaten kötüye kullanıldığından şüpheleniyorsan neyi kontrol edeceğini hacklenen site rehberi anlatıyor.
Bir port açıldığında haberin olsun
Approvalens sunucu ajanı dinleyen her portu listeler, hangilerinin herkese açık olduğunu işaretler, herkese açık bir CUPS portunu kapatılması gerekenler arasında gösterir ve yeni bir port dinlemeye başlayınca sana e-posta atar.
Sık sorulan sorular
ss 127.0.0.1:631 gösteriyorsa 631 internete açık mı?
Hayır. 127.0.0.1 ve [::1] loopback adresleri; yalnızca sunucunun kendisinden erişilir. 0.0.0.0, [::] ya da sunucunun genel IP'si ağda dinlediği anlamına gelir.
2024'te yama yaptım. cups-browsed'u yine de kaldırmalı mıyım?
Yamalar bilinen hataları kapattı. Kaldırmak ise bütün bir kategoriyi ortadan kaldırır: bir web sunucusunda keşif servisinin yapacağı iş yok. Tutacaksan systemctl disable --now cups-browsed ile kapat.
CUPS'ı kaldırmak bir şeyi bozar mı?
Yazdırmayan bir sunucuda normalde bozmaz. apt onaydan önce neyi kaldıracağını gösterir; cevap o liste. Dikkatle okunacak tek şey masaüstü meta paketleri.
Güvenlik duvarım 631'i engelliyor. Bu yeterli mi?
Duvar açık ve kural yerinde kaldıkça dışarıdan gelen trafiği durdurur. Ama kullanmadığın bir servis, yamalanacak bir şey daha ve güvenlik duvarı değiştiği gün bir giriş yolu daha demek. Kaldır ya da localhost'ta tut, güvenlik duvarını da koru.
Eskimiş ya da yanlış bir şey mi gördün? Bize yaz, düzeltelim.
Bu rehberi İngilizce oku →Ücretsiz tarama
Kendi siteni kontrol et
Ücretsiz tarama ilk 50 sayfayı okur; puanını ve bulduğu tüm sorunları gösterir.