Создание/настройка брандмауэра с использованием iptables

Создание/настройка брандмауэра с использованием iptables

Я хочу настроить брандмауэр с помощью 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выглядит менее красиво, но он показывает все мельчайшие детали, поэтому всегда используйте последний.

Связанный контент