Моя цель - отключить абсолютно все порты на моем сервере 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
.