Jak mogę zablokować wszystkie oprócz trzech portów w Ubuntu?

22

Jak mogę zablokować wszystkie porty z wyjątkiem 1962, 999, 12020?

Jeden port dla SSH i dwa inne dla pewnego rodzaju skryptu. Konieczne jest więc zezwolenie na wychodzenie przez te porty, prawda?

Moje iptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Przepraszam, ale jestem prawdziwym nowicjuszem, jeśli chodzi o te rzeczy i chcę po prostu zwiększyć bezpieczeństwo mojego serwera.

okapa
źródło
Dlaczego nie skorzystać z UFW?
Soviero

Odpowiedzi:

25

Na początku powinieneś zawsze spłukać, aby upewnić się, co już zdefiniowano… nic

iptables -F

Następnie ustaw domyślną zasadę łańcucha INPUT na DROP, jeśli osiągnięty jest koniec i żadna reguła nie jest dopasowana:

iptables -P INPUT DROP

Aby upewnić się, że pętla zwrotna nie zostanie naruszona, należy dodać

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

aby zezwolić na cały ruch w lo-if i każdy ruch przychodzący dla ustanowionych połączeń. Następnie dodać każdej reguły potrzeba do swoich usług (nie zapomnij, aby otworzyć ssh jeśli trzeba go jeszcze jesteś out!) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Trochę sztuczki, którą robię, aby uchronić siebie i innych przed przypadkowym wywierceniem otworów w zabezpieczeniach, dodam w końcu:

iptables -A INPUT -j DROP

Ten wiersz pasuje do wszystkiego dla łańcucha INPUT, a zasady nie powinny niczego otrzymywać. zaletą tego jest to, że nawet jeśli dodasz regułę ACCEPT po jakimś czasie po zainicjowaniu zestawu reguł, nigdy nie zostanie ona sprawdzona, ponieważ wszystko zostało wcześniej usunięte. dzięki czemu masz wszystko w jednym miejscu.

W przypadku twojego pytania cała sprawa wygląda następująco:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP
Mojżesz
źródło
1
Tylko dla wyjaśnienia: -Pustawia politykę w łańcuchu. W rzeczywistości nie dodaje reguły. Strategia łańcucha wskazuje akcję, która ma zostać wykonana na pakiecie, jeśli osiągnięty zostanie koniec łańcucha. Z tego powodu mądrze jest dodać swoje reguły przed ustaleniem DROPzasad.
Belmin Fernandez
Jeśli dobrze pamiętam, zwykle nie ma znaczenia, gdzie ustawić zasadę… może powinienem nieco zmodyfikować swoją odpowiedź.
Mose
3
jedna uwaga: zachowaj ostrożność, ustawiając domyślne zasady odmowy i opróżniania podczas konfigurowania zapory ogniowej przez ssh. Zamkniesz się. Tak, zrobiłem to. :-) Z iptables -A INPUT -j DROPtego właśnie powodu zazwyczaj tworzę ostatnią regułę .
Sirex
Podkreśliłem trochę moje ostrzeżenie ssh ;-)
Mose
@Mose: Poprawnie, nie ma to znaczenia ogólnego. Próbowałem to podkreślić. Ale może to spowodować, że zostaniesz zablokowany, jak już wspomniano heh.
Belmin Fernandez
20

Odpowiedź od nowicjusza takiego jak ty :-) Musiałem także zabezpieczyć mój serwer Ubuntu, nauka iptables była bólem, z którym nie mogłem się poradzić. UFW (Uncomplicated Firewall) to program, który sprawia, że ​​konfiguracja zapory jest tak prosta, jak to możliwe.

  • zainstaluj ufw:

    sudo apt-get install ufw
    
  • wyłącz go natychmiast (musiałem uruchomić bootowanie ratunkowe, ponieważ zostałem zablokowany z własnego logowania SSH):

    sudo ufw disable
    
  • ustaw „odmawiaj” jako domyślną regułę (blokuje wszystkie porty):

    sudo ufw default deny
    
  • zezwól na potrzebne porty:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • jeśli masz pewność, że powyższe zasady nie przerywają połączenia ssh, włącz ufw:

    sudo ufw enable
    

Dokumenty są dobrze napisane i zawierają więcej przykładów: https://help.ubuntu.com/community/UFW

Vlad Gerasimov
źródło
1
Podczas pracy z konfiguracjami zapory dobrym pomysłem może być utworzenie zadania cron, które ponownie wyłącza zaporę. Na wypadek, gdybyś został zablokowany.
pymkin 19.04.2014
Zauważ, że to nie działa z ufw 0.35, zgłaszając błędy jak ERROR: Bad destination addressiERROR: Bad source address
Dave
I jak zezwolić wszystkim portom z wyjątkiem jednego portu dla określonego interfejsu? Korzystam z domyślnej reguły odmowy i chcę zablokować port DNS 53 w interfejsie Ethernet, aby zapobiec wyciekom DNS podczas korzystania z VPN. Obecnie muszę zezwolić wszystkim portom, których chcę używać, na prywatne zakresy adresów IP, co nie jest zbyt wygodne.
baptx