IPTables dan Port redirection Apache2

1

Saya menggunakan Apache untuk mengalihkan subdomain ke port ( mod_proxy, mod_proxy_http, mod_proxy_ajp ) dan Tabel IP untuk membatasi akses port langsung kecuali untuk saya dan server lokal.

Tabel IP saya terlihat seperti ini:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:tproxy
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:http-alt
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:webmin
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:webmin

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Konteks yang akan saya gunakan dalam posting ini adalah:

Nexus Sonatype: nexus.example.com => example.com:8081

Jenkins CI: jenkins.example.com => example.com:8080

Webmin: webmin.example.com => example.com:10000

Apa yang saya miliki saat ini adalah tidak ada akses port langsung kecuali saya. Saya juga ingin sistem lokal dapat mengakses port yang, saya yakin, saya miliki sekarang. saya menggunakan mod_proxy_ajp untuk Jenkins CI dan Webmin dan mod_proxy_http untuk Sonatype Nexus.

Ketika saya mengunjungi port langsung, masing-masing layanan ini memuat dengan baik. Ketika saya meminta orang lain untuk memuat masing-masing, mereka tidak bisa, jadi itu berhasil.

Namun sekarang, ketika mencoba mengakses salah satu subdomain, dapatkan saya mendapatkan beban yang tidak pernah berakhir (infinite loop?)

Ketika saya menjalankan tracert pada subdomain, itu berakhir dengan baik sehingga saya bisa mencoret infinite loop.

Ini adalah konfigurasi host virtual Sonatype Nexus apache saya:

<VirtualHost *:80>
        ServerName nexus.majornoob.com
        ServerAlias www.nexus.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:8081/
        ProxyPassReverse / http://localhost:8081/
        ProxyPassReverseCookiePath / /
        ErrorLog /var/www/majornoob/error-nexus.log
        LogLevel warn
        CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>

dan inilah Jenkins saya:

<VirtualHost *:80>
        ServerName jenkins.majornoob.com
        ServerAlias www.jenkins.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / ajp://127.0.0.1:8080/
        ProxyPassReverse / ajp://127.0.0.1:8080/
        ProxyPassReverseCookiePath / /

        ErrorLog /var/www/majornoob/error-jenkins.log

        LogLevel warn

        CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>

Dua contoh host virtual ini gunakan mod_proxy_ajp dan mod_proxy_http masing-masing.

Adakah yang bisa membantu saya mencari tahu mengapa saya mendapatkan beban yang tak terbatas?

Terima kasih.

edit: Nevermind pada infinite loop. Setelah beberapa waktu, saya menerima kesalahan 503 Layanan Tidak Tersedia.

jdersen
sumber

Jawaban:

1

Aturan iptables dievaluasi dalam urutan, atas ke bawah seperti yang dicetak. Masalah yang Anda miliki adalah bahwa koneksi proksi berasal dari localhost, yang cocok dengan aturan ini:

DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy

localhost tidak c-24-7-..., jadi koneksi terputus. Modul proxy akhirnya habis; jika aturannya Tolak daripada DROP, Anda akan mendapatkan kesalahan lebih cepat (karena Anda akan ditolak secara eksplisit daripada upaya koneksi menghilang begitu saja).

Solusinya cukup sederhana: menyusun ulang aturan untuk memiliki "terima dari localhost" sebelum "tolak dari tempat lain". (Routing IP cocok dengan yang paling spesifik, tetapi karena iptables adalah multi-faktor, itu belum tentu didefinisikan).

Saya biasanya merekomendasikan memiliki aturan pertama yang memungkinkan semua komunikasi localhost (melalui antarmuka loopback, kalau-kalau seseorang mencoba sesuatu yang aneh melalui ethernet); coba tambahkan

iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT

untuk memasukkan ( -I ) yang ada di bagian atas daftar.

Gabe
sumber