Назад | Перейти на главную страницу

Почему я все еще могу получить ответ на 80-м порту, когда я закрыл все порты, кроме 22?

Моя цель - отключить абсолютно все порты на моем сервере Ubuntu, кроме порта 22 (SSH).

Я следовал инструкциям из этот вопрос здесь о сбое сервера, плюс инструкции Вот и Вот.

Однако после выполнения инструкций кажется, что мои порты все еще открыты. Вот, например, порт 80:

$ nmap -p 80 ###.###.###.###

Starting Nmap 5.21 ( http://nmap.org ) at 2012-05-09 15:36 JST
Nmap scan report for ###-###-###-###.name.name.com (###.###.###.###)
Host is up (0.0065s latency).
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.63 seconds

Вот содержимое моих iptables:

# sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Просто глядя на него, особенно там, где написано «Принять все где угодно», мне кажется, что у меня есть противоположность тому, что я хочу. Похоже, вместо того, чтобы закрывать порты, я их открыл. Однако это результат точного следования инструкциям, поэтому, возможно, я просто не понимаю, что на самом деле означают эти термины.

В любом случае, суть в том, что мне делать, чтобы закрыть все порты, кроме 22, а затем заставить их работать, даже если сервер перезагружается. Неужто всего несколько команд в командной строке?

(Обратите внимание, что я веб-дизайнер, которому выпала эта задача, поэтому я вовсе не супер-уверенный администратор сервера. Пожалуйста, сделайте ответы легкими для понимания. Спасибо!)

Как вы и ожидали, строка:

ACCEPT     all  --  anywhere             anywhere            

означает, что все протоколы / порты разрешены, поскольку он стоит перед этой строкой:

DROP       all  --  anywhere             anywhere            

Вы не запрещаете ни один порт, так как есть только один DROP правило, которое следует после ACCEPT правило, разрешающее все.

iptables правила соответствует по порядку, поэтому вам нужно иметь следующие правила, если вы хотите разрешить только порт 22 для цепочки INPUT:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Приведенных выше двух правил должно быть достаточно по умолчанию INPUT политика установлена ​​на DROP как указано в строке:

Chain INPUT (policy DROP)

Чтобы сделать ваш набор правил постоянным, вы можете использовать iptables-save > rules_file чтобы сбросить ваш набор правил в текстовый файл. Затем его можно загрузить во время запуска сервера, включив его в любой сценарий, используя iptables-restore.