ラックスペースでCentOSサーバーを起動し、yum install httpd
'dを実行しました。次にservices httpd start
。だから、ただの骨だ。
私はssh(22)を介してリモートでそのIPアドレスにアクセスできるので、DNSなどには何の問題もありません(と思う...)が、ポート80で(ブラウザーなどを介して)接続しようとすると、接続拒否。
ただし、localhostからは、telnet(80)またはlynx自体を使用して、問題なくサービスを提供できます。外部(私の家、学校、地元のコーヒーショップなど)から、telnetは22で接続しますが、80では接続しません。
私はnetstat -tulpn
を使用します(<-嘘をつくつもりはありません、-tulpn
の部分は理解できませんが、それはインターネットが私に指示したことです...)
tcp 0 0 :::80 :::* LISTEN -
私はそうすべきだと信じています。 httpd.conf
はListen 80
と言います。
私は何度もservices httpd restart
'しました。
正直なところ、私は何をすべきかわかりません。ラックスペースがポート80の着信要求にファイアウォールを持つ方法はありません。私は愚かな何かを見逃しているように感じますが、今ではベアボーンサーバーを2回起動し、いじくり回して物事をいじくり回したが、どちらも機能しなかったと考えてこの機能を実現するために絶対的な最小値を達成しました。
どんな助けも大歓迎です! (そして、長く曲がった投稿を申し訳ありません...)
編集iptables -L
の出力を投稿するように求められました。だからここにある:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-Host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-Host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
まだ解決されていない場合。あなたのiptablesは言う:
状態関連、確立済み
つまり、すでに確立されている接続のみを通過させます...これは、リモートマシンではなく、ユーザーが確立したものです。次に、次のルールでこれの例外を確認できます。
state NEW tcp dpt:ssh
これはsshのみにカウントされるため、httpに対して同様のルール/行を追加する必要があります。これは次のように実行できます。
state NEW tcp dpt:80
あなたはこのようにすることができます:
Sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
(この場合、4行目に新しいルールを追加することを選択しています)
ファイルを編集したら、次のように保存する必要があることに注意してください。
Sudo /etc/init.d/iptables save
CentOS 7は現在、デフォルトでfirewalldを使用しています。しかし、すべての答えはiptablesに焦点を当てています。それで、firewalldに関連する答えを追加したかったのです。
Firewalldはiptablesの「ラッパー」であるため、antonio-fornieの答えを使用することはまだ機能しているようですが、その新しいルールを「保存」することはできませんでした。そのため、ファイアウォールの再起動が発生するとすぐに、Apacheサーバーに接続できませんでした。幸いなことに、firewalldコマンドを使用して同等の変更を行う方が実際にはずっと簡単です。 firewalldが実行されているかどうかを最初に確認します。
firewall-cmd --state
実行中の場合、応答は単に「実行中」という1行になります。
パブリックゾーンで一時的にhttp(ポート80)接続を許可するには:
Sudo firewall-cmd --zone=public --add-service=http
上記は「保存」されず、次にfirewalldサービスが再起動されると、デフォルトのルールに戻ります。この一時的なルールを使用して、先に進む前に接続の問題をテストし、確実に解決する必要があります。
パブリックゾーンでHTTP接続を永続的に許可するには:
Sudo firewall-cmd --zone=public --permanent --add-service=http
「temporary」コマンドも実行せずに「permanent」コマンドを実行する場合、firewalldを再起動して新しいデフォルトルールを取得する必要があります(これはCentOS以外のシステムでは異なる場合があります)。
Sudo systemctl restart firewalld.service
これで接続の問題が解決しない場合は、インターフェイスが「パブリックゾーン」にないことが原因である可能性があります。次のリンクは、firewalldについて学ぶための優れたリソースです。ゾーンの確認、割り当て、構成の方法について詳しく説明します。 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on -centos-7
SELinuxは、Apache(およびすべてのApacheモジュール)がデフォルトでリモート接続を行うことを防ぎます。
# setsebool -P httpd_can_network_connect=1
Iptables.configテーブルの以下の設定で試してください
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
以下のコマンドを実行して、iptableサービスを再起動します
service iptables restart
httpd.configファイルを変更します
Listen 192.170.2.1:80
apacheを再起動します。
今すぐやってみて下さい。
RHEL/CentOS 7を使用している場合(OPはそうではありませんでしたが、私は私のケースのソリューションを共有すると思いました)、他の回答に記載されているiptablesサービスの代わりにfirewalldを使用する必要があります。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
そして、それが実行されていることを確認します:
firewall-cmd --permanent --zone=public --list-all
ports
の下に80/tcp
をリストする必要があります
これは、Apacheを外部からアクセス可能にするために機能したものです。
Sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Sudo service iptables restart
Apache構成ファイル(httpd.conf、Apache2.conf、listen.conf、...)でLISTENディレクティブを検索し、localhostまたは127.0.0.1が表示される場合は、パブリックIPで上書きする必要があります。
Iptablesを無効にしてみてください:service iptables stop
これが機能する場合、ファイアウォールルールに対してTCPポート80を有効にします。rootからsystem-config-selinuxを実行し、ファイアウォールでTCPポート80(HTTP)を有効にします。
これは動作します:-REDHATの場合:cat "/ etc/sysconfig/iptables"
iptables -I RH-Firewall-1-INPUT -s 192.168.1.3 -p tcp -m tcp --dport 80 -j ACCEPT
に続く
Sudo /etc/init.d/iptables save
Apacheを特定のインターフェイスにリストし、次のようにポートするように設定します。
Listen 192.170.2.1:80
また、そのポートにアクセスする外部ホストとホストで干渉している可能性のあるIptablesおよびTCP Wrappersエントリも確認します。