
Я хочу настроить брандмауэр с помощью iptables.
На сервере запущена служба httpd (httpd). Операционная система — Centos7. Приведенная ниже информация актуальна после установки iptables-services и запуска iptables без каких-либо изменений.
[root@iptables ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
КАК вы можете видеть, в цепочке INPUT, строка num3, похоже, что сервер открыт.
Но доступ к веб-странице через браузер не работает.
Нужно ли мне что-то настроить?
как вывод iptables-save
(взято из комментария):
# Generated by iptables-save v1.4.21 on Thu Sep 16 13:41:53 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [527:50260]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Sep 16 13:41:53 2021
решение1
Как я и подозревал, iptables -L
скрыл дополнительное соответствие, но iptables-save
показал голую правду. Ваше правило №3 соответствует только для lo
— интерфейса loopback. Этот брандмауэр принимает только соединения к tcp/22 (SSH) извне.
Самым простым решением будет:
iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT
Вы можете дополнительно отфильтровать с помощью conntrack и объединить оба правила в одно с помощью multiport:
iptables -I INPUT 4 -m conntrack --ctstate NEW -p tcp -m multiport --dports 80,443 -j ACCEPT -m comment --comment "HTTP/HTTPS service"
Обратите внимание также на комментарий, который я добавил. Используйте комментарии длякаждыйправило, и однажды вы скажете мне спасибо за этот совет, если ваш брандмауэр вырастет и будет содержать более 50 правил.
Не используйте -m state
. Это устарело. Это действительно используется -m conntrack
под капотом, и более прозрачно писать это так явно.
Не используйте iptables -L
. Как вы видели, его вывод выглядит "красивее", и на этом преимущества заканчиваются, но он также не может представить все необходимые детали. Вывод iptables-save
выглядит менее красиво, но он показывает все мельчайшие детали, поэтому всегда используйте последний.