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