Skrypt doradcy reguły iptables

9

Istnieje serwer bez obrony iptables :ACCEPT all..

Na tym serwerze mogą znajdować się niestandardowe aplikacje.

Jeśli powinniśmy zahartować ten serwer (a więc zaprzeczyć wszystkim i pozwolić tylko na to, co jest potrzebne aplikacjom) za pomocą ścisłych reguł iptables, musimy dowiedzieć się ręcznie, z której aplikacji korzysta, dst/src port/protocola następnie musimy napisać reguły iptables dla im..

Pytanie : czy są jakieś skrypty, które mogą pomóc w zebraniu tych informacji z uruchomionej maszyny? (z dzienników?) - I automatyczne generowanie reguł iptables?

Jak tam jest audit2allowna SELinux. Tylko dla iptables!

Maszyna nie może mieć żadnych awarii!

Np .: skrypt „MAGIC” powinien działać na komputerze przez tydzień / miesiąc, zbierając informacje, a następnie po tygodniu / miesiącu skrypt będzie mógł wygenerować plik reguł iptables, którego możemy użyć.

Wiele osób może dostać się w tej sytuacji (jak zahartować serwer w odniesieniu do iptables). I byłoby świetnie, gdyby istniał skrypt / rozwiązanie, które może to zrobić: \

evachrystyna
źródło
Możesz też zablokować wszystko i przepuścić tylko to, co jest potrzebne. Możesz dowiedzieć się, co jest potrzebne z uruchomionym programem tcpdump trwającym około tygodnia.
Lawrence
Na tym komputerze nie może być żadnych awarii :)
evachristine
1
Co z fail2ban
totti
1
Możesz monitorować ruch lub sprawdzać otwarte porty, ale prawdopodobnie rzadko tęsknisz, ale ważny ruch wychodzący (specjalne aktualizacje bezpieczeństwa, wiadomości wysyłane w rzadkich przypadkach, ...). Tak długo, jak chcesz filtrować tylko ruch przychodzący, monitorowanie może być opcją.
jofel
Jest to całkiem możliwe, możesz napisać skrypt, aby zbudować zestaw reguł z uruchomionych aplikacji i odsłoniętych portów. Ale tak naprawdę nie chcesz tego robić, ponieważ 1) w większości przypadków nie wszystkie usługi muszą być narażone na działanie sieci i 2) mogą istnieć usługi, których absolutnie nie chcesz narażać na działanie sieci. Zamiast tego zrób to ręcznie, raz skonfiguruj dobry zestaw reguł i stamtąd. Jednym ze sposobów, aby to zrobić bezpiecznie, jest zbudowanie zestawu reguł z ESTABLISHED / RELATED i ACCEPT, a następnie sprawdzenie, czy odpowiednie reguły odpowiadają ruchowi. Kiedy będziesz zadowolony, zmień zasadę WEJŚCIA, aby upuścić.
Pedro

Odpowiedzi:

2

Zrób to ręcznie

sudo ss -tuanp

lub

sudo netstat -tuanp

Wyjaśnienie:

-t - show tcp sockets
-u - show udp sockets
-a - show all sockets
-n - show numeric, don't resolve 
-p - show process name
zatoczka
źródło
1

Uruchom tcpdumpna maszynie przez około tydzień, aby uchwycić średni ruch. Następnie możesz przeglądać ruch za pomocą Wireshark, aby sprawdzić, które porty są używane.

Polecenie to byłoby tcpdump -i <interface> -s 65535 -w <some-file>

Następnie możesz odwzorować to z powrotem za pomocą, netstat -tuanpaby zobaczyć, jakie PID / aplikacje używają jakich portów.

Teoretycznie można to skrypty.

Lawrence
źródło
1

Możesz zacząć od bardzo podstawowego szablonu, takiego jak https://gist.github.com/jirutka/3742890 , który pozwala tylko na ssh i ping, a także dodawać dowolne inne elementy ręcznie.

szybki hack skryptowy w celu wygenerowania reguł iptables dla aplikacji nasłuchującej na interfejsie publicznym (0.0.0.0) / tcp

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) }'

możesz również użyć iptables -I INPUT <number>do wstrzyknięcia reguł w określonej lokalizacji, z którą możesz wymienićiptables -nvL --line-numbers INPUT

Rabin
źródło
1

Niestety nie ma takiego skryptu, jaki kiedykolwiek widziałem, który mógłby działać w trybie uczenia się lub w trybie pasywnym, rejestrując całe użycie sieci, pobierając jego wyniki i generując rzeczywistą zaporę sieciową na podstawie iptablesdzienników.

Najlepszym rozwiązaniem będzie rozpoczęcie w prosty sposób i ciągłe dodawanie różnych elementów, gdy zaczniesz w pełni rozumieć usługi świadczone przez system. Musisz skorzystać z narzędzi, takich jak netstatporty, które są używane dla różnych usług, które hostujesz, a także jakie adresy IP mają do nich dostęp.

$ 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         

UWAGA: powyżej możesz zobaczyć, jakie usługi mam uruchomione na serwerze, które akceptują połączenia TCP, tj. „Nasłuchują” połączeń na różnych portach.

Nietrudno jest zacząć od rzeczy takich jak SSH (port 22) i HTTP (port 80), jeśli są one typowe dla twojego systemu, więc zrobiłbym tego typu usługi masowo naraz. W przypadku innych usług, takich jak LDAP lub NIS, możesz chcieć robić to w bardziej kontrolowany sposób, upewniając się, że nic się nie psuje podczas ich wprowadzania.

Narzędzia takie jak FireHOL , Firewall Builder (fwbuilder) i eztables mogą być pomocne podczas ataku na ten projekt, ponieważ zapewniają przyjemną warstwę abstrakcji od konieczności iptableręcznego tworzenia niestandardowych reguł, co może być trudne.

FireHOL

FireHOL to język (i program do jego uruchamiania), który tworzy bezpieczne, stanowe zapory ogniowe o dowolnej złożoności, od łatwych do zrozumienia, czytelnych dla człowieka konfiguracji.

przykład

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 to unikalne graficzne narzędzie zapory ogniowej, które pozwala użytkownikowi tworzyć obiekty, a następnie przeciągać i upuszczać te obiekty do zapór ogniowych, aby zbudować potężny system bezpieczeństwa dla pojedynczego komputera lub sieci komputerów. Fwbuilder obsługuje szeroką gamę zapór ogniowych (Cisco ASA / PIX, Linux iptables, ipfilter FreeBSD, pf OpenBSD i więcej), więc jego reguły mogą być wdrażane na wielu platformach. Rzućmy okiem na używanie Fwbuildera w Linuksie, który może stać się na całe życie sprawą potężnego systemu bezpieczeństwa.

przykład

   ss fwbuilder

eztables

Eztables pozwala szybko skonfigurować zaporę ogniową bez dotykania iptables. Składnia reguły zapory została zaprojektowana tak, aby była łatwa do odczytania i zastosowania.

W ten sposób pozwalasz całemu internetowi na dostęp do twojego serwera na porcie TCP 80:

  allow_in any $eth0 any 80/tcp

Eztables ma być prosty, a jednocześnie wydajny. Nie ma znaczenia, czy chcesz chronić laptopa, konfigurujesz router domowy, czy budujesz zaporę firmową.

Korzystanie z Fail2Ban

Mając podstawową iptableszaporę ogniową, prawdopodobnie będziesz chciał ją uzupełnić za pomocą narzędzia takiego jak Fail2Ban .

fragment

Fail2ban skanuje pliki dziennika (np. / Var / log / apache / error_log) i blokuje adresy IP, które pokazują złośliwe znaki - zbyt wiele awarii haseł, szukanie exploitów itp. Ogólnie Fail2Ban jest następnie używany do aktualizacji reguł zapory ogniowej w celu odrzucenia adresów IP przez określony czas, chociaż można również skonfigurować dowolne inne działanie (np. wysłanie wiadomości e-mail). Po wyjęciu z pudełka Fail2Ban zawiera filtry dla różnych usług (apache, kurier, ssh itp.).

Korzystanie z takich narzędzi pomoże ograniczyć narażenie, które Twój system będzie musiał znieść, gdy będziesz go hartował. Nawet jeśli jesteś dość przekonany, że twój system został zahartowany, możesz nadal chcieć kontynuować korzystanie z Fail2Ban w ramach swoich środków bezpieczeństwa.

Bibliografia

slm
źródło
0

Użyj reguł iptable, aby zarejestrować nowe połączenia, które również będą rejestrować udp.

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: "

Możesz określić inne, --log-level aby dzienniki były przechowywane w innym pliku niż / var / log / messages (musisz skonfigurować demona syslog).

Myślę, że powinieneś przeczytać główne dzienniki aplikacji, ponieważ niektóre serwery mają bardzo okresową aktywność, taką jak południe, koniec tygodnia, koniec miesiąca (kwartał, rok), więc nie przegapisz ważnej aktywności sieciowej serwera.

Ponieważ serwer ma krytyczne znaczenie, sprawia, że ​​macierz przepływu sieciowego serwera w ładnym arkuszu kalkulacyjnym (źródło ip, ip dest, protokół, port, aplikacja), który pomoże ci zbudować reguły.

Emmanuel
źródło
0

Wiem, że to nie jest skrypt i nie jest odpowiedzią na pytanie OP, ale to mój pomysł, którym chcę się podzielić z OP.

Mam wszystkie porty nasłuchujące z:

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

Może to może przybliżyć cię do napisania własnego skryptu. :)

Mr.TK
źródło
0

Możesz zacząć od czegoś takiego:

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!'

a następnie postępuj zgodnie z

iptables -P INPUT DROP

lub

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

Pierwsza linia używa netstat do listy procesów nasłuchiwania i ich portów. Następnie wygeneruje linie „iptables”, aby umożliwić każdemu z tych połączeń przychodzących. Małe podstawienie wyrażenia regularnego sed zostało dostosowane dla danych wyjściowych netstat na moim serwerze, więc może to wymagać drobnych poprawek. Kiedy to działa, powinieneś otrzymać coś takiego:

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

Dwie ważne rzeczy do zapamiętania:

1) Te reguły nic dla ciebie nie robią , dopóki nie umieścisz wiersza DROP lub REJECT na końcu lub nie ustawisz domyślnej polityki dla niedopasowanych pakietów. Reguły te zezwalają na pakiety, co jest sporne, jeśli domyślna zasada zezwala na wszystko, co nie jest dopasowane.

2) Zasady te są ambiwalentne w odniesieniu do źródłowego adresu IP. Z oryginalnego postu wygląda na to, że chcesz zezwolić wszystkim swoim klientom na korzystanie z serwera, a następnie przejrzyj dzienniki, aby uzyskać źródłowe adresy IP z portami docelowymi. Nie znam narzędzia do tego, więc ten skrypt uniemożliwi tylko tworzenie nowych usług na twoim serwerze, które nasłuchują na innych portach ... co jest czymś .

Jemenake
źródło