В Centos 6.4 я хочу заблокировать все входящие порты, кроме 22, 80 и 443. 80 (внешний) должен быть перенаправлен на 8080 (внутренний). 443 (внешний) следует перенаправить на 8181 (внутренний). Я использовал следующие команды:
service iptables stop
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8181
service iptables save
service iptables restart
Однако я все еще могу получить доступ к портам 8080 и 8181. Есть ли способ заблокировать порты 8080 и 8181 извне, оставив при этом внутренне открытыми для перенаправления с 80 и 443?
В ваших правилах нет ничего, что отбрасывало бы любые пакеты. Вы можете добиться этого, установив политику по умолчанию вашего INPUT
цепь к DROP
. По умолчанию это ACCEPT
:
iptables -P INPUT DROP
При этом вы можете начать замечать, что ваши исходящие соединения больше не работают.
Вы можете добавить правила в верхней части INPUT
цепь к ACCEPT
уже установленный трафик обратно.
Сделайте это, используя следующее:
iptables -A INPUT -m state --state ESTABLISHED,RELATED
В RELATED
часть пропускает другой связанный трафик (например, пакеты ICMP, отправленные в результате чего-либо ESTABLISHED
соединение)
Лучше я создам новую цепочку, а затем добавлю в нее свои правила. Вы можете сделать это с помощью: First DROP входящего / перенаправляющего / исходящего трафика
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Затем создайте цепочку с суждением ACCEPT и добавьте правила внутри:
iptables -N myrules # Create a new chain
iptables -A myrules -m state --state ESTABLISHED,RELATED
iptables -A myrules -j LOG --log-prefix="Myrules: " # Just a log prefix
iptables -A myrules -j ACCEPT # Packets matching this rule will be ACCEPTed
iptables -A INPUT -i eth0 -p tcp --dport 22 -j myrules
Затем добавьте правила перенаправления:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8181
У вас есть несколько сетевых адаптеров на сервере или нет? Вы можете заблокировать это таким образом. Вы также можете легко заблокировать его по исходным IP-адресам, чтобы вы могли разрешить только правила «INPUT» для этих портов с определенных IP-адресов и только все правила «FORWARD» или «PREROUTING» от других.