iptables: дозволити певні ips та заблокувати всі інші з'єднання


26

Як дозволити певні ips та заблокувати всі інші з'єднання в iptables?


Як демонструє Жилл, концепція виглядає так: Додайте правила ACCEPT для кожної конкретної речі, яку ви хочете дозволити, за джерелом IP чи іншими кваліфікаціями, а потім встановіть політику за замовчуванням на REJECT.
Калеб

Відповіді:


27

Я дуже давно писав повідомлення в блозі про основні правила Iptables для користувачів настільних комп'ютерів, і вам, мабуть, варто прочитати його та пов’язану статтю про дизайн брандмауера Stateful . Але попередньо ядро ​​2.6.39 (яке включає ipsetі ви можете використовувати його для білого списку IP-адрес, якщо у вас до списку більше 10 (де 10 довільне)).

Спочатку обробіть стан, який ми знаємо, що хочемо прийняти чи відмовити, та інтерфейси.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Якщо ви просто хочете зробити дозвіл лише через IP, без стану

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Ви, швидше за все, зіткнетеся з проблемами, роблячи це, і я пропоную використовувати стан, щоб полегшити ваше життя. Наприклад, не дозволяючи -i loі -o lo, безумовно, спричинить проблеми для певних програм.


4
Замість DROP слід відхиляти небажані пакети, оскільки це значно спрощує діагностування проблем та запобігає затримці часу. Див. Відхилити IP-пакети з помилкою ICMP або просто скинути їх?
Жиль "ТАК - перестань бути злим"

Я спробував обидві установки, і KeePass2 не почнеться, будь-яка ідея? Крім того, якщо я зробив iptables -Fце, щоб очистити всі правила, не можу навіть пінг ubuntu.com
Pawel Cioch

@PawelCioch, чому KeePass2 взагалі потрібен інтернет?
Олексій

@ Алекс для зберігання файлу БД у віддаленому місці, це я хочу єдину IP-адресу. Але я все з'ясовую, налаштування складніше, ніж приклад тут
Pawel Cioch

10

Ось (неперевірений!) Приклад, який блокує лише вхідні з'єднання. Підключення через інтерфейс зворотного зв'язку, що надходить від 192.168.3.x, ICMP або до порту SSH, дозволено. Усі інші з'єднання відхилено.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

@Gilles, щоб правильно використовувати пов'язані та встановлені стани, вам потрібно відповідати початковому пакету як новому стану. loу наведеному вище прикладі виключається з узгодження стану та завжди дозволено.
penguin359

@ penguin359: Не могли б ви детальніше пояснити, для чого потрібне НОВЕ? Я далеко не фахівець з iptables, я частково скопіював ці правила з домашнього маршрутизатора, який не відповідає НОВОМУ. Наскільки я розумію, все, що залишилося після першого правила, - це НОВІ (або НЕЗАДАЧІ) пакети в будь-якому випадку. (Якщо я занадто далеко від позначки і ви не можете пояснити в коментарі, опублікуйте свої версії з поясненнями як відповідь, і я видалю моє.)
Жил "Так - перестаньте бути зла"

@Gilles Я завжди скидаю стан INVALID перед тим, як приймати що-небудь ... що робить що-небудь не INVALID, пов'язаним, встановленим, повинно бути новим станом. Але я не знаю жодної причини, що все інше повинно вказувати НОВЕ. Теоретично, якщо ви не обробляєте INVALID і не вказуєте NEW, ви можете прийняти INVALID. Але як тільки INVALID обробляється, мені здається, що перевірка стану NEW для кожного правила просто вимагає більшої обробки для пакета.
ксенотеррацид

@Gilles також політика відхилення за замовчуванням погана, оскільки він надсилає пакет відхилень для кожного отриманого пакету, це з'єднує DOS-атаку.
ксенотеррацид

@xenoterracide: Добре. Чи потрібно коли-небудь використовувати REJECT? Я запитав: відхилити IP-пакети з помилкою ICMP або просто скинути їх?
Жиль "ТАК - перестань бути злим"

7

Наведене нижче правило дозволить лише ваш IP та заблокувати всі інші IP-адреси через порт 22 або ssh. Перед відключенням випробуйте новий термінал.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
дякую за лаконічну відповідь. Як це зміниться, якщо я хочу дозволити декілька IP та діапазонів IP. На зміну yourIPaddressможу додати кілька IP-адрес та діапазонів? І якщо я використовую SSH на нестандартному порту, наприклад 2888, то команда змінила б 22у вашому прикладі на 2288? Також це також заблокує rsync, sftp тощо на цьому сервері з усіх IP-адрес, крім дозволених?
PKHunter

1
Зауважте, що -p tcpтут важливо, оскільки --dportбез нього не працює. Я б також запропонував використовувати -j REJECTзамість того, DROPщо REJECTробить порт ідентичним закритому порту і DROPробить пакети, призначені для цього порту, чорними. На практиці віддалений зловмисник може виявити DROPналаштовані порти з фактично закритих портів.
Мікко Ранталайнен

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.