web-dev-qa-db-ja.com

localhostの外部からの着信接続を受け入れないApache

ラックスペースで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.confListen 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   
57
Phildo

まだ解決されていない場合。あなたの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
108
antonio.fornie

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

17
Josh

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を再起動します。

今すぐやってみて下さい。

3
Raja

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をリストする必要があります

2
Matt Pennington

これは、Apacheを外部からアクセス可能にするために機能したものです。

Sudo iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
Sudo service iptables restart
1
user4806038

Apache構成ファイル(httpd.conf、Apache2.conf、listen.conf、...)でLISTENディレクティブを検索し、localhostまたは127.0.0.1が表示される場合は、パブリックIPで上書きする必要があります。

1
Pethical

Iptablesを無効にしてみてください:service iptables stop

これが機能する場合、ファイアウォールルールに対してTCPポート80を有効にします。rootからsystem-config-selinuxを実行し、ファイアウォールでTCPポート80(HTTP)を有効にします。

1
dAm2K

これは動作します:-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
1
Mr.T

Apacheを特定のインターフェイスにリストし、次のようにポートするように設定します。

Listen 192.170.2.1:80

また、そのポートにアクセスする外部ホストとホストで干渉している可能性のあるIptablesおよびTCP Wrappersエントリも確認します。

Apacheのドキュメントのバインド

0
nsfyn55