
Webã¢ããªã±ãŒã·ã§ã³ãéçºãŸãã¯ä¿å®ããå Žåãããæç¹ã§WAFïŒWebã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ïŒã䜿çšããå¿ èŠæ§ã«å¯ŸåŠããå¿ èŠããããŸãããã®ã¯ã©ã¹ã®ãœãªã¥ãŒã·ã§ã³ã®çµéšããªãå ŽåããŸãã¯çµ¶ãéãªã誀æ€ç¥ã«ããããããŠããå Žåã¯ãã¿ã¹ã¯ãç°¡ç¥åããæ¹æ³ã説æããããã€ãã®ãã³ããšã³ããå ±æããŸããããŒã«ãšããŠãNemesida WAFFreeã䜿çšããŸããããã¯NemesidaWAFã®ç¡æããŒãžã§ã³ã§ãã
èŠèŠåããŸãã¯æåŸããå§ããŸããã
Nemesida WAF Freeã®åäœã¯ãã©ãŠã¶ã§ç£èŠã§ãããããã·ã¹ãã ãç°¡åã«ã»ããã¢ãããããšããããã¯ãããæ»æããããã¯ã®çç±ãIPã¢ãã¬ã¹ãªã©ã®æ å ±ã衚瀺ãããWebã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããããã«ãVTSã¢ãžã¥ãŒã«ïŒäœ¿çšãããŠããå ŽåïŒããã®ãã©ãã£ãã¯ã«é¢ããã°ã©ããå³ãããã³ããŒã¿ã®åœ¢åŒã®èŠçŽçµ±èšãå«ãã»ã¯ã·ã§ã³ã衚瀺ãããŸãã

ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã¹ã¿ã³ãïŒ demo.lk.nemesida-security.comïŒdemo@pentestit.ru / pentestitïŒ

ã€ã³ã¹ããŒã«ãç¶è¡ ããŸãããã
NemesidaWAFç¡æã®ã€ã³ã¹ããŒã«
ç¡æçã¯æ¬æ Œçã®ãã©ãŒã¯ã§ããã«ãããããããWebã¢ããªã±ãŒã·ã§ã³ãžã®æ»æãæ€åºããããã¯ãèŠèŠåããããã®å€æ°ã®æ©èœãå«ãŸããŠããŸããWebã¢ããªã±ãŒã·ã§ã³ãšã¯ãHTTPãããã³ã«ã«åºã¥ããŠæ§ç¯ããããã¹ãŠã®ãã®ãæå³ããŸããWebãµã€ããå人ã¢ã«ãŠã³ãããªã³ã©ã€ã³ã¹ãã¢ããã¬ãŒãã³ã°ãµã€ããAPIãªã©ã§ãã
åã®æ®µèœã§ã¯ã補åã®åäœã¢ãŒããIDSãIPSãããã³PseudoIDSïŒLMã¢ãŒãïŒã®2ã€ïŒ3ã€ã§ãïŒãããããæ»æã®ãããã¯ã®æ©èœãæ€åºãšãããã¯ã«å ·äœçã«åããŸããã
IDSã¢ãŒã
IDSã¢ãŒãã§ã¯ããã©ãã£ãã¯ã³ããŒã§WAFã䜿çšããŠãæ»æãæ€åºã§ããŸããããããã¯ããããšã¯ã§ããŸããããã®åäœã¢ãŒãã¯ãããšãã°ãåæèµ·åãããã·ãã¢ãã¿ãªã³ã°ã§ãèŠæ±ã®ãããã¯ãå¿çæéã®ããããªå¢å ãåé¿ããã®ã«åœ¹ç«ã¡ãŸããã»ããã¢ããäŸã§ã¯ãéä¿¡ãµãŒããŒã«Nginxã䜿çšããŸãïŒãã ããApache2ãIISãªã©ã®ä»ã®ä»»æã®ãµãŒããŒã䜿çšã§ããŸãïŒã
éä¿¡ãµãŒããŒã®æ§æïŒ
location / {
mirror /mirror;
...
}
location = /mirror {
internal;
proxy_pass http://192.168.0.1$request_uri;
}
ïŒ192.168.0.1ã®ä»£ããã«ãNemesida WAFãã€ã³ã¹ããŒã«ãããŠãããµãŒããŒã®ã¢ãã¬ã¹ãæå®ããå¿
èŠããããŸãïŒ
倿Žãå ããŠWebãµãŒããŒãåèµ·åãããšããã®ãµãŒããŒã«çä¿¡ããèŠæ±ã¯ãNemesida WAFãã€ã³ã¹ããŒã«ãããŠãã192.168.0.1ãµãŒããŒã«éä¿¡ ãããŸãïŒæ§æã¯ç°¡åã§ã以äžã§èª¬æããŸãïŒããã®äœæ¥ã¹ããŒã ã«ãããæ»æããããã¯ããããšãªããåæã«ã¡ã€ã³ãµãŒããŒã«åœ±é¿ãäžããããšãªãæ»æãç£èŠã§ããŸãã
IPSã¢ãŒããšPseudoIDS
æ®ãã®2ã€ã®åäœã¢ãŒãã¯ãWAFã®ãéãã®äœ¿çšãæ³å®ããŠããŸãããIPSã¢ãŒãã§ã¯ãæ€åºãããã»ãã¥ãªãã£ã€ã³ã·ãã³ãã¯ãããã¯ãããPseudoIDSã¢ãŒãã§ã¯èšé²ãããŸããããããã¯ãããŸãããæåŸã®ã¢ãŒãã¯ãããã2ã€ã®ã¢ãŒãã®åãæ¿ããããµãŒããŒåïŒãªãã·ã§ã³
nwaf_host_lm
ïŒãšã¯ã©ã€ã¢ã³ãã®IPã¢ãã¬ã¹ïŒãªãã·ã§ã³
nwaf_ip_lm
ïŒã®äž¡æ¹ã§PseudoIDSã¢ãŒãã«åãæ¿ããæ©èœãšããåçŽãªãªãã·ã§ã³ã䜿çšããŠè¡ããããšããç¹ã§äŸ¿å© ã§ãã
äžè¬ã«ãNemesida WAF Freeã¯ãã·ã¹ãã ãã埮調æŽãããããã®å€ãã®ãã©ã¡ãŒã¿ãŒãæäŸããŸããç¬èªã®ãããã¯ããã³é€å€ã«ãŒã«ãäœæããããã®æè»ãªæ©èœãã¯ã©ã€ã¢ã³ãã®IPããé€å€ãªã¹ããã«è¿œå ããæ©èœããã¹ãŠããã³åã ã®ä»®æ³ãã¹ãããšã«çŠæ¢ãèšå®ãããªãã·ã§ã³ãªã©ã§ãã ..ããã®çµæžæ§ã¯ãã¹ãŠãç¡æããŒãžã§ã³ã®æ§æãã¡ã€ã«ãšãæ¬æ ŒçãªããŒãžã§ã³ã®APIåŒã³åºãã«ãã£ãŠå¶åŸ¡ã§ããŸãã
ã€ã³ã¹ããŒã«æé ã«æ»ããŸããããNemesida WAFã¯ãããã€ãã®ã³ã³ããŒãã³ãã®åœ¢ã§æäŸãããŸãã
- Nginxã®åçã¢ãžã¥ãŒã«
- Nemesida WAF APIïŒNemesida WAFããã®ã€ãã³ããåãå ¥ãããã®åŸã®LCã§ã®è¡šç€ºãŸãã¯SIEMã·ã¹ãã ãšã®çµ±åã®ããã«Postgresã«é 眮ããŸãïŒ
- å人ã¢ã«ãŠã³ãïŒã€ã³ã·ãã³ããç£èŠããããã®Webã€ã³ã¿ãŒãã§ã€ã¹ïŒ
- ãã¡ã·ãAIæ©æ¢°åŠç¿ã¢ãžã¥ãŒã«
- è匱æ§ã¹ãã£ããŒãã¡ã·ãWAFã¹ãã£ããŒ
- Nemesida WAFSigntest-æ©æ¢°åŠç¿ã¢ãžã¥ãŒã«ã管çããããã®Webã€ã³ã¿ãŒãã§ã€ã¹
Nemesida WAF Freeã§ã¯ãæåã®3ã€ïŒåçã¢ãžã¥ãŒã«èªäœãNemesida WAF APIãããã³å人ã¢ã«ãŠã³ãïŒã®ã¿ãå¿ èŠã§ãããã¹ãŠã®ã³ã³ããŒãã³ãã¯ã€ã³ã¹ããŒã«ãã£ã¹ããªãã¥ãŒã·ã§ã³ãšããŠå©çšå¯èœã§ãããããŒãžã§ã³1.12以éããã§ã«ã€ã³ã¹ããŒã«ãããŠããNginxã€ã³ã¹ã¿ã³ã¹ã«Nemesida WAFãæ¥ç¶ã§ããŸãïŒNginxã®StableãMainlineãããã³PlusããŒãžã§ã³ããµããŒããããŠããŸãïŒã
ãã€ãããã¯ã¢ãžã¥ãŒã«ãã¡ã·ãWAF
é åžããããåããŠã€ã³ã¹ããŒã«ããªãå Žåãåçã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ãšå®è¡ã®ããã»ã¹ã«ã¯çŽ5ã10åããããŸããåçãªNemesidaWAFã¢ãžã¥ãŒã«ã¯ããã§ã«ã€ã³ã¹ããŒã«ãããŠããNginxã«æ¥ç¶ã§ããŸãïŒãŸãã¯ç¬èªã®ã¢ãžã¥ãŒã«ã䜿çšããŠãœãŒã¹ããã³ã³ãã€ã«ã§ããŸãïŒã
Nemesida WAFãªããžããªã¯ãDebian 9/10ãUbuntu 16.04 / 18.04 / 20.04ãCentos7 / 8ã§äœ¿çšã§ããŸããã³ã³ããŒãã³ãã®ã€ã³ã¹ããŒã«ãšåææ§æã«é¢ãããããªã®èª¬æã¯ãYoutubeãã£ã³ãã«ã§å ¬éãããŠããŸãããããããããçè§£ããŠããããšããå§ãããŸãããäžéšã®ãã©ã¡ãŒã¿ãŒãå€ããªã£ããã远å ããããããå¯èœæ§ããããããã¡ã€ã³ãµã€ãã®ããã¥ã¡ã³ãã«åŸã£ãŠã€ã³ã¹ããŒã«ããã³æ§æããããšããå§ãããŸãã
ãã€ãããã¯ã¢ãžã¥ãŒã«NemesidaWAFã®ã€ã³ã¹ããŒã«ïŒãããªïŒ
Nginxãæ§æããããOSã«å¯Ÿå¿ããNemesida WAFãªããžããªã«æ¥ç¶ããã€ã³ã¹ããŒã«ãç¶è¡ããŸãã補åããªããžããªããæŽæ°ãããŸããã€ã³ã¹ããŒã«æé ã¯ãgithub.com / nemesida-waf / nemesida_waf_freeã§å ¥æã§ããŸã ã
Nemesida WAFAPIãšå人ã¢ã«ãŠã³ã
åçã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŠèµ·åããããæ®ãã®2ã€ã®ã³ã³ããŒãã³ãã§ããNemesida WAFAPIãšPersonalAccountã®ã€ã³ã¹ããŒã«ã«ç§»ããŸãã
Nemesida WAF APIã¯ãFlaskã䜿çšããŠèšè¿°ãããAPIã®åœ¢åŒã§æäŸãããNemesida WAFãNemesida WAF Scannerãããã³Nemesida AIããã€ãã³ããåä¿¡ãããããã®ã€ãã³ããããŒã¿ããŒã¹ã«é 眮ããããã«èšèšãããŠããŸãã PostgreSQLã¯DBMSãšããŠäœ¿çšãããŸãã Nemesida WAFã®ç¡æããŒãžã§ã³ã§ã¯ããããã¯ããããªã¯ãšã¹ãã«é¢ããæ å ±ã®ã¿ãããŒã¿ããŒã¹ã«éä¿¡ãããŸãã
Nemesida WAF APIãæ§æããPostgreSQLã«æ¥ç¶ããããå人ã¢ã«ãŠã³ãã®èµ·åãéå§ããŸããããã¥ã¡ã³ãã«ãããšãã€ã³ã¹ããŒã«ãæ§æãç§»è¡ã®å®è¡ãå ¥åãããŠãŒã¶ãŒãšãã¹ã¯ãŒãã®æå®ãè¡ããŸãã
çµéšäžãæåŸã®2ã€ã®ã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ãããšãããã«åé¡ãçºçããŸãïŒéåžžãäžéšã®æé ã¯ã¹ããããããŸããããšãã°ãç§»è¡ãå¿ããããPostgresãžã®æ¥ç¶ãèš±å¯ãããããŸãïŒããã®ãããã¯ã€ãã¯ã¹ã¿ãŒããšããŠãä»®æ³ã¢ãã©ã€ã¢ã³ã¹ïŒDebian10ããã³NemesidaWAFã³ã³ããŒãã³ããåãã ä»®æ³ãã£ã¹ã¯ã3GBããè§£åïŒãããã³2ã€ã®Dockerã€ã¡ãŒãžãäœæããŸãã ïŒåçã¢ãžã¥ãŒã«çšããã³Nemesida WAF API /å人ã¢ã«ãŠã³ãçšã
ããŠãæãéå±ãªéšåã¯çµãããŸãããããã§ãWAFã®åäœã確èªã§ããŸãã
æåã®ããã¯
ãã§ã«æ§æãããŠããWAFã®åäœããã¹ãããããã«ãããŸããŸãªæ»æã®ããªãšãŒã·ã§ã³ãèŠããŠããå¿ èŠã¯ãããŸãããNemesida WAFãæ©èœããŠãããã©ãããããã³ãããã¯ãããæ»æãLCã«è¡šç€ºãããŠãããã©ããã確èªã§ãããã¹ã眲åãäœæããŸããã䜿çšãããŠãã眲åã®çŸåšã®ã»ããã¯ãrlinfo.nemesida-security.comã§ãã€ã§ã衚瀺ã§ã ãŸãã
ãªã¯ãšã¹ããéä¿¡ããŸãïŒã³ã³ãœãŒã«ããå®è¡ããŸããããããããããããããã«ãã©ãŠã¶ãŒããå®è¡ããããšããå§ãããŸãïŒã
curl --noproxy '*' example.com/nwaftest
ãŸãã¯ãããçŸå®ã«è¿ããã®ãå¿ èŠãªå ŽåïŒ
curl --noproxy '*' example.com/?cmd=;+cat+/etc/passwd
å¿çãšããŠã403å¿çã³ãŒããåãåããŸãã
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.18.0</center> </body> </html>
ãããŠæ°ç§ã§æ»æãLCã«çŸããã¯ãã§ãïŒ

ãªã¯ãšã¹ãããããã¯ãããŠããªãå Žå-WAFãæ£ããæ¥ç¶ãŸãã¯æ§æãããŠããªãïŒããããã¢ãã¬ã¹ãŸãã¯ãã¹ããWL / LMã«è¿œå ãããŠããïŒããªã¯ãšã¹ãããããã¯ãããŠãããLCã«æ å ±ããªãå Žå-Nemesidaãšã®çžäºäœçšã®æ£ç¢ºãã確èªããŸãWAFAPIããã³LCããããã«ããããã€ã§ããã©ãŒã©ã ã§è³ªåããããšãã§ããŸã ã
ã«ã¹ã¿ã 403ããŒãž
ããã©ã«ãã§ã¯ã403ããŒãžïŒ403å¿çã³ãŒãã®ããããŒãžïŒã¯é åçã§ãªããæ å ±ããã¡ã§ããNemesida WAFãNginxãšçµã¿åãããããšã§ãçŸãããããæçãªãã®ã«ããããšãã§ããŸãã
ãµãŒããŒã§ãã®ãããªããŒãžãæäŸããã«ã¯ã次ã®ããšãè¡ãå¿ èŠããããŸã
ã1ãã«ã¹ã¿ã ããŒãžã®æ§æãã¡ã€ã«ãäœæããŸãïŒããšãã°ã
/etc/nginx/snippets/custom_pages.conf
ïŒã
Nginxã«å¿
èŠãªãã©ã¡ãŒã¿ã远å ããŸã
â 222 403 405
;
( example.com/403.html â ), ID ($request_id), ($host), , IP ($remote_addr) ( ) Nemesida WAF ($nwaf_block_type). Nemesida WAF , , 1 2 â , 3 â , 4 â ..
## Error pages
error_page 403 405 = 222 /403.html;
## Locations
location /403.html {
internal;
root /var/www/custom_pages/;
proxy_no_cache 1;
proxy_cache_bypass 1;
add_header X-Request-ID $request_id always;
add_header Host $host always;
add_header X-Remote-IP $remote_addr always;
add_header NemesidaWAF-BT $nwaf_block_type always;
}
説æïŒ
error_page 403 405 = 222 /403.html;
â 222 403 405
/403.html
;
/403.html
( example.com/403.html â ), ID ($request_id), ($host), , IP ($remote_addr) ( ) Nemesida WAF ($nwaf_block_type). Nemesida WAF , , 1 2 â , 3 â , 4 â ..

2.äœæãããã¡ã€ã«ãæ¥ç¶ããŸãã
äœæãããã¡ã€ã«ãNginxæ§æã«æ¥ç¶ããŸã
(,
):
/etc/nginx/conf.d/example.com.conf
):
server {
...
## Custom pages
include snippets/custom_pages.conf;
....
}
3.
/var/www/custom_pages/403.html
次ã®ã³ã³ãã³ãïŒããšãã°ïŒã䜿çšããŠã«ã¹ã¿ã ããŒãžïŒããšãã°ïŒãäœæããŸã ã
ã«ã¹ã¿ã 403ããŒãžã®äŸ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="refresh" content="7; URL=/" />
<style type="text/css">
.error {color:#000; font-family:Arial, sans-serif; text-align: center; position: absolute; top: 50%; left: 50%; -moz-transform: translateX(-50%) translateY(-50%); -webkit-transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%);}
.error-fon {font-weight:bold; color:#d0e3f7;}
.error-text-top {font-size:16px; color:#434141}
hr { display: block; height: 10px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
</style>
<title>403 Access denied</title>
</head>
<body>
<div class="error">
<div class="error-fon">
<font style="font-size:240px;">403</font>
<br>
<font style="font-size:40px;">ACCESS IS BLOCKED</font>
</div>
<br>
<div class="error-text-wrap">
<div class="error-text-top">
<p>
<hr>
<p style="text-align: justify;">
Suspicious activity. If the request is blocked by mistake, please email us at <a href="mailto:blocked@example.com">blocked@example.com</a> and be sure to include technical information below (domain, IP, request ID), or try again in 5 minutes.
<br><br>
. , , <a href="mailto:blocked@example.com">blocked@example.com</a>, (domain, IP, request ID), 5 .
</p>
<hr>
<table style="text-align: left; margin: auto">
<tr>
<td>
<code style="font-size:14px;"> Domain:</code>
</td>
<td>
<code style="font-size:14px;"> <span id="domain">-</span> </code>
</td>
</tr>
<tr>
<td>
<code style="font-size:14px;"> IP address:</code>
</td>
<td>
<code style="font-size:14px;"> <span id="ip">-</span> </code>
</td>
</tr>
<tr>
<td>
<code style="font-size:14px;"> Request ID:</code>
</td>
<td>
<code style="font-size:14px;"> <span id="id">-</span> </code>
</td>
</tr>
</table>
</p>
</div>
<script type="application/javascript">
function replace() {
window.location.replace('/');
}
const req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
const req_id = req.getResponseHeader('x-request-id');
const req_domain = req.getResponseHeader('host');
let req_ip = req.getResponseHeader('x-remote-ip');
const req_bt = req.getResponseHeader('nemesidawaf-bt');
if (req_bt == 6)
{
req_ip = req_ip + " (banned)";
}
if (req_bt ==7)
{
req_ip = req_ip + " (banned, bruteforce)";
}
document.getElementById('domain').innerHTML = req_domain;
document.getElementById('ip').innerHTML = req_ip;
document.getElementById('id').innerHTML = req_id;
if (req_bt != 6 & req_bt !=7)
{
setTimeout(replace,3000);
}
</script>
</div>
</div>
</body>
</html>
Nginxãåèµ·åãããšïŒNemesida WAFãã€ã³ã¹ããŒã«ãããŠããå ŽåïŒãå¿çã³ãŒã403ããã³405ã®ãã¹ãŠã®ããŒãžã¯æ¬¡ã®ããã«ãªããŸã

ãã«ã¹ã¿ã ããŒãžã¯7ç§ããšã«æŽæ°ãããã¯ã©ã€ã¢ã³ãã®IPãçŠæ¢ãããŠããªãå Žåããµã€ãã®ã«ãŒãããŒãžãè¿ãããŸãã
èªåçŠæ¢
ããªãã¯ããããFail2banã®ãããªèªåçŠæ¢ã·ã¹ãã ãèããããšããããããããã¯äœ¿çšããŠããŠããããã®é·æãšçæã«ã€ããŠç¥ã£ãŠããŸããNemesida WAFã¯ãçµã¿èŸŒã¿ã®èšå®ãç°¡åãªçŠæ¢ã¡ã«ããºã ã䜿çšããŠãããä»®æ³ãµãŒããŒãã¹ãã«ä»»æã®ãããã¯æéãèšå®ã§ããŸããããããã³ã°ã¯IPã¢ãã¬ã¹ã«ãã£ãŠçºçããæ¬¡ã®ãªãã·ã§ã³ãå¶åŸ¡ã«äœ¿çšã§ããŸãã
- ããããã³ã°ã«ã€ãªããIPæ»æã®æ°ã
- ããããã³ã°æé;
- æ»æã®å¯Ÿè±¡ãšãªãä»®æ³ãã¹ãïŒãªãã·ã§ã³ïŒã
èªåãããã¯ãã©ã¡ãŒã¿ã¯
nwaf_limit
ããã¡ã€ã«ã§äœ¿çšå¯èœãªãã©ã¡ãŒã¿ã«ãã£ãŠå¶åŸ¡ãã ãŸã
/etc/nginx/nwaf/conf/global/nwaf.conf
ããã®ãã©ã¡ãŒã¿ãŒã®äœ¿çšã¯ããµã€ãã®è匱æ§ãã¹ãã£ã³ããŠããå ŽåããŸãã¯æ€åºãããè匱æ§ã宣äŒããããšããŠããå Žåã«åœ¹ç«ã¡ãŸãã
ãªã¹ãäž
WAFã®äœæ¥ã¯ãæ»æãŸãã¯ç°åžžã®å åãå«ãŸããŠããå Žåã«ãµãŒããŒã«éä¿¡ãããèŠæ±ãšå¿çãåæãããšããååã«åºã¥ããŠããŸããNemesida WAFã®ãã«ããŒãžã§ã³ã§æ¹åãããæ£èŠåãã¯ãããžãŒãšçµã¿åãããæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ã®äœ¿çšã«ããããã®ãããªæ»æãæ£ç¢ºã«æ€åºãã誀æ€ç¥ã®æ°ãæå°éã«æããããšãã§ããŸãïŒçŽ0.01ïŒ ïŒãã誀æ€ç¥ã®æ°ãæžããããã®ç¡æããŒãžã§ã³ã§ã¯ãã¢ãŒããã¯ãã£ã«åºæã®å¶éãçºçããŸãã眲ååæããããã£ãŠãç¡æããŒãžã§ã³ã«ã¯ããå€ãã®èª€æ€ç¥ãããããã®åé¡ã解決ããã«ã¯é€å€ãªã¹ãïŒãŸãã¯ããã¯ã€ããªã¹ããïŒã䜿çšããå¿ èŠããããŸããé€å€ã«ãŒã«ã®äœæã¯ãNemesidaWAFã§ãå©çšã§ããŸãã
ã»ãšãã©ã®å Žåã誀æ€ç¥ã¯ãWebãªãœãŒã¹ã®ç®¡çè /ã¢ãã¬ãŒã¿ãŒãWebã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠæŽæ°ãŸãã¯å€æŽãè¡ãããªã¯ãšã¹ãã®æ¬æã§ãŠãŒã¶ãŒã«ãšã£ãŠäžè¬çã§ã¯ãªãæ§é ãéä¿¡ãããšãã«è¡šç€ºãããŸãã æ£åœãªãªã¯ãšã¹ãã«ã¯é¢æ°ãšã³ããªãå«ãŸããŠãããããããã¯ãã ãŸããããã®ãããªãªã¯ãšã¹ãã¯éåžžââã®èšªåè ã«ã¯äžè¬çã§ã¯ãããŸããã WebãªãœãŒã¹ã ã¢ããªã±ãŒã·ã§ã³ç®¡çè ãWAFããã€ãã¹ããŠå¯Ÿè©±ã§ããªãå Žåã¯ããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããIPã¢ãã¬ã¹ãäŸå€ã®ãªã¹ãã«è¿œå ããããã¢ãã¬ã¹ãPseudoIDSã¢ãŒãïŒãªãã·ã§ã³ïŒã«åãæ¿ããŠããããã¯ããã«ã€ãã³ãããã£ããã£ã§ããŸã ããã ãããã®ãããªã¢ã¯ã·ã§ã³ã«ã¯åžžã«ååæ³šæããå¿ èŠããããŸãã
...
$html = curl_exec($ch);
curl_close($ch);
return json_decode($html,true);
...
json_decode()
nwaf_ip_lm
ã¡ãªã¿ã«ãNemesida WAFã§ã¯ãIPã¢ãã¬ã¹ã ãã§ãªããå¿ èŠã«å¿ããŠãµããããã远å ã§ããŸãã
çµè«
ããªãã®æèŠã§ã³ãŒããã©ãã ãããŸãæžãããŠãããã«é¢ä¿ãªããããã¯å ¥åãã£ã«ã¿ãªã³ã°æ©èœãšããã¹ãŠã§ã¯ãªãã«ããŠããã¹ãŠã®æªæã®ããã³ãŒããåé€ããããã«èšèšãããHTML Purifierã®ãããªç¹å¥ãªãã¬ãŒã ã¯ãŒã¯ã䜿çšãããã®ã»ãšãã©ã¯ãã»ãã¥ãªãã£ã®ã¬ãã«ãäžããããã«WAFã䜿çšããå¿ èŠããããŸãã
åããŠWAFã䜿çšããå ŽåããŸãã¯é€å€ã«ãŒã«ãééãªã远å ããããšã«ããããããŠããå Žåã¯ãNemesida WAFFreeã詊ãããšããå§ãããŸããæ¥åçšïŒè€éãªæ»æã®ãããã¯ããã«ãŒããã©ãŒã¹æ»æãSMSãã©ããã£ã³ã°ãè匱æ§ã®æ€çŽ¢ãä»®æ³ãããã·ã¹ãã ã®ååšãªã©ïŒã«ã¯ããã·ã³åŠç¿ã¢ãžã¥ãŒã«ãšè匱æ§ã¹ãã£ããŒãåãããã«ããŒãžã§ã³ã®NemesidaWAFãå¿ èŠã§ããããã§ããã»ãšãã©ã®éæšçæ»æãšãã«ã¯ã¹ãã£ã³ã§ã¯ãNemesida WAFFreeãåªãã䟿å©ãªããŒã«ã«ãªããŸãã
ãã®èšäºã§ã¯ããã®ã¯ã©ã¹ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšãããšãã«æãé »ç¹ã«çºçããç¶æ³ãæããã«ããããšããŸãããã³ã¡ã³ãæ¬ã§ãã£ãšèŠããŠããã ããã°å¹žãã§ãã