Як я можу заблокувати всі U3, крім трьох портів?


22

Як я можу заблокувати всі порти, крім 1962, 999, 12020?

Один порт для SSH і два інші для своєрідного сценарію. Отже, потрібно дозволити вихід на ці порти, правда?

Мої iptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Вибачте, але я справжній новачок, коли справа стосується цього матеріалу, і я просто хочу зробити свій сервер більш захищеним.


Чому б не використовувати UFW?
Soviero

Відповіді:


25

На перших порах ви завжди повинні завивати, щоб бути впевненим у тому, що вже визначено ... нічого

iptables -F

Потім встановіть політику за замовчуванням ланцюга INPUT на DROP, якщо кінець досягнуто, і жодне правило не збігається:

iptables -P INPUT DROP

Щоб переконатися, що зворотний зв'язок не порушено, слід додати

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

щоб дозволити весь трафік на lo-if і кожен вхідний трафік для встановлених вами з'єднань. Після цього додайте всі правила, необхідні для ваших послуг (не забудьте відкрити ssh, якщо вам це потрібно! Інше ви поза) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Невеликий трюк, який я роблю, щоб уберегти себе та інших від випадкового свердління отворів у безпеці, нарешті додаю:

iptables -A INPUT -j DROP

Цей рядок відповідає всім для ланцюга INPUT, і політика не повинна отримувати нічого. Перевага цього навіть у тому випадку, якщо ви додасте правило ACCEPT колись після ініціалізації набору правил, воно ніколи не перевірятиметься, оскільки все скасовується раніше. тому це гарантує, що вам доведеться тримати все в одному місці.

Що стосується вашого запитання, все це виглядає приблизно так:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP

1
Просто для уточнення: -Pвстановлює політику на ланцюжок. Це фактично не додавання правила. Політика ланцюга вказує на дію, яка повинна виконуватися на пакеті, якщо досягнуто кінця ланцюга. Через це розумно додати свої правила перед тим, як встановлювати DROPполітику.
Белмін Фернандес

Якщо я пам'ятаю це правильно, зазвичай не має значення, де встановлювати політику ... можливо, я повинен дати свою відповідь трохи відредагувати.
Мойсей

3
одне зауваження: будьте дуже обережні, налаштовуючи політику за замовчуванням, забороняйте та проміть, коли налаштовуєте брандмауер через ssh. Ви заблокуєте себе. Так, я це зробив. :-) Зараз зазвичай iptables -A INPUT -j DROPзамість цього я роблю останнє правило саме з цієї причини.
Сірекс

Я трохи підкреслив своє ssh попередження ;-)
Mose

@Mose: Виправити це не має значення взагалі. Я намагався це висвітлити. Але це може призвести до того, що вас заблокують, як уже згадувалося.
Белмін Фернандес

20

Відповідь новачка так само, як і ви :-) Мені також потрібно було захистити свій сервер Ubuntu, і вивчення iptables було болем, через яку я не міг пережити. UFW (Нескладний брандмауер) - це програма, щоб зробити конфігурацію брандмауера максимально простою.

  • встановити ufw:

    sudo apt-get install ufw
    
  • негайно вимкнути його (мені довелося рятувати-завантажувач, оскільки я був заблокований із власного входу в SSH):

    sudo ufw disable
    
  • встановіть "заперечувати" як правило за замовчуванням (це блокує всі порти):

    sudo ufw default deny
    
  • дозволити потрібні вам порти:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • якщо ви впевнені, що наведені вище правила не порушують ваше ssh-з'єднання, увімкніть ufw:

    sudo ufw enable
    

Документи добре написані та надають більше прикладів: https://help.ubuntu.com/community/UFW


1
Працюючи з конфігураціями брандмауера, може бути хорошою ідеєю створити роботу cron, яка б відключила брандмауер знову. Про всяк випадок, коли вас заблокують.
pymkin

Зауважте, що це не працює з ufw 0,35, викидаючи помилки типу ERROR: Bad destination addressтаERROR: Bad source address
Дейв

І як дозволити всі порти, крім одного порту, для певного інтерфейсу? Я використовую правило заперечення за замовчуванням і хочу заблокувати DNS-порт 53 в інтерфейсі Ethernet, щоб запобігти витоку DNS при використанні VPN. В даний час я повинен дозволити всі порти, які я хочу використовувати для приватних діапазонів IP, що не дуже зручно.
baptx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.