Łatwa konfiguracja i przykłady IPTables na Ubuntu 16.04

Wprowadzenie

iptablesjest potężnym narzędziem używanym do konfigurowania zintegrowanej zapory jądra Linux. Jest on fabrycznie zainstalowany w większości dystrybucji Ubuntu, jednak jeśli używasz dostosowanej wersji Ubuntu lub działasz w kontenerze, najprawdopodobniej będziesz musiał zainstalować ją ręcznie.

sudo apt-get install iptables iptables-persistent

Jeśli po instalacji pojawi się pytanie, czy zapisać bieżące reguły, w tej chwili nie ma to znaczenia, ponieważ zamierzasz usunąć lub utworzyć nowe reguły później.

Porady

Możesz użyć netcatpolecenia (na innym komputerze niż serwer), aby sprawdzić, który z portów jest otwarty, czy zamknięty.

nc -z -w5 -v SERVER_IP PORT
  • nc to polecenie netcat.
  • -z po prostu wyślij pakiet bez ładunku.
  • -w5 poczekaj do 5 sekund na odpowiedź.
  • -v tryb pełny.
  • Zamień na SERVER_IPswój adres serwera.
  • Zastąp PORTport, który chcesz przetestować, jeśli jest otwarty (np 22.).

Na serwerze możesz użyć netstatpolecenia, aby zobaczyć, które porty nasłuchują połączeń.

sudo netstat -tulpn

Uwaga: Chociaż netstatprzydatne jest znalezienie portów, z którymi chcesz pracować, powinieneś być świadomy aplikacji, które obecnie zainstalowałeś na serwerze i które porty nasłuchują, nie musisz zezwalać na każdy port, który znajdziesz na netstatwyjściu .

Składnia

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTdodaj regułę do INPUTłańcucha, łańcuch to grupa reguł, z których najczęściej korzystamy w tym przewodniku INPUT, OUTPUTi PREROUTING.
  • -p tcpustaw tcpjako protokół, do którego będzie miała zastosowanie ta reguła, możesz także użyć innych protokołów, takich jak udp, icmplub all.
  • -m tcpużyj tcpmodułu. iptablesobsługuje dodatkowe funkcje za pośrednictwem modułów, z których niektóre są już fabrycznie zainstalowane, iptablesa inne, takie jak geoipmoduł.
  • --dport 22polecenia zaczynające się od --wskazują dodatkowe opcje dla wcześniej używanego modułu, w tym przypadku powiemy tcpmodułowi, aby zastosował się tylko do portu 22.
  • -m geoipużyj geoipmodułu. Ograniczy to pakiety dla poszczególnych krajów (więcej informacji w kroku 5).
  • --src-cc PEpowiedz geoipmodułowi, aby ograniczył przychodzące pakiety do tych, które pochodzą z Peru. Aby wyszukać więcej kodów krajów ISO 3166 country codesw Internecie.
  • -j ACCEPT-jteza mówi iptables, co zrobić, jeśli pakiet pasuje ograniczeń określonych w poprzednich argumentów. W tym przypadku będzie to ACCEPTte pakiety, są inne opcje REJECT, DROPi wiele innych. Możesz znaleźć więcej opcji, wyszukując iptables jump targetsw Internecie.

1. Podstawy

Wymień wszystkie reguły.

sudo iptables -L

Wymień wszystkie polecenia, które zostały użyte do utworzenia aktualnie używanych reguł, przydatne do edycji lub usuwania reguł.

sudo iptables -S

Aby usunąć określoną regułę, wybierz regułę sudo iptables -Si zastąp -A-D.

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Wyświetl wszystkie numerowane reguły w INPUTłańcuchu.

sudo iptables -L INPUT --line-numbers

Usuń regułę numerowaną.

sudo iptables -D INPUT 2

Aby wyczyścić wszystkie zasady.

sudo iptables -F

Ostrzeżenie: możesz stracić połączenie, jeśli jest połączone przez SSH .

Wyczyść tylko reguły w OUTPUTłańcuchu.

sudo iptables -F OUTPUT

2. Utwórz początkowe reguły

Zezwalaj SSHna eth0interfejs

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 zastosuj regułę do określonego interfejsu, aby zezwolić na dowolny interfejs, usuń to polecenie.

Aby ograniczyć przychodzące pakiety do określonego adresu IP (tj 10.0.3.1/32.).

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 określa adres IP / podsieć, z której można nawiązywać połączenia.

Ustaw domyślne reguły łańcucha.

Ostrzeżenie: przed kontynuowaniem upewnij się, że zastosowałeś poprawne reguły SSH, jeśli pracujesz na zdalnym serwerze .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP odrzuca wszystkie przychodzące pakiety (tzn. nikt nie będzie mógł połączyć się z twoimi działającymi serwerami, takimi jak Apache, SQL itp.).
  • -P FORWARD DROP odrzuca wszystkie przekazane pakiety (tj. gdy używasz swojego systemu jako routera).
  • -P OUTPUT ACCEPTzezwala na wszystkie pakiety wychodzące (tj. podczas wykonywania HTTPżądania).

Zezwól na cały ruch na interfejsie sprzężenia zwrotnego ( zalecane ).

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3. Utrwal zasady

Zapisz aktualne iptableszasady.

sudo netfilter-persistent save
sudo netfilter-persistent reload

Jeśli działasz w kontenerze, netfilter-persistentpolecenie najprawdopodobniej nie zadziała, więc musisz ponownie skonfigurować iptables-persistentpakiet.

sudo dpkg-reconfigure iptables-persistent

4. Zezwalaj na połączenia wychodzące

Zezwalaj na zapytania DNS.

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

Użyj statemodułu, aby zezwolić na pakiety wychodzące RELATEDi je ESTABLISHEDwychodzić.

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Zezwól na pożądane porty; w tym przypadku HTTPporty.

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Więcej portów, których możesz użyć.

  • FTP: tcp na porcie 21
  • HTTPS: tcp na porcie 443
  • DHCP: udp w porcie 67
  • NTP: udp na porcie 123

Uwaga: jeśli chcesz zezwolić, apt-getkonieczne może być zezwolenie FTPiHTTPS .

Zezwalaj na zwracany ruch tylko dla połączeń RELATEDjuż ESTABLISHEDnawiązanych ( zalecane, ponieważ czasami wymagana jest komunikacja dwukierunkowa).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Inne przydatne zasady

Zezwalaj na żądania ping z zewnątrz.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Przekaż ruch do eth0portu 2200do 10.0.3.21:22(przydatne, jeśli chcesz udostępnić serwer SSH działający w kontenerze).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

Jeśli pomyślnie zalogujesz się na serwerze za pomocą SSH, zostanie utworzone trwałe połączenie (tzn. Nie będzie żadnych nowych połączeń, nawet jeśli jesteś połączony przez ponad 1 godzinę). Jeśli się nie powiedzie i spróbujesz zalogować się ponownie, zostanie utworzone nowe połączenie. Spowoduje to zablokowanie ciągłych prób logowania SSH poprzez ograniczenie nowych połączeń na godzinę.

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

Przekieruj wszystkie żądania z portu 443do portu 4430(przydatne, jeśli chcesz połączyć się z portem 443bez root).

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 interfejs sieciowy.
  • -m geoip moduł blokowy kraju (patrz krok 5).

Ostrzeżenie: nie używaj lo, system operacyjny odrzuci wszystkie pakiety przekierowane do interfejsu pętli zwrotnej .

5. Zezwól lub zablokuj całe kraje

5.1 Instalacja xtables-addons

Możesz zainstalować xtables-addonsmoduł różnymi metodami, skorzystaj z metody instalacji, która najbardziej Ci odpowiada.

  • Zainstaluj za pomocą apt-get.

    sudo apt-get install xtables-addons-common
    
  • Zainstaluj za pomocą module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • Zainstaluj ze źródła.

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

Zbuduj bazę danych „krajów”.

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

Uruchom ponownie system.

sudo reboot

Po xtables-addonspomyślnym zainstalowaniu, po pierwszym ponownym uruchomieniu, uruchom, w depmodprzeciwnym razie blokowanie kraju nie będzie działać poprawnie (jest to wymagane tylko po raz pierwszy).

sudo depmod 

Utwórz skrypt w, /etc/cron.monthly/geoip-updateraby co geoipmiesiąc aktualizować bazę danych.

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

Uczyń /etc/cron.monthly/geoip-updaterplik wykonywalny.

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2 Przykładowe zasady

_Uwaga: Jeśli pojawia się iptables: No chain/target/match by that namebłąd podczas próby zastosowania geoipreguły, możliwe, że xtables-addonsnie została poprawnie zainstalowana. Wypróbuj inną metodę instalacji.

Blokuj wszystkie przychodzące pakiety z Chin, Hongkongu, Rosji i Korei.

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

Zezwól na przychodzące pakiety do portu 80z dowolnego miejsca z wyjątkiem powyższych krajów.

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Zezwalaj na przychodzące pakiety w ens3interfejsie na porcie 22tylko z Peru (możesz wybrać kod kraju, z którego chcesz akceptować pakiety, na przykład USdla Stanów Zjednoczonych).

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

Zezwalaj na przychodzące pakiety 443tylko do portu z Peru.

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


Leave a Comment

Funkcjonalności warstw architektury referencyjnej Big Data

Funkcjonalności warstw architektury referencyjnej Big Data

Przeczytaj blog, aby w najprostszy sposób poznać różne warstwy w architekturze Big Data i ich funkcjonalności.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Chcesz zobaczyć rewolucyjne wynalazki Google i jak te wynalazki zmieniły życie każdego człowieka dzisiaj? Następnie czytaj na blogu, aby zobaczyć wynalazki Google.

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Whatsapp w końcu uruchomił aplikację Desktop dla użytkowników komputerów Mac i Windows. Teraz możesz łatwo uzyskać dostęp do Whatsapp z systemu Windows lub Mac. Dostępne dla Windows 8+ i Mac OS 10.9+

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

Energia jądrowa jest zawsze pogardzana, nigdy jej nie szanujemy z powodu przeszłych wydarzeń, ale nie zawsze jest zła. Przeczytaj post, aby dowiedzieć się więcej na ten temat.

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Koncepcja autonomicznych samochodów, które wyjadą na drogi za pomocą sztucznej inteligencji, to marzenie, które mamy już od jakiegoś czasu. Ale pomimo kilku obietnic nigdzie ich nie widać. Przeczytaj ten blog, aby dowiedzieć się więcej…

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Wzrasta liczba ataków ransomware, ale czy sztuczna inteligencja może pomóc w radzeniu sobie z najnowszym wirusem komputerowym? Czy AI jest odpowiedzią? Przeczytaj tutaj, wiedz, że sztuczna inteligencja jest zmorą lub zgubą

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

Sztuczna inteligencja nie jest dla ludzi nową nazwą. Ponieważ sztuczna inteligencja jest włączona do każdego strumienia, jednym z nich jest opracowywanie narzędzi zwiększających ludzką wydajność i dokładność. Skorzystaj z tych niesamowitych narzędzi uczenia maszynowego i uprość swoje codzienne zadania.

Wgląd w 26 technik analizy Big Data: część 2

Wgląd w 26 technik analizy Big Data: część 2

Zawsze potrzebujemy Big Data Analytics do efektywnego zarządzania danymi. W tym artykule omówiliśmy kilka technik analizy Big Data. Sprawdź ten artykuł.

Ataki DDOS: krótki przegląd

Ataki DDOS: krótki przegląd

Czy jesteś również ofiarą ataków DDOS i nie masz pewności co do metod zapobiegania? Przeczytaj ten artykuł, aby rozwiązać swoje pytania.