Iptables betiğimde olabildiğince ince taneli kurallar yazmayı deniyorum. Hangi kullanıcıların, kısmen güvenlik ve kısmen de bir öğrenme alıştırması olarak hangi hizmetleri kullanmasına izin verildiğini kısıtlıyorum.
3.6.2 çekirdeğini çalıştıran Debian 6.0.6'da iptables v1.4.16.2 kullanma.
Ancak henüz tam olarak anlamadığım bir konuya değindim ...
tüm kullanıcılar için giden portlar
Bu mükemmel çalışıyor. Genel durum izleme kuralım yok.
## Giden bağlantı noktası 81 $ IPTABLES -A ÇIKIŞ -p tcp --dport 81 -m conntrack --ctstate YENİ, KURULDU -j KABUL $ IPTABLES -A GİRİŞ -p tcp --spor 81 -s $ MYIP -m conntrack --ctstate KURULDU -j KABUL
kullanıcı eşleşmeli giden bağlantı noktaları
## useraccount için giden bağlantı noktası 80 $ IPTABLES -A ÇIKIŞ - maç sahibi - kullanıcı sahibi useraccount -p tcp --dport 80 -m conntrack --ctstate YENİ, KURULDU --spor 1024: 65535 -j KABUL $ IPTABLES -A GİRİŞ -p tcp --sport 80 --dport 1024: 65535 -d $ MYIP -m conntrack --ctstate KURULDU -j KABUL
Bu, 80 numaralı bağlantı noktasının yalnızca "useraccount" hesabı için kullanılmasına izin verir, ancak TCP trafiği için böyle kuralların sorunları vardır.
## Varsayılan giden günlük + engelleme kuralları $ IPTABLES -A OUTPUT -j LOG --log-ön eki "BAD OUTGOING" - log-ip-options --log-tcp-options --log-uid $ IPTABLES -A ÇIKIŞ -j DAMLA
Sorun
Yukarıdaki işler, kullanıcı "useraccount" mükemmel dosyaları alabilirsiniz. Sistemdeki başka hiçbir kullanıcı 80 numaralı bağlantı noktasına giden bağlantılar kuramaz.
useraccount @ host: $ wget http://cachefly.cachefly.net/10mb.test
Ama yukarıdaki wget syslog x7 bırakılan girişler bırakır:
18 Ekim 02:00:35 xxxx çekirdeği: KÖTÜ ÇIKIŞ GİRİŞİ = ÇIKIŞ = eth0 SRC = xx.xx.xx.xx DST = 205.234.175.175 LEN = 40 TOS = 0x00 PREC = 0x00 TTL = 64 ID = 12170 DF PROTO = TCP SPT = 37792 DPT = 80 SEQ = 164520678 ACK = 3997126942 PENCERE = 979 RES = 0x00 ACK URGP = 0
UDP trafiğindeki benzer kurallar için bu düşüşleri alamıyorum. Zaten hangi kullanıcıların DNS istekleri yapabileceğini sınırlayan kurallar zaten var.
Bırakılan giden ACK paketleri, anlamadığım kök hesaptan (URGP = 0) geliyor gibi görünüyor. Useraccount'u root için değiştirdiğimde bile.
ACK paketlerinin yeni olarak kategorize edildiğine inanıyorum çünkü conntrack, 3 yollu el sıkışmasının 3. adımından sonra bağlantıları izlemeye başlıyor, ancak neden bırakılıyor?
Bu damlalar güvenle göz ardı edilebilir mi?
Düzenle
Bu yüzden, genellikle benim için iyi çalışan kurallar görüyorum:
$ IPTABLES -A ÇIKIŞ -s $ MYIP -p tcp -m tcp --dport 80 -m durum --stat YENİ, KURULU -j KABUL $ IPTABLES -A GİRİŞ -p tcp -m tcp --spor 80 -d $ MYIP -m durum --stat KURULDU -j KABUL
"-M conntrack --ctstate" için "-m state --state" ifadesini devlet eşleşmesi geçersiz olduğu için değiştirdim.
Genel durum izleme kurallarına sahip olmak en iyi yöntem midir? Yukarıdaki kurallar doğru kabul edilmiyor mu?
Giden kullanıcıların bağlantıları üzerinde sıkı kontrol için böyle bir şey daha iyi olur mu?
$ IPTABLES -A INPUT -m conntrack --ctstate ESTABLISHED -j KABUL ET $ IPTABLES -A OUTPUT -m conntrack --ctstate KURULDU -j KABUL $ IPTABLES -A ÇIKIŞ -p tcp --dport 80 -s $ SERVER_IP_TUNNEL -m conntrack --ctstate YENİ -m sahibi --uid-sahibi useraccount -j KABUL $ IPTABLES -A ÇIKIŞ -p tcp --dport 80 -s $ SERVER_IP_TUNNEL -m conntrack --ctstate YENİ -m sahip --uid-sahip otheraccount -j KABUL