У нас есть сервер Ubuntu, на котором размещены php-сервер и игровой сервер.
В последнее время мы получаем много душ и атаки. поэтому я считаю, что некоторые правила для iptables могут защитить http и игровой порт от атак.
вот мои правила:
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m state --state NEW -m limit --limit 5/sec -m connlimit --connlimit-upto 15 --connlimit-mask 32 --connlimit-saddr -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state RELATED,ESTABLISHED -m connlimit --connlimit-upto 15 --connlimit-mask 32 --connlimit-saddr -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state RELATED,ESTABLISHED -m connlimit --connlimit-upto 15 --connlimit-mask 32 --connlimit-saddr -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state RELATED,ESTABLISHED -m connlimit --connlimit-upto 15 --connlimit-mask 32 --connlimit-saddr -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3724 -m state --state RELATED,ESTABLISHED -m connlimit --connlimit-upto 15 --connlimit-mask 32 --connlimit-saddr -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state RELATED,ESTABLISHED -m connlimit --connlimit-upto 15 --connlimit-mask 32 --connlimit-saddr -j ACCEPT
но проблема возникает, когда php хочет открыть запрос, такой как Soap WebService, на другой сервер. и iptables блокирует это соединение.
Я думаю, что проблема в этой строке:
iptables -P INPUT DROP
но без этой строки разрешены все запросы ко всем другим портам.
и это ошибка php Soap:
object(SoapClient)#48 (2) { ["_soap_version"]=> int(1) ["sdl"]=> resource(97) of type (Unknown) }
Я ценю все ваши комментарии. Благодарю.
Проблема заключается в том, что исходящие соединения используют случайный локальный порт для прослушивания ответов. Так, если, например, вы запрашиваете запись DNS на порту 53, ваш компьютер будет прослушивать данные на порту 42316. Если последний порт заблокирован, как в случае вышеописанной настройки, соединение не будет установлено.
Это легко решается, как правило, разрешением пакетов состояний УСТАНОВЛЕННЫХ и СВЯЗАННЫХ соединений.
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Также измените другие правила, чтобы использовать состояние NEW, так как это, скорее всего, то, что вы хотите ограничить. В противном случае это просто нарушит связь с сервером.
Других решений пока нет …