最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx+Lua腳本+Redis 實(shí)現(xiàn)自動(dòng)封禁訪問(wèn)頻率過(guò)高IP

 更新時(shí)間:2024年10月27日 10:40:30   作者:冰 河  
本文主要介紹了如何使用OpenResty+Lua進(jìn)行動(dòng)態(tài)封禁IP的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

自己搭建的網(wǎng)站剛上線,短信接口就被一直攻擊,并且攻擊者不停變換IP,導(dǎo)致阿里云短信平臺(tái)上的短信被惡意刷取了幾千條,加上最近工作比較忙,就直接在OpenResty上對(duì)短信接口做了一些限制,采用OpenResty+Lua的方案成功動(dòng)態(tài)封禁了頻繁刷短信接口的IP。

一、臨時(shí)解決方案

由于事情比較緊急,所以,當(dāng)發(fā)現(xiàn)這個(gè)問(wèn)題時(shí),就先采用快速的臨時(shí)方案解決。

(1)查看Nginx日志發(fā)現(xiàn)被攻擊的IP 和接口

[root@binghe ~]# tail -f /var/log/nginx/access.log

發(fā)現(xiàn)攻擊者一直在用POST請(qǐng)求 /fhtowers/user/getVerificationCode這個(gè)接口

在這里插入圖片描述

(2)用awk和grep腳本過(guò)濾nginx日志,提取攻擊短信接口的ip(一般這個(gè)接口是用來(lái)發(fā)注冊(cè)驗(yàn)證碼的,一分鐘如果大于10次請(qǐng)求的話就不是正常的訪問(wèn)請(qǐng)求了,大家根據(jù)自己的實(shí)際情況更改腳本)并放到一個(gè)txt文件中去,然后重啟nginx

[root@binghe ~]# cat denyip.sh
#!/bin/bash
nginx_home=/usr/local/openresty/nginx
log_path=/var/log/nginx/access.log
tail -n5000 $log_path | grep  getVerification | awk '{print $1}' |sort | uniq -c | sort -nr -k1 | head -n 100 |awk '{if($1>10)print ""$2""}' >$nginx_home/denyip/blocksip.txt
/usr/bin/nginx -s reload

(3)設(shè)置Nginx去讀取用腳本過(guò)濾出來(lái)的blocksip.txt(注意一下,我這里的Nginx是用的openresty,自帶識(shí)別lua語(yǔ)法的,下面會(huì)有講openresty的用法)

location =  /fhtowers/user/getVerificationCode {  #短信接口
access_by_lua '
   local f = io.open("/usr/local/openresty/nginx/denyip/blocksip.txt")   #黑名單列表
   for line in f:lines() do
		  if ngx.var.http_x_forwarded_for == line then   #如果ip在黑名單列表里直接返回403
				 ngx.exit(ngx.HTTP_FORBIDDEN)
		  end
  end
 ';
 proxy_pass http://appservers;   #不在名單里就轉(zhuǎn)發(fā)給后臺(tái)的tomcat服務(wù)器
}

(4)把過(guò)濾腳本放進(jìn)crontab任務(wù)里,一分鐘執(zhí)行一次

[root@binghe ~]# crontab -e
*/1 * * * * sh /root/denyip.sh

(5)查看一下效果,發(fā)現(xiàn)攻擊者的請(qǐng)求都被返回403并拒絕了

在這里插入圖片描述

二、OpenResty+Lua方案

臨時(shí)方案有效果后,再將其調(diào)整成使用OpenResty+Lua腳本的方案,來(lái)一張草圖。

在這里插入圖片描述

接下來(lái),就是基于OpenResty和Redis實(shí)現(xiàn)自動(dòng)封禁訪問(wèn)頻率過(guò)高的IP。

2.1 安裝OpenResty

安裝使用 OpenResty,這是一個(gè)集成了各種 Lua 模塊的 Nginx 服務(wù)器,是一個(gè)以Nginx為核心同時(shí)包含很多第三方模塊的Web應(yīng)用服務(wù)器,使用Nginx的同時(shí)又能使用lua等模塊實(shí)現(xiàn)復(fù)雜的控制。

(1)安裝編譯工具、依賴庫(kù)

[root@test1 ~]# yum -y install readline-devel pcre-devel openssl-devel gcc

(2)下載openresty-1.13.6.1.tar.gz 源碼包,并解壓;下載ngx_cache_purge模塊,該模塊用于清理nginx緩存;下載nginx_upstream_check_module模塊,該模塊用于ustream健康檢查。

[root@test1 ~]# cd /usr/local/
[root@test1 local]# wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
[root@test1 local]# tar -zxvf openresty-1.13.6.1.tar.gz
[root@test1 local]# cd openresty-1.13.6.1/bundle
[root@test1 local]# wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
[root@test1 local]# tar -zxvf ngx_cache_purge-2.3.tar.gz
[root@test1 local]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
[root@test1 local]# tar -zxvf v0.3.0.tar.gz

(3)配置需安裝的模塊

# ./configure --help可查詢需要安裝的模塊并編譯安裝
[root@test1 openresty-1.13.6.1]# ./configure --prefix=/usr/local/openresty --with-luajit --with-http_ssl_module --user=root --group=root --with-http_realip_module --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ --with-http_stub_status_module 
[root@test1 openresty-1.13.6.1]# make && make install

(4)創(chuàng)建一個(gè)軟鏈接方便啟動(dòng)停止

[root@test1 ~]# ln -s /usr/local/openresty/nginx/sbin/nginx   /bin/nginx

(5)啟動(dòng)nginx

[root@test1 ~]# nginx  #啟動(dòng)
[root@test1 ~]# nginx  -s reload   #reload配置

如果啟動(dòng)時(shí)候報(bào)錯(cuò)找不到PID的話就用以下命令解決(如果沒(méi)有更改過(guò)目錄的話,讓它去讀nginx的配置文件就好了)

[root@test1 ~]# /usr/local/openresty/nginx/sbin/nginx  -c /usr/local/openresty/nginx/conf/nginx.conf 

在這里插入圖片描述

隨后,打開(kāi)瀏覽器訪問(wèn)頁(yè)面。

在這里插入圖片描述

(6)在Nginx上測(cè)試一下能否使用Lua腳本

[root@test1 ~]# vim /usr/local/openresty/nginx/conf/nginx.conf

在server里面加一個(gè)

location /lua {
	default_type text/plain;
	content_by_lua ‘ngx.say(“hello,lua!”)';
}

在這里插入圖片描述

加完后重新reload配置。

[root@test1 ~]# nginx  -s reload

在瀏覽器里輸入 ip地址/lua,出現(xiàn)下面的字就表示Nginx能夠成功使用lua了

在這里插入圖片描述

2.2 安裝Redis

(1)下載、解壓、編譯安裝

[root@test1 ~]# cd /usr/local/
[root@test1 local]# wget http://download.redis.io/releases/redis-6.0.1.tar.gz
[root@test1 local]# tar -zxvf redis-6.0.1.tar.gz
[root@test1 local]# cd redis-6.0.1
[root@test1 redis-6.0.1]# make
[root@test1 redis-6.0.1]# make install

(2)查看是否安裝成功

[root@test1 redis-6.0.1]# ls -lh /usr/local/bin/
[root@test1 redis-6.0.1]# redis-server -v
Redis server v=3.2.5 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=dae2abf3793b309d

(3)配置redis 創(chuàng)建dump file、進(jìn)程pid、log目錄

[root@test1 redis-6.0.1]# cd /etc/
[root@test1 etc]# mkdir redis
[root@test1 etc]# cd /var/
[root@test1 var]# mkdir redis
[root@test1 var]# cd redis/
[root@test1 redis]# mkdir  data log  run

(4)修改配置文件

[root@test1 redis]# cd /usr/local/redis-6.0.1/
[root@test1 redis-6.0.1]# cp redis.conf /etc/redis/6379.conf
[root@test1 redis-6.0.1]# vim /etc/redis/6379.conf
#綁定的主機(jī)地址
bind 192.168.1.222
#端口
port 6379
#認(rèn)證密碼(方便測(cè)試不設(shè)密碼,注釋掉)
#requirepass 
#pid目錄
pidfile /var/redis/run/redis_6379.pid
#log存儲(chǔ)目錄
logfile /var/redis/log/redis.log
#dump目錄
dir /var/redis/data
#Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行,可以通過(guò)該配置項(xiàng)修改,使用yes啟用守護(hù)進(jìn)程
daemonize yes

(5)設(shè)置啟動(dòng)方式

[root@test1 redis-6.0.1]# cd /usr/local/redis-6.0.1/utils/
[root@test1 utils]# cp redis_init_script /etc/init.d/redis
[root@test1 utils]# vim /etc/init.d/redis   #根據(jù)自己實(shí)際情況修改

/etc/init.d/redis文件的內(nèi)容如下。

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

增加執(zhí)行權(quán)限,并啟動(dòng)Redis。

[root@test1 utils]# chmod a+x /etc/init.d/redis   #增加執(zhí)行權(quán)限
[root@test1 utils]# service redis start     #啟動(dòng)redis

(6)查看redis是否啟動(dòng)

在這里插入圖片描述

2.3 Lua訪問(wèn)Redis

(1)連接redis,然后添加一些測(cè)試參數(shù)

[root@test1 utils]# redis-cli -h 192.168.1.222 -p 6379
192.168.1.222:6379> set "123" "456"
OK

(2)編寫連接Redis的Lua腳本

[root@test1 utils]# vim /usr/local/openresty/nginx/conf/lua/redis.lua
local redis = require "resty.redis"
local conn = redis.new()
conn.connect(conn, '192.168.1.222', '6379')     #根據(jù)自己情況寫ip和端口號(hào) 
local res = conn:get("123")
if res==ngx.null then
    ngx.say("redis集群中不存在KEY——'123'")
    return
end
ngx.say(res)

(3)在nginx.conf配置文件中的server下添加以下location

[root@test1 utils]# vim /usr/local/openresty/nginx/conf/nginx.conf
location /lua_redis {
	default_type text/plain;
	content_by_lua_file /usr/local/openresty/nginx/conf/lua/redis.lua;
}

隨后重新reload配置。

[root@test1 utils]# nginx  -s reload   #重啟一下Nginx

(4)驗(yàn)證Lua訪問(wèn)Redis的正確性

在瀏覽器輸入ip/lua_redis, 如果能看到下圖的內(nèi)容表示Lua可以訪問(wèn)Redis。

在這里插入圖片描述

準(zhǔn)備工作已經(jīng)完成,現(xiàn)在要實(shí)現(xiàn)OpenResty+Lua+Redis自動(dòng)封禁并解封IP了。3.4

2.4 OpenResty+Lua實(shí)現(xiàn)

(1)添加訪問(wèn)控制的Lua腳本(只需要修改Lua腳本中連接Redis的IP和端口即可)

ok, err = conn:connect(“192.168.1.222”, 6379)

注意:如果在Nginx或者OpenResty的上層有用到阿里云的SLB負(fù)載均衡的話,需要修改一下腳本里的所有…ngx.var.remote_addr,把remote_addr替換成從SLB獲取真實(shí)IP的字段即可,不然獲取到的IP全都是阿里云SLB發(fā)過(guò)來(lái)的并且是處理過(guò)的IP,同時(shí),這些IP全都是一個(gè)網(wǎng)段的,根本沒(méi)有辦法起到封禁的效果)。

完整的Lua腳本如下所示。

[root@test1 lua]# vim /usr/local/openresty/nginx/conf/lua/access.lua
local ip_block_time=300 --封禁IP時(shí)間(秒)
local ip_time_out=30    --指定ip訪問(wèn)頻率時(shí)間段(秒)
local ip_max_count=20 --指定ip訪問(wèn)頻率計(jì)數(shù)最大值(秒)
local BUSINESS = ngx.var.business --nginx的location中定義的業(yè)務(wù)標(biāo)識(shí)符,也可以不加,不過(guò)加了后方便區(qū)分

--連接redis
local redis = require "resty.redis"  
local conn = redis:new()  
ok, err = conn:connect("192.168.1.222", 6379)  
conn:set_timeout(2000) --超時(shí)時(shí)間2秒

--如果連接失敗,跳轉(zhuǎn)到腳本結(jié)尾
if not ok then
    goto FLAG
end

--查詢ip是否被禁止訪問(wèn),如果存在則返回403錯(cuò)誤代碼
is_block, err = conn:get(BUSINESS.."-BLOCK-"..ngx.var.remote_addr)  
if is_block == '1' then
    ngx.exit(403)
    goto FLAG
end

--查詢r(jià)edis中保存的ip的計(jì)數(shù)器
ip_count, err = conn:get(BUSINESS.."-COUNT-"..ngx.var.remote_addr)

if ip_count == ngx.null then --如果不存在,則將該IP存入redis,并將計(jì)數(shù)器設(shè)置為1、該KEY的超時(shí)時(shí)間為ip_time_out
    res, err = conn:set(BUSINESS.."-COUNT-"..ngx.var.remote_addr, 1)
	res, err = conn:expire(BUSINESS.."-COUNT-"..ngx.var.remote_addr, ip_time_out)
else
    ip_count = ip_count + 1 --存在則將單位時(shí)間內(nèi)的訪問(wèn)次數(shù)加1
  
    if ip_count >= ip_max_count then --如果超過(guò)單位時(shí)間限制的訪問(wèn)次數(shù),則添加限制訪問(wèn)標(biāo)識(shí),限制時(shí)間為ip_block_time
        res, err = conn:set(BUSINESS.."-BLOCK-"..ngx.var.remote_addr, 1)
        res, err = conn:expire(BUSINESS.."-BLOCK-"..ngx.var.remote_addr, ip_block_time)
	else
        res, err = conn:set(BUSINESS.."-COUNT-"..ngx.var.remote_addr,ip_count)
		res, err = conn:expire(BUSINESS.."-COUNT-"..ngx.var.remote_addr, ip_time_out)
    end
end

-- 結(jié)束標(biāo)記
::FLAG::
local ok, err = conn:close()

(2)在需要做訪問(wèn)限制的location里加兩段代碼即可,這里用剛才的/lua做演示

[root@test1 lua]# vim /usr/local/openresty/nginx/conf/nginx.conf

在這里插入圖片描述

主要是添加如下配置。

access_by_lua_file /usr/local/openresty/nginx/conf/lua/access.lua;

其中,set $business “lua” 是為了把IP放進(jìn)Redis的時(shí)候標(biāo)明是哪個(gè)location的,可以不加這個(gè)配置。

隨后,重新reload配置。

[root@test1 lua]# nginx -s reload #修改完后重啟nginx

(3)打開(kāi)瀏覽器訪問(wèn)192.168.1.222/lua 并一直按F5刷新。

在這里插入圖片描述

隨后,連接Redis,查看IP的訪問(wèn)計(jì)數(shù)。

[root@test1 ~]# redis-cli -h 192.168.1.222 -p 6379

發(fā)現(xiàn)redis已經(jīng)在統(tǒng)計(jì)訪問(wèn)lua這個(gè)網(wǎng)頁(yè)ip的訪問(wèn)次數(shù)了

在這里插入圖片描述

這個(gè)key的過(guò)期時(shí)間是30秒,如果30秒沒(méi)有重復(fù)訪問(wèn)20次這個(gè)key就會(huì)消失,所以說(shuō)正常用戶一般不會(huì)觸發(fā)這個(gè)封禁的腳本。

在這里插入圖片描述

當(dāng)30秒內(nèi)訪問(wèn)超過(guò)了20次,發(fā)現(xiàn)觸發(fā)腳本了,變成了403

在這里插入圖片描述

再次查看Redis的key,發(fā)現(xiàn)多了一個(gè)lua-block-192.168.1.158,過(guò)期時(shí)間是300秒,就是說(shuō)在300秒內(nèi)這個(gè)ip無(wú)法繼續(xù)訪問(wèn)192.168.1.222/lua這個(gè)頁(yè)面了。

在這里插入圖片描述

過(guò)五分鐘后再去訪問(wèn)這個(gè)頁(yè)面,又可以訪問(wèn)了。

在這里插入圖片描述

這個(gè)腳本的目的很簡(jiǎn)單:一個(gè)IP如果在30秒內(nèi)其訪問(wèn)次數(shù)達(dá)到20次則表明該IP訪問(wèn)頻率太快了,因此將該IP封禁5分鐘。同時(shí)由于計(jì)數(shù)的KEY在Redis中的超時(shí)時(shí)間設(shè)置成了30秒,所以如果兩次訪問(wèn)間隔時(shí)間大于30秒將會(huì)重新開(kāi)始計(jì)數(shù)。

大家也可以將這個(gè)腳本優(yōu)化成,第一次封禁5分鐘,第二次封禁半小時(shí),第三次封禁半天,第四次封禁三天,第五次永久封禁等等。

到此這篇關(guān)于Nginx+Lua腳本+Redis 實(shí)現(xiàn)自動(dòng)封禁訪問(wèn)頻率過(guò)高IP的文章就介紹到這了,更多相關(guān)Nginx+Lua+Redis 自動(dòng)封禁IP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nginx的限流配置的幾種方法實(shí)現(xiàn)

    nginx的限流配置的幾種方法實(shí)現(xiàn)

    Nginx限流功能主要通過(guò)漏桶算法實(shí)現(xiàn),包含兩個(gè)核心模塊:limit_req_module限制請(qǐng)求速率,limit_conn_module限制并發(fā)連接數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • Nginx 域名轉(zhuǎn)發(fā)的實(shí)現(xiàn)

    Nginx 域名轉(zhuǎn)發(fā)的實(shí)現(xiàn)

    這篇文章主要介紹了Nginx 域名轉(zhuǎn)發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • nginx 關(guān)閉默認(rèn)站點(diǎn)的方法

    nginx 關(guān)閉默認(rèn)站點(diǎn)的方法

    國(guó)內(nèi)機(jī)房一般都要求網(wǎng)站主關(guān)閉空主機(jī)頭,防止未備案的域名指向過(guò)來(lái)造成麻煩
    2012-09-09
  • Nginx添加ipv6模塊以及遇到問(wèn)題解決方案詳解(親測(cè)有效)

    Nginx添加ipv6模塊以及遇到問(wèn)題解決方案詳解(親測(cè)有效)

    IPV4日益稀缺,ipv6已經(jīng)慢慢走上日程,待ipv6在國(guó)內(nèi)普及,使用nginx配置ipv6那是肯定的,下面這篇文章主要給大家介紹了關(guān)于Nginx添加ipv6模塊以及遇到問(wèn)題的解決方案,需要的朋友可以參考下
    2022-09-09
  • nginx與apache限制ip并發(fā)訪問(wèn) 限制ip連接的設(shè)置方法

    nginx與apache限制ip并發(fā)訪問(wèn) 限制ip連接的設(shè)置方法

    nginx限制ip并發(fā)數(shù),也是說(shuō)限制同一個(gè)ip同時(shí)連接服務(wù)器的數(shù)量,要使apache服務(wù)器做對(duì)同一IP地址的連接限制,需要mod_limitipconn來(lái)實(shí)現(xiàn)。一般需要手動(dòng)編譯。不過(guò)模塊作者也提供了一些編譯好的模塊,根據(jù)自己的apache版本可以直接使用
    2012-11-11
  • 對(duì)nginx-naxsi白名單規(guī)則詳解

    對(duì)nginx-naxsi白名單規(guī)則詳解

    今天小編就為大家分享一篇對(duì)nginx-naxsi白名單規(guī)則詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • k8s部署nginx訪問(wèn)Tomcat的實(shí)現(xiàn)示例

    k8s部署nginx訪問(wèn)Tomcat的實(shí)現(xiàn)示例

    本文介紹了如何使用Kubernetes部署Nginx,并通過(guò)Nginx訪問(wèn)Tomcat,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Nginx下修改WordPress固定鏈接導(dǎo)致無(wú)法訪問(wèn)的問(wèn)題解決

    Nginx下修改WordPress固定鏈接導(dǎo)致無(wú)法訪問(wèn)的問(wèn)題解決

    這篇文章主要介紹了Nginx下修改WordPress固定鏈接導(dǎo)致無(wú)法訪問(wèn)的問(wèn)題解決,同時(shí)作者也給出了官方關(guān)于修改固定鏈接的方法,需要的朋友可以參考下
    2015-07-07
  • Nginx?proxy、rewrite、alias配置過(guò)程

    Nginx?proxy、rewrite、alias配置過(guò)程

    這篇文章主要介紹了Nginx?proxy、rewrite、alias配置過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Nginx實(shí)現(xiàn)三種常見(jiàn)的虛擬主機(jī)配置方法

    Nginx實(shí)現(xiàn)三種常見(jiàn)的虛擬主機(jī)配置方法

    Nginx 是一款高性能的 Web 服務(wù)器,支持多種虛擬主機(jī)配置方式,能夠根據(jù)域名、IP 或端口區(qū)分不同的站點(diǎn),這種靈活性讓 Nginx 成為搭建多站點(diǎn)服務(wù)的首選工具,本文將帶你一步步實(shí)現(xiàn)三種常見(jiàn)的虛擬主機(jī)配置方法,需要的朋友可以參考下
    2025-03-03

最新評(píng)論

永寿县| 同德县| 胶州市| 青岛市| 澄迈县| 海淀区| 怀仁县| 保山市| 陆河县| 麟游县| 黔西| 临泉县| 鄄城县| 九江市| 湟源县| 银川市| 宜宾市| 大庆市| 长武县| 石台县| 望江县| 呼和浩特市| 老河口市| 宿州市| 普定县| 陈巴尔虎旗| 吉木乃县| 外汇| 托里县| 乌拉特前旗| 辉县市| 渭源县| 鹤壁市| 台南县| 辛集市| 图们市| 隆昌县| 阿坝| 宁陵县| 霍山县| 吉首市|