Лесна конфигурация на IPTables и примери в Ubuntu 16.04

Въведение

iptablesе мощен инструмент, използван за конфигуриране на интегрираната защитна стена на Linux ядрото. Той идва предварително инсталиран в повечето дистрибуции на Ubuntu, но ако използвате персонализирана версия на Ubuntu или работите в контейнер, най-вероятно ще трябва да го инсталирате ръчно.

sudo apt-get install iptables iptables-persistent

След инсталирането, ако бъдете попитани дали да запазите текущите си правила, в момента няма значение, защото ще премахнете или ще създадете нови правила по-късно.

Съвети

Можете да използвате netcatкомандата (на компютър, различен от вашия сървър), за да тествате кои от вашите портове са отворени или затворени.

nc -z -w5 -v SERVER_IP PORT
  • nc е командата netcat.
  • -z просто изпратете пакет без полезен товар.
  • -w5 изчакайте до 5 секунди за отговор.
  • -v многословен режим.
  • Заменете SERVER_IPс адреса на вашия сървър.
  • Заменете PORTс порта, който искате да тествате дали е отворен (напр 22.).

На вашия сървър можете да използвате netstatкомандата, за да видите кои портове в момента слушат за връзки.

sudo netstat -tulpn

Забележка: Въпреки че netstatе удобно да намерите портовете, с които искате да работите, трябва да сте наясно с приложенията, които в момента сте инсталирали на вашия сървър и кои портове слушат, не е нужно да разрешавате всеки порт, който намерите в netstatизхода .

Синтаксис

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTдобавете правило към INPUTверигата, веригата е група от правила, тези, които използваме най-много в това ръководство, ще бъдат INPUT, OUTPUTи PREROUTING.
  • -p tcpзадайте tcpкато протокол, към който ще се прилага това правило, можете да използвате и други протоколи като udp, icmpили all.
  • -m tcpизползвайте tcpмодула. iptablesподдържа допълнителни функции чрез модули, някои от които вече са предварително инсталирани, iptablesа други, като geoipмодула.
  • --dport 22командите, започващи с, --показват допълнителни опции за използвания преди това модул, в този случай ще кажем на tcpмодула да се прилага само към порт 22.
  • -m geoipизползвайте geoipмодула. Той ще ограничи пакетите на база държава (повече информация в стъпка 5).
  • --src-cc PEкажете на geoipмодула да ограничи входящите пакети до тези, които идват от Перу. За повече кодове на държави потърсете ISO 3166 country codesв интернет.
  • -j ACCEPTна -jаргумента казва iptablesкакво да правите, ако пакет съвпадне ограниченията, определени в предходните аргументи. В този случай тя ще ACCEPTтези пакети другите възможности са REJECT, DROPи още. Можете да намерите още опции, като потърсите iptables jump targetsв интернет.

1. Основи

Избройте всички правила.

sudo iptables -L

Избройте всички команди, използвани за създаване на текущо използвани правила, полезни за редактиране или изтриване на правила.

sudo iptables -S

За да изтриете конкретно правило, изберете правило от sudo iptables -Sи заменете -Aс -D.

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

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

Избройте всички номерирани правила във INPUTверигата.

sudo iptables -L INPUT --line-numbers

Изтриване на номерирано правило.

sudo iptables -D INPUT 2

За да изчистите всички правила.

sudo iptables -F

Предупреждение: може да загубите връзка, ако сте свързани чрез SSH .

Изчистете само правилата във OUTPUTверигата.

sudo iptables -F OUTPUT

2. Създайте първоначални правила

Разрешаване SSHна eth0интерфейса

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 приложи правило към конкретен интерфейс, за да разрешите от всеки интерфейс да премахнете тази команда.

За ограничаване на входящите пакети до определен IP (т.е. 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 определя IP/подмрежа, от която да се разрешават връзки.

Задайте правила за веригата по подразбиране.

Предупреждение: преди да продължите, уверете се, че сте приложили правилните SSH правила, ако работите на отдалечен сървър .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP отказва всички входящи пакети (т.е. никой няма да може да се свърже с вашите работещи сървъри като Apache, SQL и т.н.).
  • -P FORWARD DROP отказва всички препратени пакети (т.е. когато използвате вашата система като рутер).
  • -P OUTPUT ACCEPTпозволява всички изходящи пакети (т.е. когато изпълнявате HTTPзаявка).

Разрешете целия трафик на интерфейса за обратна връзка ( препоръчително ).

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

3. Направете правилата постоянни

Запазете текущите iptablesправила.

sudo netfilter-persistent save
sudo netfilter-persistent reload

Ако работите в контейнер, netfilter-persistentкомандата най-вероятно няма да работи, така че трябва да преконфигурирате iptables-persistentпакета.

sudo dpkg-reconfigure iptables-persistent

4. Разрешаване на изходящи връзки

Разрешаване на 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

Използвайте stateмодула, за да разрешите RELATEDи ESTABLISHEDизходящи пакети.

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

Разрешете желаните портове; в този случай HTTPпортове.

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

Повече портове, които може да искате да използвате.

  • FTP: tcp на порт 21
  • HTTPS: tcp на порт 443
  • DHCP: udp на порт 67
  • NTP: udp на порт 123

Забележка: Ако искате да разрешите, apt-getможе да се наложи да разрешите FTPиHTTPS .

Разрешете върнатия трафик само за RELATEDи вече ESTABLISHEDвръзки ( препоръчително, защото понякога се изисква двупосочна комуникация).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Други полезни правила

Разрешете заявки за пинг отвън.

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

Препращане на трафик на eth0порт 2200към 10.0.3.21:22(полезно, ако искате да изложите SSH сървър, който работи вътре в контейнер).

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

Ако успешно влезете в сървъра си с помощта на SSH, ще бъде създадена постоянна връзка (т.е. няма нови връзки, дори ако сте свързани повече от 1 час). Ако не успеете и опитате да влезете отново, ще бъде създадена нова връзка. Това ще блокира непрекъснатите опити за влизане в SSH чрез ограничаване на новите връзки на час.

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

Пренасочва всички заявки от порт 443към порт 4430(полезно, ако искате да се свържете с порт 443без 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 мрежовия интерфейс.
  • -m geoip блок за страната (вижте стъпка 5).

Предупреждение: Не използвайте lo, ОС ще изхвърли всички пакети, пренасочени към интерфейса за обратна връзка .

5. Разрешете или блокирайте цели държави

5.1 Инсталиране xtables-addons

Можете да инсталирате xtables-addonsмодула, като използвате различни методи, не се колебайте да използвате метода на инсталиране, който работи най-добре за вас.

  • Инсталирайте с помощта на apt-get.

    sudo apt-get install xtables-addons-common
    
  • Инсталирайте с помощта на module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • Инсталирайте от източник.

    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
    

Създайте база данни за "държави".

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

Рестартирайте системата си.

sudo reboot

След като xtables-addonsбъде инсталиран успешно, след първото рестартиране, стартирайте, в depmodпротивен случай блокирането на държава няма да работи правилно (това се изисква само за първи път).

sudo depmod 

Създайте скрипт в, за /etc/cron.monthly/geoip-updaterда актуализирате geoipбазата данни ежемесечно.

#!/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

Направете /etc/cron.monthly/geoip-updaterизпълним.

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

5.2 Примерни правила

_Забележка: Ако получавате iptables: No chain/target/match by that nameгрешка, когато се опитвате да приложите geoipправило, е възможно то xtables-addonsда не е инсталирано правилно. Опитайте друг метод за инсталиране.

Блокирайте всички входящи пакети от Китай, Хонконг, Русия и Корея.

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

Разрешаване на входящи пакети на порта 80отвсякъде с изключение на страните по-горе.

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

Разрешете входящи пакети в ens3интерфейса на порта 22само от Перу (не се колебайте да изберете кода на държавата, от която искате да приемате пакети, например USза Съединените щати).

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

Разрешаване на входящи пакети на порта 443само от Перу.

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

Оставете коментар

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

DDOS атаки: кратък преглед

DDOS атаки: кратък преглед

Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.

Чудили ли сте се как хакерите печелят пари?

Чудили ли сте се как хакерите печелят пари?

Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.

Революционни изобретения на Google, които ще улеснят живота ви.

Революционни изобретения на Google, които ще улеснят живота ви.

Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Тъй като науката се развива с бързи темпове, поемайки много от нашите усилия, рискът да се подложим на необяснима сингулярност също нараства. Прочетете какво може да означава сингулярността за нас.

Функционалности на референтните архитектурни слоеве за големи данни

Функционалности на референтните архитектурни слоеве за големи данни

Прочетете блога, за да разберете различни слоеве в архитектурата на големи данни и техните функционалности по най-простия начин.

Еволюция на съхранението на данни – инфографика

Еволюция на съхранението на данни – инфографика

Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече