Назад | Перейти на главную страницу

помощь с iptables не удается подключиться к веб-серверу

Я недавно установил веб-сервер Fedora Core для своей ИТ-организации, и я новичок в Linux и еще больше новичок в iptables. На данный момент мне нужно разрешить внешним пользователям доступ к веб-серверу через порт 80, разрешить подключения mysql через порт 3306, а также разрешить подключения ssh. Прямо сейчас мне не нужно строго ограничивать источник подключений, поэтому мне просто нужны некоторые общие разрешительные правила, чтобы все заработало. Я тестировал внутреннюю попытку подключиться со своего компьютера к новому серверу со следующими правилами, и я вообще не могу подключиться с запущенным iptables. Как только я остановлю iptables, я смогу добраться до сервера, поэтому я знаю, что что-то не так с моей конфигурацией iptables - я просто слишком новичок, чтобы понять это. Может кто поможет? :)

:INPUT ACCEPT [0:0]<br>
:FORWARD ACCEPT [0:0]<br>
:OUTPUT ACCEPT [0:0]<br>
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br>
-A INPUT -p icmp -j ACCEPT<br>
-A INPUT -i lo -j ACCEPT<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT<br>
-A INPUT -j REJECT --reject-with icmp-host-prohibited<br>
-A FORWARD -j REJECT --reject-with icmp-host-prohibited<br>
-A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT<br>
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT<br>
COMMIT<br>

====================
ОБНОВИТЬ!!!

Я изменил свои правила iptables на ...

:INPUT ACCEPT [0:0]<br>
:FORWARD ACCEPT [0:0]<br>
:OUTPUT ACCEPT [0:0]<br>
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br>
-A INPUT -p icmp -j ACCEPT<br>
-A INPUT -i lo -j ACCEPT<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT<br>
-A INPUT -j REJECT --reject-with icmp-host-prohibited<br>
-A FORWARD -j REJECT --reject-with icmp-host-prohibited<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT<br>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT<br>
COMMIT<br><br>

После перезапуска iptables я протестировал и все еще не могу подключиться к серверу.

Я побежал iptables -L Я понял ...

Chain INPUT (policy ACCEPT)<br> 
target     prot opt source               destination<br>
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED<br> 
ACCEPT     icmp --  anywhere             anywhere<br>
ACCEPT     all  --  anywhere             anywhere<br>
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh<br> 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited<br> 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http<br> 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:mysql<br><br>

Chain FORWARD (policy ACCEPT)<br>
target     prot opt source               destination<br>
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited<br><br>

Chain OUTPUT (policy ACCEPT)<br>
target     prot opt source               destination<br><br>

Опять же, если я остановлю iptables, а затем снова попытаюсь подключиться, я смогу подключиться. Таким образом, это все еще проблема с iptables (а не с сетью). Я сбит с толку, так что любая другая помощь будет оценена !!!

Думаю, проблема в следующем правиле:

-A INPUT -j REJECT --reject-with icmp-host-prohibited

Это говорит IPTables отклонять все, что входит в цепочку INPUT, то есть все входящие пакеты. И поскольку IPTables читает (и применяет) свои правила в порядке сверху вниз, для НОВЫХ пакетов, поступающих на порты 80 и 3306, это первое соответствующее правило. Таким образом, все они получают отказ. Единственные пакеты, которые не будут отклонены этим правилом, - это те, которые поступают на порт 22, так как правило прямо над ним требует их принимать.

Чтобы исправить это, просто переместите это правило в конец файла. Таким образом, IPTables столкнется с правилами, говорящими о том, что сначала нужно принять пакеты на портах 80 и 3306.

Немного по теме: я написал Руководство по IPTables на моем веб-сайте, где может быть полезная информация для вас.

Самое простое решение - просто повторить следующее в том же месте файла:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

Но измените порт назначения на порты, которые вы хотите принять.

Вместо того, чтобы иметь REJECT В середине вашего списка у меня была бы политика REJECT для цепочек INPUT и FORWARD. Так

:INPUT REJECT [0:0]
:FORWARD REJECT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
COMMIT

Таким образом вы можете добавить больше правил (перед COMMIT, если вы редактируете файлы) вместо того, чтобы вставить дополнительные правила перед отклонением.

Вам не нужно возиться с iptables на этом уровне в Fedora, если все, что вам нужно, - это простые изменения. Он заблокирован, но имеет простой инструмент межсетевого экрана это позволит вам открывать порты (так же просто, как нажимать кнопку). Вы должны использовать это, пока еще учитесь.

Кроме того, в базовых правилах брандмауэра по умолчанию есть некоторые дополнительные функции (я думаю), такие как защита от синхронного флуда и т. Д., Которые отсутствуют в вашем наборе правил. Вы всегда можете увидеть, каковы правила.