iptables kural danışmanı komut dosyası


9

Iptables savunması olmayan bir sunucu var :ACCEPT all..

Bu sunucuda özel uygulamalar olabilir.

Sıkı iptables kuralları ile bu sunucuyu sertleştirmemiz gerekiyorsa (bu yüzden hepsini inkar etmeli ve sadece uygulamalar tarafından ihtiyaç duyulan şeylere izin vermeliyiz), hangi uygulamanın hangisini kullandığını elle bulmalıyız dst/src port/protocolve sonra iptables kurallarını yazmalıyız onları ..

Soru : Bu bilgilerin çalışan bir makineden toplanmasına yardımcı olabilecek komut dosyaları var mı? (günlüklerden?) - Ve otomatik olarak iptables kurallarını oluşturmak?

Gibi orada audit2allowüzerinde SELinux. Sadece iptables!

Makinede kesinti olamaz!

Örn .: "MAGIC" betiği makinede bir hafta / ay çalışmalı, bilgi toplanmalı, daha sonra bir hafta / ay sonra betiği kullanabileceğimiz bir iptables kural dosyası oluşturabilecektir.

Birçok insan bu duruma girebilir (iptables ile ilgili bir sunucuyu nasıl sertleştirebiliriz). Ve bunu yapabilen bir komut dosyası / çözüm olsaydı harika olurdu: \


Alternatif olarak, her şeyi engelleyin ve sadece ihtiyaç duyulan şeylere izin verin. Bir hafta kadar süren bir tcpdump ile neyin gerekli olduğunu öğrenebilirsiniz.
Lawrence

Bu makinede kesinti olamaz :)
evachristine

1
Peki fail2ban
totti

1
Trafiği izleyebilir veya açık bağlantı noktalarını kontrol edebilirsiniz, ancak büyük olasılıkla nadiren, ancak önemli giden trafiği kaçırırsınız (özel güvenlik güncellemeleri, nadir durumlarda gönderilen postalar, ...). Yalnızca gelen trafiği filtrelemek istediğiniz sürece izleme bir seçenek olabilir.
jofel

Bunu yapmak oldukça mümkündür, çalışan uygulamalardan ve açıktaki bağlantı noktalarından bir kural kümesi oluşturmanın bir yolunu yazabilirsiniz. Ancak bunu gerçekten yapmak istemezsiniz çünkü 1) çoğu durumda tüm hizmetlerin ağa maruz kalması gerekmez ve 2) kesinlikle ağa maruz kalmak istemediğiniz hizmetler olabilir. Bunun yerine elle yapın, bir kez, iyi bir kural kümesi ayarlayın ve oradan gidin. Güvenli bir şekilde yapmanın bir yolu, KURULDU / İLGİLİ ve KABUL kuralları ile ayarlanan kural oluşturmak ve sonra ilgili kuralların trafiğe uygun olup olmadığını kontrol etmektir. Mutlu olduğunuzda, GİRİŞ politikasını değiştirmek için değiştirin.
Pedro

Yanıtlar:


2

Elle yap

sudo ss -tuanp

veya

sudo netstat -tuanp

Açıklama:

-t - show tcp sockets
-u - show udp sockets
-a - show all sockets
-n - show numeric, don't resolve 
-p - show process name

1

tcpdumpOrtalama trafiği yakalamak için makinede bir hafta kadar çalıştırın . Ardından hangi bağlantı noktalarının kullanıldığını görmek için daha sonra wireshark kullanarak trafiğe göz atabilirsiniz.

Bunun komutu tcpdump -i <interface> -s 65535 -w <some-file>

Daha sonra netstat -tuanphangi PID'lerin / uygulamaların hangi bağlantı noktalarını kullandığını görmek için bunu kullanarak eşleyebilirsiniz .

Teorik olarak bu senaryo yazılabilir.


1

Yalnızca ssh ve ping'e izin veren ve başka herhangi bir şeyi manuel olarak ekleyen https://gist.github.com/jirutka/3742890 gibi çok temel bir şablonla başlayabilirsiniz .

genel arabirimde (0.0.0.0) / tcp dinleyerek uygulamanız için iptables kuralları oluşturmak üzere hızlı bir komut dosyası kesmek

netstat -lnpt | egrep '0.0.0.0:[0-9]+' | awk '{print $4,$7}' | \
sed -E -e 's/0.0.0.0://g' -e 's|[0-9]+/||' | \
awk '{printf ("iptables -A INPUT -p tcp --dport %5d --syn -m conntrack --ctstate NEW -m comment %s \n", $1,$2) }'

Ayrıca kullanabilirsiniz iptables -I INPUT <number>sizinle listeleyebilirsiniz hangi belirli bir konumdaki kuralları enjekte etmekiptables -nvL --line-numbers INPUT


1

Ne yazık ki, tüm ağ kullanımınızı iptablesgünlüğe kaydederek , sonuçlarını alarak ve günlüklerinden kullanarak gerçek bir güvenlik duvarı oluşturarak bir öğrenme modunda veya pasif modda çalıştırabildiğim böyle bir komut dosyası yok .

En iyi seçeneğiniz, basit bir şekilde başlamak ve sisteminizin hangi hizmetleri sunduğunu tam olarak anlamaya başlarken sürekli olarak çeşitli parçaları eklemeye devam etmek olacaktır. Barındırdığınız netstatçeşitli hizmetler için hangi bağlantı noktalarının kullanıldığını ve bunlara hangi IP adreslerine eriştiğini görmek gibi araçları kullanmanız gerekecektir .

$ sudo netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:890                 0.0.0.0:*                   LISTEN      26149/ypbind        
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      26226/python        
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      26221/./hpiod       
tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      26237/snmpd         
tcp        0      0 0.0.0.0:809                 0.0.0.0:*                   LISTEN      26067/rpc.statd     
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      26038/portmap       
tcp        0      0 0.0.0.0:35604               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      26249/sshd          
tcp        0      0 0.0.0.0:631                 0.0.0.0:*                   LISTEN      26257/cupsd         
tcp        0      0 :::22                       :::*                        LISTEN      26249/sshd          
tcp        0      0 :::631                      :::*                        LISTEN      26257/cupsd         

NOT: Yukarıda, TCP bağlantılarını kabul eden bir sunucuda hangi hizmetleri çalıştırdığımı görebilirsiniz, yani çeşitli bağlantı noktalarındaki bağlantıları "dinliyorlar".

Bunlar sisteminize özgü ise SSH (port 22) ve HTTP (port 80) gibi şeylerle başlamak için bir beyinsizdir, bu yüzden bu tür hizmetleri bir kerede toplu olarak yaparım. LDAP veya NIS gibi diğer hizmetler için, bunları daha kontrollü bir şekilde yapmak isteyebilirsiniz, bu da onları tanıtırken işlerin bozulmamasını sağlar.

Gibi araçları firehol , Firewall Builder (fwbuilder) ve eztables onlar inşa özel zorunda soyutlama güzel katmanı sağlamak beri, bu projeyi saldırı olarak yararlı olabilir iptableyanıltıcı olabilir elle kurallar.

firehol

FireHOL, anlaşılması kolay, insan tarafından okunabilir yapılandırmalardan herhangi bir karmaşıklıkta güvenli, durum bilgisi olan güvenlik duvarları oluşturan bir dildir (ve onu çalıştırmak için bir program).

misal

transparent_squid 8080 "squid root" inface eth0

interface eth0 mylan
    policy accept

interface ppp+ internet
    server smtp accept
    server http accept
    server ftp  accept
    server ssh  accept src example.firehol.org

    client all  accept

router mylan2internet inface eth0 outface ppp+
    masquerade
    route all accept
fwbuilder

Fwbuilder, kullanıcının tek bir PC veya PC ağı için güçlü bir güvenlik sistemi oluşturmak için kullanıcının nesne oluşturmasına ve ardından bu nesneleri güvenlik duvarlarına sürükleyip bırakmasına izin veren benzersiz bir grafik güvenlik duvarı aracıdır. Fwbuilder çok çeşitli güvenlik duvarlarını (Cisco ASA / PIX, Linux iptables, FreeBSD'nin ipfilter, OpenBSD's pf ve daha fazlası) destekler, böylece kuralları birden çok platforma uygulanabilir. Güçlü bir güvenlik sistemi ile hayat boyu sürecek bir ilişki haline gelebilecek Linux'ta Fwbuilder'ı kullanmaya bir bakalım.

misal

   ss fwbuilder

eztables

Eztables, iptables'a dokunmadan hızlıca bir güvenlik duvarı yapılandırmanıza olanak tanır. Güvenlik duvarı kuralı sözdizimi, okunması ve uygulanması kolay olacak şekilde tasarlanmıştır.

TCP-port 80'deki tüm internetin web sunucunuza erişmesine şu şekilde izin verirsiniz:

  allow_in any $eth0 any 80/tcp

Eztables basit ama güçlü olacak şekilde tasarlanmıştır. Dizüstü bilgisayarınızı korumak, bir ev yönlendiricisi kurmak veya bir şirket güvenlik duvarı oluşturmak isteyip istemediğiniz önemli değildir.

Fail2Ban Kullanımı

İlkel bir iptablesgüvenlik duvarı varken , Fail2Ban gibi bir araç kullanarak iltifat etmek isteyeceksiniz .

alıntı

Fail2ban, günlük dosyalarını (örn. / Var / log / apache / error_log) tarar ve kötü amaçlı işaretleri gösteren IP'leri yasaklar - çok fazla şifre hatası, açıklardan yararlanma vb. Arama yapar. Genel olarak Fail2Ban, IP adreslerini reddetmek için güvenlik duvarı kurallarını güncellemek için kullanılır isteğe bağlı başka bir işlem (örneğin, e-posta gönderme) de yapılandırılabilse de. Kutudan çıkar çıkmaz Fail2Ban çeşitli servisler (apache, courier, ssh, vb.) İçin filtrelerle birlikte gelir.

Bunun gibi araçlar kullanmak, sisteminizi sertleştirmeye devam ederken dayanması gereken pozlamayı sınırlamanıza yardımcı olacaktır. Sisteminizin sertleştiğine oldukça ikna olsanız bile, güvenlik önlemlerinizin bir parçası olarak Fail2Ban'ı kullanmaya devam etmek isteyebilirsiniz.

Referanslar


0

Udp'yi de günlüğe kaydedecek yeni bağlantıları kaydetmek için iptable kurallarını kullanın.

iptables -I INPUT -m state --state NEW -j LOG --log-prefix "New inbound connection: "
iptables -I OUTPUT -m state --state NEW -j LOG --log-prefix "New outbound connection: "

--log-level Günlüklerin / var / log / messages dışında başka bir dosyaya sahip olmasını farklı belirleyebilirsiniz (syslog arka plan programını yapılandırmanız gerekir).

Bazı sunucunun öğle, hafta sonu, ay sonu (çeyrek, yıl) gibi çok periyodik bir etkinliği olduğu için ana uygulama günlüklerini okumalısınız, bu nedenle sunucunun önemli bir ağ etkinliğini kaçırmayacaksınız.

Sunucu kritik olduğundan, sunucunun ağ akış matrisini kuralları oluşturmanıza yardımcı olacak güzel bir e-tabloda (ip kaynağı, ip dest, protokol, bağlantı noktası, uygulama) yapar.


0

Bunun bir senaryo olmadığını ve OP'nin sorusuna bir cevap olmadığını biliyorum, ancak OP ile paylaşmak istediğim bir fikrim.

Tüm dinleme bağlantı noktaları var:

netstat -an | egrep 'tcp .*LISTEN' | awk -F" " '{print $4}' | awk -F":" '{print $NF}'

Belki bu size kendi senaryoyu yazmaya daha da yakınlaştırabilir. :)


0

Böyle bir şeyle başlayabilirsiniz:

netstat -n -l -p | egrep "^(tcp|tcp6|udp)" | grep LISTEN | sed -r 's!^(tcp|tcp6|udp)\s.*:([0-9]+).*LISTEN\s+.*/(.*)!iptables -A INPUT -p \1 --dport \2 -j ACCEPT # \3!'

ve ardından takip et

iptables -P INPUT DROP

veya

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

İlk satır, dinleme işlemlerini ve bağlantı noktalarını listelemek için netstat'ı kullanmaktır. Daha sonra bu gelen bağlantıların her birine izin vermek için "iptables" satırları oluşturur. Küçük sed regex ikamesi sunucumdaki netstat çıktısı için özelleştirildi, bu yüzden sizin için biraz ayar gerektirebilir. Çalıştığında, aşağıdaki gibi bir şeyle sonuçlanmalısınız:

iptables -A INPUT -p tcp --dport 111 -j ACCEPT # rpcbind       
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # sshd          
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # master        
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # mysqld        
iptables -A INPUT -p tcp --dport 49476 -j ACCEPT # rpc.statd     
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT # postgres.bin  
iptables -A INPUT -p tcp --dport 55371 -j ACCEPT # rpc.statd

Dikkat edilmesi gereken iki önemli nokta:

1) Sonuna bir DROP veya REJECT satırı koyana veya eşleşmeyen paketler için varsayılan ilkeyi yapana kadar bu kurallar sizin için hiçbir şey yapmaz . Bu kurallar izin varsayılan ilke şey eşleşmedi izin ise tartışmalı, hangi paketleri.

2) Bu kurallar kaynak IP konusunda kararsızdır . Orijinal yayınınızdan, tüm istemcilerinizin sunucuyu kullanmasına izin vermek istediğiniz gibi görünüyor, ardından hedef bağlantı noktalarına gitmek için kaynak IP'leri almak üzere günlükleri inceleyin . Bunu yapmak için bir araç bilmiyorum, bu yüzden bu komut dosyası sadece insanların sunucunuzda diğer bağlantı noktalarını dinleyen yeni hizmetler yapmasını engelleyecektir ... bir şey .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.