WebアプリケーションからWebAPIへアクセスする際に「たまたま接続できなかった」を再現する場合、プログラムコードでわざとエラーを発生させたりしていますが、コードを注入せずエラーを再現させたいのですが、方法が思いつきません。
やってみたこと
iptablesを使って特定IPアドレスのアウトバウンドをドロップすることはできましたが、特定のURLを含む場合ができませんでした。
# できた iptables -A OUTPUT -d 192.168.0.10/32 -j DROP # できなかった iptables -A OUTPUT -d 192.168.0.10/32 -m string --algo bm --string 'phpinfo' -j DROP
↑ローカルエリアのサーバーへ、「phpinfo」を含む場合はドロップする仕掛けとして考えたコマンドラインですが、疎通できてしまいます。
また同じURLでも1回目は通信NG、2回目は通信OKという具合にもテストしたく、HTTPのXヘッダーを作り、そのXヘッダーを含む外部通信を遮断したいのですが、これも方法が思い当たりません。
何かよい方法(別途ツールがあれば、それとか)がありますでしょうか。
【追記】特定URLのアウトバウンドをDROPができた
一部解決できました。
アルゴリズムを「bm」から「kmp」に変えると遮断できました。
[root@www ~]# iptables -A OUTPUT -d 192.168.0.10/32 -m string --algo kmp --string 'phpinfo' -j DROP [root@www ~]# wget http://192.168.0.10/phpinfo.php --2019-11-21 11:06:02-- http://192.168.0.10/phpinfo.php Connecting to 192.168.0.10:80... connected. HTTP request sent, awaiting response... No data received. Retrying.
※これで特定URLに対しては全DROPができましたが、Webアプリケーション内では同じURLに対して2回通信しているので、1回目はエラー、2回目は正常というテストはできません。
Webアプリケーションの環境
・PHP5.6~、nginx1.16.1
・PHPからcURLまたはソケット通信で外部へ通信
・外部のWebAPIはHTTPS接続。
回答1件
あなたの回答
tips
プレビュー