티스토리 뷰

etc

Nginx 특정 IP, URI 접근 막기

Grand_J 2024. 6. 13. 09:38
반응형

Nginx 특정 IP, URI 접근 막기

1. 아이피 목록 파일 만들기 block-ip-list.conf

# 엔진엑스 위치로가서 custom-conf 디렉토리를 만들어 준다
$ cd /etc/nginx
$ mkdir custom-conf

# 아이피 목록 파일 만들기
vi /etc/nginx/custom-conf/block-ip-list.conf

geo $block_ip {
        5.62.41.163 1;
        5.62.58.235 1;
        64.62.197.227 1;
        165.22.69.67 1;
        80.82.77.202 1;
        135.125.246.189 1;
        103.216.223.204 1;
        43.157.42.61 1;
        3.81.226.20 1;
        default 0;
}

:wq!

 

2. URI 단어 파일 만들기 block-word-list.conf 

# URI 단어 파일 만들기
$ vi /etc/nginx/custom-conf/block-word-list.conf

map $request_uri $block_word {
    default 0;
    ~*(wp-includes|wlwmanifest|xmlrpc|wordpress|administrator|wp-admin|wp-login|owa|a2billing) 1;
    ~*(fgt_lang|flu|stalker_portal|streaming|system_api|exporttool|ecp|vendor|LogService|invoke|phpinfo) 1;
    ~*(Autodiscover|console|eval-stdin|staging|magento|demo|rss|root|mifs|git|graphql|sidekiq|c99|GponForm) 1;
    ~*(header-rollup-554|fckeditor|ajax|misc|plugins|execute-solution|wp-content|php|telescope) 1;
    ~*(idx_config|DS_Store|nginx|wp-json|ads|humans|exec|level|monitoring|configprops|balancer|actuator) 1;
    ~*(meta-data|web_shell_cmd|latest|remote|_asterisk|bash|Bind|binding|appxz|bankCheck|GetAllGameCategory) 1;
    ~*(exchangerateuserconfig|exchange_article|kline_week|anquan|dns-query|nsepa_setup|java_script|gemini-iptv) 1;
    ~*(j_spring_security_check|wps|cgi|asmx|HNAP1|sdk|evox) 1;
    ~*(_ignition|alvzpxkr|ALFA_DATA|wp-plain) 1;
    ~*(ldap|jndi|dns|securityscan|rmi|ldaps|iiop|corba|nds|nis) 1;
    ~*(env|docker) 1;
}

:wq!

 

3. 생성한 파일을 적용시키기 (# 생성한 conf파일 include 부분 추가)

# nginx.conf 파일을 수정하기
$ vi /etc/nginx/nginx.conf

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

	# 생성한 conf파일 include
	include /etc/nginx/custom-conf/block-ip-list.conf;
	include /etc/nginx/custom-conf/block-word-list.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;
		...
    }
...

}

 

4. 세팅된 서버에 해당 내용 적용 시키기 (# 아이피 block, # uri 단어 block 추가)

# 각자 설정되어있는 conf 파일 수정
$ vi /etc/nginx/conf.d/xxx.conf

upstream umsapi {
        server 127.0.0.1:8080;
}

server {

        #요청 받는 도메인
        server_name xxx;

        # 아이피 block
        if ($block_ip) { return 444; }

        # uri 단어 block
        if ($block_word = 1) { return 444; }


        location / {
                rewrite ^/(.*)$ /$1 break;
                proxy_pass http://127.0.0.1:3000/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        #특정 패턴의 URI 로 들어올경우 위에서 설정한 umsapi upstream으로 프록싱
        location /api/ {
                rewrite ^/api/(.*)$ /api/$1 break;
                proxy_pass http://127.0.0.1:8080/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }




    listen 443 ssl; # managed by Certbot
    ...

}

server {
    if ($host = xxx) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name xxx;
    listen 80;
    return 404; # managed by Certbot

}

 

5. Nginx 테스트 후 재시작

# nginx text ok면 성공
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ systemctl restart nginx.service

 

 

 

 

끗!@#$!@#%!#%!#%

반응형