پیدا کردن بات مربوط به سایت های خبرخوان با استفاده از nginx access log و بلاک کردن آدرس IP آنها توسط firewalld در CentOS 7

بدست آورده ip ها

ابتدا لاگ دسترسی nginx را فعال کنید.

سپس با استفاده از دستور زیر مسیر rss خود را در فایل access.log جسجو کنید.

grep feed.xml access.log | awk -F\- '{print $1}' | sort | uniq -c | sort -n

بررسی ip ها

خروجی دستور فوق به صورت زیر است:

...
     14 8.29.198.25
     10 5.250.78.228
      8 5.120.147.77
      6 209.133.111.211
      5 199.119.124.47
...

یکی از راه های بررسی باز کردن این ip ها در مرورگر است. برای راحتی این کار میتوانید این خروجی را به فایل notepad++ منتقل کنید و جایگزینی زیر را برای تبدیل ip ها به لینک انجام دهید.

Find: ^\s+\d+\s(.*)
Replace: <a target="_blank" href="http://$1">$1</a><br/>

با الصاق کد زیر به html بالا میتوان استفاده از ip توسط یک سرور را مورد بررسی قرار داد:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(function(){
    $('a').each(function(){
        var url = $(this).attr('href');
        var ip = $(this).text();
        var $this = $(this);
        var status = isValidURL(url);
        if(status) {
            $this.css({color: 'green'});
        } else {
            $this.css({color: 'red'});
        }
        
        $.ajax({
          url: 'http://freegeoip.net/json/' + ip,
          type: "get",
          async: true,
          dataType: "json",
          success: function(data) {
            $this.append(' ('+data.country_name+') ');
          },
          error: function(){
          }
        });
    });
});

function isValidURL(url) {
    var encodedURL = encodeURIComponent(url);
    var isValid = false;

    $.ajax({
      url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
      type: "get",
      async: true,
      dataType: "json",
      success: function(data) {
        isValid = data.query.results != null;
      },
      error: function(){
        isValid = false;
      }
    });

    return isValid;
}
</script>

مسدود کردن ip

حالا ip های مشکوک را بعد از بررسی بلاک کنید:

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="109.74.11.81" reject'

با استفاده از دستور زیر نیز بیشتری دسترسی ها بر اساس ip لیست خواهد شد

cat access.log | awk -F\- '{print $1}' | sort | uniq -c | sort -n -r | head -10
درخت مرجع: 

افزودن نظر جدید