Today I Learned
id #aws#cloudfront#waf#odoo

Model Odoo Berakhiran .log Diblokir AWS WAF

Ada satu model Odoo yang gambarnya tidak pernah muncul di server dev. Selalu 403. Model lain normal, dan di localhost model itu pun normal.

Yang membedakan cuma nama modelnya: berakhiran .log.

Odoo menaruh nama model di URL. Kalau ada model bernama custom.audit.log, request gambarnya berbentuk seperti ini: /web/image?model=custom.audit.log&id=42&field=image_1920. Nilai query argument-nya berakhiran .log.

Yang memblokir ternyata AWS WAF, bukan CloudFront. WebACL-nya terpasang di CloudFront distribution, dan di dalamnya ada managed rule group AWSManagedRulesCommonRuleSet dengan rule RestrictedExtensions. Rule itu memblokir request yang menunjuk ke extension yang tidak wajar diminta dari sebuah web server, seperti .log, .ini, dan .bak. Dia mengecek dua tempat: URI path dan query argument.

Karena diblokir di edge, requestnya tidak pernah sampai ke server Odoo. Log Odoo bersih, dan yang balik ke browser adalah 403 dengan halaman error CloudFront, bukan error page Odoo. Itu cara membedakannya. Kalau errornya datang dari Odoo, berarti requestnya lolos WAF.

Di localhost tidak ada CloudFront dan tidak ada WAF, jadi tidak ada yang membaca URL itu sebagai permintaan file log. Konvensi penamaan model Odoo pakai titik, daftar extension terlarang juga pakai titik. Dua konvensi yang baru saling kenal setelah ada sesuatu yang berdiri di depan Odoo.