CentOS 7
従業員と管理者にhttpsアクセスを許可すると同時に、管理者以外のすべての人へのSSHアクセスをブロックするようにリモートサーバーでOpenVPNを正常に設定しました。これは、appONEが入力された従業員に提供されるとうまく機能しますhttps: / 10.8.0.1
。 suppliers
しかし、VPNにログインして入力するときに、3番目のグループがhttpsアクセスを別のアプリケーション(appTWOと呼ばれる)にルーティングできるように、ファイアウォールにどのルールを追加する必要がありますかhttps: / 10.8.0.1
?
@garethTheRedの提案によると、ポート80でappONEを実行し、ポート81でappTWOを実行するのが答えだと思います。これには、ベンダーのIP範囲をポート81にルーティングし、従業員のIP範囲をポート80に指定するファイアウォールルールのみが必要です。しかし、これを達成するにはファイアウォールルールをどのように定義する必要がありますか?
これまで私がしたことは次のとおりです。
必要なユーザーカテゴリ、IP範囲、およびサービスを次のようにまとめました。
Class Virtual IP range Allowed Services
employees 10.8.0.0/24 https (but only appONE)
administrator 10.8.1.0/24 ssh, https
suppliers 10.8.2.0/24 https (but only appTWO)
次に、以下を追加しました/etc/openvpn/server.conf
。
define the Employee IP address pool:
server 10.8.0.0 255.255.255.0
Add a route for the System Administrator IP range:
route 10.8.1.0 255.255.255.0
Add a route for the Supplier IP range:
route 10.8.2.0 255.255.255.0
Specify client configuration directory to assign a fixed IP forAdministrator:
client-config-dir ccd
/etc/openvpn/ccd/suppliers
その後、次の手順で新しいプロファイルを作成しました。
nano suppliers
type the following into /etc/openvpn/ccd/suppliers:
ifconfig-push 10.8.2.1 10.8.2.2
OpenVPN 構成が最初に作成されたことを考慮するとこのチュートリアルの指示を使用してください/etc/openvpn/easy-rsa
source ./vars
次へと入力し、次に入力して証明書を生成しました./build-key suppliers
。 (これはリファレンスチュートリアルの2つのコマンドです。)結果をクライアントシステムにコピーし、次のsuppliers.crt
ファイルsuppliers.key
をsuppliers.ovpn
生成しました。
client
dev tun
proto udp
remote my.SERVER.ip.addr 1194
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
ca /path/to/ca.crt
cert /path/to/suppliers.crt
key /path/to/suppliers.key
その後、クライアントシステムの端末に次のように入力して、クライアントからVPNにログインしようとしました openvpn --config /path/to/suppliers.ovpn
。端末に印刷された最後の2行は次のようになるため、端末の結果はVPN接続が確立されているように見えます。
Tue Mar 10 15:39:50 2015 /usr/sbin/ip route add 10.8.0.1/32 via 10.8.2.2
Tue Mar 10 15:39:50 2015 Initialization Sequence Completed
正しいIPに正常に接続されているようですが、10.8.2.2
まだ接続されていません。試みたときに応答を受信できませんでしたhttps : / 10.8.0.1
。
OpenVPNが機能していることを確認するために、クライアントに次のように入力し、期待どおりにサーバーに正常に接続openvpn --config /path/to/administrators.ovpn
できました。https
ssh
サーバーに入力すると、firewall-cmd --list-all-zones
結果のアクティブ領域は次のようになります。
internal (active)
interfaces: tun0
sources:
services: dhcpv6-client https ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source NOT address="10.8.1.1" service name="ssh" reject
public (default, active)
interfaces: enp3s0
sources:
services: dhcpv6-client openvpn
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules:
それでは、サプライヤアカウントはなぜhttpsになることができないのですか?ベンダーhttps要求が1つのポートabcにルーティングされ、従業員と管理者https要求が別のポートxyzにルーティングされるようにファイアウォールルールを定義するにはどうすればよいですか?
編集する
@garethTheRedの提案に従ってip route
CLIENTに入力し、次のような結果を得ました。
default via 10.0.0.1 dev wlp1s0 proto static metric 1024
10.0.0.0/24 dev wlp1s0 proto kernel scope link src 10.0.0.2
10.8.0.1 via 10.8.2.2 dev tun0
10.8.2.2 dev tun0 proto kernel scope link src 10.8.2.1
サーバーに結果を入力してくださいip route
。
default via my.server.ip.1 dev enp3s0 proto static metric 1024
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
10.8.1.0/24 via 10.8.0.2 dev tun0
my.server.ip.0/24 dev enp3s0 proto kernel scope link src my.server.ip.addr
my.server.ip
。my.server.ip.addr
全4ブロックサーバーのIPアドレスはで表示されますmy.server.ip.addr
。対照的に、最初の3つのブロックのみで表示されますmy.server.ip
。
内容はnano /etc/openvpn/ccd/administrators
一行ですifconfig-push 10.8.1.1 10.8.1.2
。
上記の2つのccdファイルは/etc/openvpn/ccd/administrators
ccdとccdのみです。/etc/openvpn/ccd/suppliers
編集#2
@garethTheRedの指示に従って、従業員のIPアドレス範囲を入力してappONEにログインできますが、https : / 10.8.0.1
管理者はhttpsアクセス権がなくなり、ベンダーはhttpsアクセス権がなくなります。プロバイダに接続するときとhttps : / 10.8.0.1:444
を入力すると、私のhttpsリクエストは拒否されますhttps : / 10.8.0.1
。
注:この問題を診断するためにトピックから逸脱しているように見えるようにしなければなりませんでした。必要に応じてこのEDIT#2の内容を別の質問で投稿したいのですが、今はファイアウォールの設定がまだ問題である可能性があるので、ここに置きます。これらの他のトピックが問題の原因であるという証拠はありません。私は実写にそれらを含めます。
プロバイダのhttpsアクセスが不足しているのは、httpdリバースプロキシの背後にあるtomcatが提供するアプリケーションが原因である可能性があると推測します。そのため、他の記事の指示に従って、tomcatにポート8081を介してappTWOを提供し、ポート8080を介してappONEを提供し続けました。 Tomcatが両方のアプリケーションを正しく提供していることを確認するために、Firewalldのパブリックエリアでポート8080と8081を開きました。
次に、httpdとtomcatを接続するリバースプロキシのコードを確認しました。
リバースプロキシは、/etc/httpd/conf.d/mydomain.com.conf
次の内容を含む次のファイルによってhttpdに定義されます。
<VirtualHost *:443>
ServerName www.mydomain.com
ServerAlias mydomain.com
ErrorLog /path/to/mydomain_com_error.log
CustomLog /path/to/mydomain_com_requests.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /path/to/localhost.crt
SSLCertificateKeyFile /path/to/localhost.key
ProxyPass / ajp://my.server.ip.addr:8009/
ProxyPassReverse / ajp://my.server.ip.addr:8009/
</VirtualHost>
mydomain.com はコンピュータのホスト名ですが、https と http がパブリックエリアで閉じられているため、インターネットから mydomain.com に到達するトラフィックはありません。 OpenVPNユーザーのみがWebアプリケーションにアクセスでき、内部ゾーンでのみ可能です。
Tomcatのserver.xmlはリバースプロキシを定義します<Connector port="8090" protocol="AJP/1.3" redirectPort="8443" />
。
/etc/httpd/conf.d/mydomain.com.conf
ポート444でappTWOの別々のリバースプロキシを試すために、上記のコードセクションの後に次のものを追加しました。
#I added this entire following section as a test for this question
<VirtualHost *:444>
ServerName www.mydomain.com
ServerAlias mydomain.com
ErrorLog /path/to/mydomain_com_error.log
CustomLog /path/to/mydomain_com_requests.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /path/to/localhost.crt
SSLCertificateKeyFile /path/to/localhost.key
ProxyPass / ajp://my.server.ip.addr:8009/
ProxyPassReverse / ajp://my.server.ip.addr:8009/
</VirtualHost>
これがserver.xmlの両方のサービスで定義されていることを確認しましたが、<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
OpenVPNにプロバイダとしてログインしてもhttpsを使用できません。
次に、server.xmlでポート8010を試しましたが、/etc/httpd/conf.d/mydomain.com.conf
まだプロバイダとしてhttpsアクセスを取得できませんでした。
ようやく試してみました。
[root@mydomain ]# telnet localhost 8010
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
[root@mydomain ]# telnet localhost 8009
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
ポート8010がリバースプロキシに対して開かれていないため、プロバイダがappTWOにアクセスできないのが問題なのかどうか疑問に思います。
しかし、httpd.confで次のエントリのコメントを外してhttps : / 10.8.0.1:444
再試行しましたが、それでも拒否されてファイアウォールに問題があるかどうか疑問に思います。
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
注:httpd.serviceを再起動しませんでした。
少なくともベンダーがhttpsを介して静的HTMLを提供できるようにすることができれば、ファイアウォールの問題は解決されたと見なすことができ、必要に応じてリバースプロキシの問題を個別に公開できます。
編集#3
@garethTheRedの編集に従って、内部領域からおよびを削除しましたhttps
。内部領域の豊富な規則https-app2
も削除しました。reject
新しい強化ルールを追加しましたが、accept
管理者にhttps
およびを表示する権限を与えましたhttps-app2
。これを入力すると、結果は次のようになりますfirewall-cmd --list-all --zone=internal
。
internal (active)
interfaces: tun0
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="10.8.1.0" service name="https" accept
rule family="ipv4" source address="10.8.1.0" service name="https-app2" accept
rule family="ipv4" source address="10.8.2.0" service name="https-app2" accept
rule family="ipv4" source NOT address="10.8.1.1" service name="ssh" reject
rule family="ipv4" source address="10.8.0.0" service name="https" accept
<VirtualHost *:444>
その部分も/etc/httpd/conf.d/mydomain.com.conf
写真のように保ちました。編集#2以上。ただし、以下に説明するテストを実行する前に、その情報を入力してくださいsystemctl stop httpd.service
。systemctl start https.service
ただし、どのアカウントでもhttpsまたはhttps-app2としてログインできなくなりました。
たとえば、と入力すると、openvpn --config /path/to/employees.ovpn
端末は次のように応答します。
Thu Mar 12 09:46:22 2015 /usr/sbin/ip route add 10.8.0.1/32 via 10.8.0.9
Thu Mar 12 09:46:22 2015 Initialization Sequence Completed
ログインしているようですが、https : / 10.8.0.1
両方ともhttps : / 10.8.0.1:444
Firefoxで「接続できません」というエラーが発生します。
同様に、入力openvpn --config /path/to/suppliers.ovpn
結果は次のようになります。
Thu Mar 12 09:45:19 2015 /usr/sbin/ip route add 10.8.0.1/32 via 10.8.2.2
Thu Mar 12 09:45:19 2015 Initialization Sequence Completed
しかし、https : / 10.8.0.1
引き続きhttps : / 10.8.0.1:444
Firefoxで「接続できません」というエラーが発生しました。
また、入力openvpn --config /etc/openvpn/administrators.ovpn
結果は以下の通りです。
Thu Mar 12 09:15:36 2015 /usr/sbin/ip route add 10.8.0.1/32 via 10.8.1.2
Thu Mar 12 09:15:36 2015 Initialization Sequence Completed
ただし、https : / 10.8.0.1
その後もhttps : / 10.8.0.1:444
Firefoxで「接続できません」というエラーが発生します。
私はいOpenVPN に管理者として接続すると可能であるため、破損しています。 ssh [email protected]
https
https-app2
答え1
デフォルトhttps
ポート(443)でapp1を実行し、別のポート(444)でapp2を実行します。 SNPPを使用しない限り、この場合は別の無料ポートを選択する必要があります。
https.xml
のファイル/usr/lib/firewalld/services
をに複製し、/etc/firewalld/services
名前をに変更します(例:)https-app2.xml
。
この新しいファイルを編集し、ポートを444
。
https
(およびhttps-app2
)が削除されていることを確認してくださいinternal zone
。
ランニング:
firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="10.8.0.0/24" service name="https" accept'
firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="10.8.0.0/24" service name="https-app2" accept'
firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="10.8.1.0/24" service name="https" accept'
firewall-cmd --zone=internal --add-rich-rule='rule family="ipv4" source address="10.8.2.0/24" service name="https-app2" accept'
これは永続的ではないため、機能する場合は再実行して--permanent
接続する必要があります。