Блокувати всі порти (входи та виходи) легко, але важко зі словом "крім". Я не знаю жодних правил, які б відповідали умові.
PS: Я знаю, що це питання не є новим. Але насправді я не знайшов нічого, що допомагає. Отже, допоможіть мені, будь ласка!
Блокувати всі порти (входи та виходи) легко, але важко зі словом "крім". Я не знаю жодних правил, які б відповідали умові.
PS: Я знаю, що це питання не є новим. Але насправді я не знайшов нічого, що допомагає. Отже, допоможіть мені, будь ласка!
Відповіді:
По-перше! - символ НЕ.
iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP
По-друге, правила, які ви написали, можуть не мати очікуваних результатів. Ви кидаєте все, включаючи відповідь на з'єднання на порт 80. Отже, ви не зможете підключитися до нього, це говорить для цілей веб-сервера.
Ці правила дозволяють пов'язані і встановлені з'єднання, тому веб-сервер повинен функціонувати, якщо це насправді те, що ви намагаєтеся зробити.
iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
!
слід уникати так \!
, якщо використовується оболонка Bash?
!
не потрібно уникати. Вибачте за помилкову тривогу.
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP
# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
Це має дати вам те, що вам потрібно
Ви можете встановити дію за замовчуванням на DROP, а потім створити правила виключення, щоб дозволити 80 і 443, наприклад:
# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
iptables буде проходити список "винятків", поки не знайде збіг. Потім він виконає дію, вказану -j
параметром (ACCEPT у цьому випадку). Якщо він не знайде збігу, він повернеться до політики за замовчуванням і скине пакет.
Зауважте, що при цьому вирішенні будь-які субдомени будуть заблоковані. Наприклад, за допомогою цього методу ви будете працювати з www.mydomain.com нормально, але ваш піддомен, скажімо, www.sub.mydomain.com не відкриється для помилок DNS.
iptables -nvL
?
ssh
.