Лесна конфигурация на 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

Leave a Comment

Инсталирайте Lets Encrypt SSL в приложението WordPress с едно щракване

Инсталирайте Lets Encrypt SSL в приложението WordPress с едно щракване

Въведение Lets Encrypt е услуга на сертифициращ орган, която предлага безплатни TLS/SSL сертификати. Процесът на инсталиране е опростен от Certbot,

Как да настроите надстройки без надзор на Debian 9 (разтягане)

Как да настроите надстройки без надзор на Debian 9 (разтягане)

Използване на различна система? Ако закупите сървър на Debian, винаги трябва да имате най-новите корекции за сигурност и актуализации, независимо дали спите или не

Как да инсталирате и конфигурирате PHP 7.0 или PHP 7.1 на Ubuntu 16.04

Как да инсталирате и конфигурирате PHP 7.0 или PHP 7.1 на Ubuntu 16.04

PHP и свързаните с него пакети са най-често използваните компоненти при разгръщане на уеб сървър. В тази статия ще научим как да настроим PHP 7.0 или PHP 7.1 o

Как да инсталирате Squid Proxy на CentOS

Как да инсталирате Squid Proxy на CentOS

Squid е популярна, безплатна програма за Linux, която ви позволява да създадете уеб прокси за препращане. В това ръководство ще видите как да инсталирате Squid на CentOS, за да ви обърне

Как да инсталирате Lighttpd (LLMP стек) на CentOS 6

Как да инсталирате Lighttpd (LLMP стек) на CentOS 6

Въведение Lighttpd е форк на Apache, чиято цел е да бъде много по-малко ресурсоемка. Той е лек, откъдето идва и името му, и е доста лесен за използване. Инсталирайте

Три безплатни контролни панела на сървъра (бърза инсталация)

Три безплатни контролни панела на сървъра (бърза инсталация)

1. Virtualmin/Webmin Virtualmin е мощен и гъвкав контролен панел за уеб хостинг за Linux и UNIX системи, базиран на добре познатата уеб база с отворен код

Настройване на приложение Yii на Ubuntu 14.04

Настройване на приложение Yii на Ubuntu 14.04

Yii е PHP рамка, която ви позволява да разработвате приложения по-бързо и лесно. Инсталирането на Yii в Ubuntu е лесно, както ще научите точно l

Настройте свой собствен DNS сървър на Debian/Ubuntu

Настройте свой собствен DNS сървър на Debian/Ubuntu

Този урок обяснява как да настроите DNS сървър с помощта на Bind9 на Debian или Ubuntu. В цялата статия заменете your-domain-name.com съответно. При th

Използване на Logrotate за управление на регистрационни файлове

Използване на Logrotate за управление на регистрационни файлове

Въведение Logrotate е помощна програма за Linux, която опростява администрирането на лог файлове. Обикновено се изпълнява веднъж на ден чрез cron задание и управлява базата от регистрационни файлове

Промяна на Icinga2 за използване на модел главен/клиент на CentOS 6 или CentOS 7

Промяна на Icinga2 за използване на модел главен/клиент на CentOS 6 или CentOS 7

Icinga2 е мощна система за наблюдение и когато се използва в модел главен-клиент, тя може да замени необходимостта от проверки на базата на NRPE. Главният клиент

Настройте Red5 Media Server на Ubuntu 16.04

Настройте Red5 Media Server на Ubuntu 16.04

Използване на различна система? Red5 е медиен сървър с отворен код, внедрен в Java, който ви позволява да стартирате Flash многопотребителски приложения, като например предаване на живо

Компилирайте и инсталирайте Nginx с модула PageSpeed ​​на Debian 8

Компилирайте и инсталирайте Nginx с модула PageSpeed ​​на Debian 8

В тази статия ще видим как да компилирате и инсталирате основната линия на Nginx от официалните източници на Nginx с модула PageSpeed, който ви позволява да

Как да инсталирате Apache Cassandra 3.11.x на Ubuntu 16.04 LTS

Как да инсталирате Apache Cassandra 3.11.x на Ubuntu 16.04 LTS

Използване на различна система? Apache Cassandra е безплатна система за управление на база данни NoSQL с отворен код, която е проектирана да осигури мащабируемост, висока

Как да инсталирате Vanilla Forum на Ubuntu 16.04

Как да инсталирате Vanilla Forum на Ubuntu 16.04

Използване на различна система? Vanilla forum е приложение за форум с отворен код, написано на PHP. Той е напълно адаптивен, лесен за използване и поддържа външен

Как да инсталирате Kanboard на Ubuntu 18.04 LTS

Как да инсталирате Kanboard на Ubuntu 18.04 LTS

Използване на различна система? Въведение Kanboard е безплатна програма за управление на проекти с отворен код, която е предназначена да улеснява и визуализира

Как да инсталирате Kanboard на Debian 9

Как да инсталирате Kanboard на Debian 9

Използване на различна система? Въведение Kanboard е безплатна програма за управление на проекти с отворен код, която е предназначена да улеснява и визуализира

Как да инсталирате Gitea на Debian 9

Как да инсталирате Gitea на Debian 9

Използване на различна система? Gitea е алтернатива с отворен код, самостоятелно хоствана система за контрол на версиите, задвижвана от Git. Gitea е написана на Голанг и е

Как да инсталирате Gitea на Ubuntu 18.04

Как да инсталирате Gitea на Ubuntu 18.04

Използване на различна система? Gitea е алтернатива с отворен код, самостоятелно хоствана система за контрол на версиите, задвижвана от git. Gitea е написана на Голанг и е

Инсталирайте Lynis на Debian 8

Инсталирайте Lynis на Debian 8

Въведение Lynis е безплатен инструмент за одит на системата с отворен код, който се използва от много системни администратори за проверка на целостта и заздравяване на техните системи. аз

Как да инсталирате Thelia 2.3 на Debian 9

Как да инсталирате Thelia 2.3 на Debian 9

Използване на различна система? Thelia е инструмент с отворен код за създаване на уебсайтове за е-бизнес и управление на онлайн съдържание, написано на PHP. Изходен код на Thelia i

Възходът на машините: Реални приложения на 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 машини. Прочетете тази статия, за да научите повече