У всіх операційних системах, заснованих на базі ядра Linux, є вбудований міжмережевий екран, який здійснює контроль і фільтрацію вхідного і вихідного трафіку, виходячи із заданих користувачем або платформою правил. У дистрибутиві CentOS 7 за замовчуванням таку функцію виконує утиліта iptables, взаємодіючи з вбудованим брандмауером netfilter. Іноді системного адміністратора або менеджеру мережі доводиться налаштовувати роботу цього компонента, прописуючи відповідні правила. В рамках сьогоднішньої статті ми б хотіли поговорити про основи конфігурації iptables в згаданій вище ОС.
зміст
Сам інструмент доступний до роботи відразу ж після завершення інсталяції CentOS 7, але додатково буде потрібно встановити деякі сервіси, про що ми і поговоримо далі. У розглянутій платформі є ще один вбудований інструмент, що виконує функцію фаєрвола під назвою FirewallD. Для уникнення конфліктів при подальшій роботі рекомендуємо відключити цей компонент. Розгорнуті інструкції по цій темі читайте в іншому нашому матеріалі за наступним посиланням.
Детальніше: Відключення firewallD в CentOS 7
Як відомо, в системі можуть застосовуватися протоколи IPv4 і IPv6. Сьогодні ми зупинимося на прикладі IPv4, але якщо ви хочете здійснювати конфігурацію для іншого протоколу, потрібно замість команди iptables в консолі використовувати ip6tables.
Першочергово слід додати в систему додаткові компоненти розглянутої сьогодні утиліти. Вони допоможуть в налаштуванні правил та інших параметрів. Завантаження здійснюється з офіційного сховища, тому не відніме багато часу.
sudo yum install iptables-services
. Введіть її та натисніть на клавішу Enter. sudo iptables --version
. Тепер ОС повністю готова для подальшої настройки брандмауера через утиліту iptables. Ми пропонуємо ознайомитися з конфігурацією по пунктам, почавши з управління сервісами.
Управління режимом роботи iptables потрібно в тих випадках, коли потрібно перевірити дію певних правил або просто виконати перезапуск компонента. Робиться це за допомогою вбудованих команд.
sudo service iptables stop
і натисніть на клавішу Enter, щоб зупинити сервіси. sudo service iptables start
. Подібна перезавантаження, запуск або зупинка утиліти доступна в будь-який момент, не забудьте тільки повернути зворотне значення, коли це буде затребувано.
Як вже було сказано раніше, управління фаєрволом проводиться шляхом ручного або автоматичного додавання правил. Наприклад, деякі додаткові додатки можуть звертатися до інструменту, змінюючи певні політики. Однак більшість подібних дій все ж робиться вручну. Перегляд списку всіх поточних правил доступний через команду sudo iptables -L
.
В відобразиться результаті буде інформація по трьом ланцюжках: «INPUT», «OUTPUT» і «FORWARD» - вхідний, вихідний і пересилається трафік відповідно.
Визначити статус всіх ланцюжків можна, запровадивши sudo iptables -S
.
Якщо побачені правила вас не влаштовують, вони досить просто видаляються. Весь список очищається так: sudo iptables -F
. Після активації правила будуть стерті абсолютно для всіх трьох ланцюгів.
Коли необхідно торкнутися тільки політики з якоїсь однієї ланцюга, до рядка додається додатковий аргумент:
sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -F FORWARD
Відсутність всіх правил означає, що зараз не застосовується ніяких налаштувань фільтрації трафіку ні в одну зі сторін. Далі системний адміністратор вже самостійно задає нові параметри, використовуючи всю ту ж консоль, команду і різні аргументи.
Кожна ланцюг налаштовується окремо для прийому або блокування трафіку. Виставивши певне значення, можна домогтися того, що, наприклад, весь вхідний трафік буде блокуватися. Для цього команда повинна бути sudo iptables --policy INPUT DROP
, де INPUT - назва ланцюга, а DROP - значення скидання.
Точно такі ж параметри задаються і для інших ланцюгів, наприклад, sudo iptables --policy OUTPUT DROP
. Якщо ж необхідно виставити значення на прийом трафіку, тоді DROP змінюється на ACCEPT і виходить sudo iptables --policy INPUT ACCEPT
.
Як відомо, всі мережеві додатки і процеси працюють через певний порт. Шляхом блокування або дозволу певних адрес можна контролювати доступ всіх мережевих цілей. Давайте розберемо кидок порту на прикладі 80. У «Терміналі» буде досить ввести команду sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
, де -А - додавання нового правила, INPUT - вказівка ланцюга, -P - визначення протоколу, в цьому випадку TCP, а - -dport - порт призначення.
Точно така ж команда відноситься і до порту 22, який використовується сервісом SSH: sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
.
Для блокування зазначеного порту застосовується рядок точно такого ж виду, тільки в кінці ACCEPT змінюється на DROP. У підсумку виходить, наприклад, sudo iptables -A INPUT -p tcp --dport 2450 -j DROP
.
Всі ці правила заносяться в конфігураційний файл і ви можете переглянути їх в будь-який момент. Нагадуємо, здійснюється це через sudo iptables -L
. Якщо разом з портом необхідно вирішити ще і мережевий IP-адреса, рядок трохи видозмінюється - після TPC додається -s і сам адресу. sudo iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22 -j ACCEPT
--dport sudo iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22 -j ACCEPT
, де 12.12.12.12/32 - необхідний IP-адреса.
Блокування відбувається за тим же принципом, змінюючи в кінці значення ACCEPT на DROP. Тоді виходить, наприклад, sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROP
--dport sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROP
.
ICMP (Internet Control Message Protocol) - протокол, який входить до складу TCP / IP і задіяний для передачі повідомлень про помилки і екстрених ситуаціях при роботі з трафіком. Наприклад, коли запитуваний сервер недоступний, саме цей інструмент виконує сервісні функції. Утиліта iptables дозволяє заблокувати його через брандмауер, а зробити це можна командою sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
. Вона зробить блокування запитів від вашого і до вашого сервера.
Вхідні запити блокуються трохи інакше. Тоді потрібно ввести sudo iptables -I INPUT -p icmp --icmp-type 8 -j DROP
. Після активації даних правил сервер не відповідатиме на ping-запити.
Іноді сервери піддаються DDoS атакам або іншим несанкціонованим діям з боку зловмисників. Правильна настройка брандмауера дозволить убезпечити себе від подібного роду зломів. Для початку ми рекомендуємо поставити такі правила:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT
, де --limit 20 / minute - обмеження на частоту позитивних результатів. Одиницю виміру ви можете вказувати самостійно, наприклад, /second, /minute, /hour, /day
. --limit-burst number - обмеження на число пропускаються пакетів. Всі значення виставляються індивідуально по перевагах адміністратора. sudo iptables -N block-scan
. sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST -m limit —limit 1/s -j RETURN
. sudo iptables -A block-scan -j DROP
. Вираз block-scan в даних випадках - назва використовуваної ланцюга. Показання сьогодні настройки є лише основою роботи в інструменті управління фаєрволом. В офіційній документації утиліти ви знайдете опис всіх доступних аргументів і опцій і зможете налаштувати брандмауер конкретно під свої запити. Вище були розглянуті стандартні правила безпеки, які застосовуються найчастіше і в більшості випадків є обов'язковими.