Як дозволити певні ips та заблокувати всі інші з'єднання в iptables?
Як дозволити певні ips та заблокувати всі інші з'єднання в iptables?
Відповіді:
Я дуже давно писав повідомлення в блозі про основні правила 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
, безумовно, спричинить проблеми для певних програм.
iptables -F
це, щоб очистити всі правила, не можу навіть пінг ubuntu.com
Ось (неперевірений!) Приклад, який блокує лише вхідні з'єднання. Підключення через інтерфейс зворотного зв'язку, що надходить від 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
lo
у наведеному вище прикладі виключається з узгодження стану та завжди дозволено.
Наведене нижче правило дозволить лише ваш IP та заблокувати всі інші IP-адреси через порт 22 або ssh. Перед відключенням випробуйте новий термінал.
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
yourIPaddress
можу додати кілька IP-адрес та діапазонів? І якщо я використовую SSH на нестандартному порту, наприклад 2888, то команда змінила б 22
у вашому прикладі на 2288
? Також це також заблокує rsync, sftp тощо на цьому сервері з усіх IP-адрес, крім дозволених?
-p tcp
тут важливо, оскільки --dport
без нього не працює. Я б також запропонував використовувати -j REJECT
замість того, DROP
що REJECT
робить порт ідентичним закритому порту і DROP
робить пакети, призначені для цього порту, чорними. На практиці віддалений зловмисник може виявити DROP
налаштовані порти з фактично закритих портів.
Ось повний робочий приклад.
Крім того, додатки спрацьовують (повторно: мій коментар про Keepass не починається)