使用ipset工具vim
1,下面我先說下iptables的基本配置規則,而後再說ipset
如下使用C7 x86_64爲實驗環境
CentOS7默認的防火牆不是iptables,而是firewalle.
若是你沒有安裝iptables的話,你可使用如下命令進行安裝
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
上面的意思是先屏蔽掉原有的firewall防火牆,下面咱們就開始安裝iptables,至於爲何要安裝IPtables我就不講了
yum install iptables iptables-services -y服務器
設置規則
#查看iptables現有規則
iptables -L -n
#先容許全部,否則有可能會杯具
iptables -P INPUT ACCEPT
#清空全部默認規則
iptables -F
#清空全部自定義規則
iptables -X
#全部計數器歸0
iptables -Z
#容許來自於lo接口的數據包(本地訪問)
iptables -A INPUT -i lo -j ACCEPT
#開放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#開放21端口(FTP)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#開放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#開放443端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#容許ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#容許接受本機請求以後的返回數據 RELATED,是爲FTP設置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#其餘入站一概丟棄
iptables -P INPUT DROP
#全部出站一概綠燈
iptables -P OUTPUT ACCEPT
#全部轉發一概丟棄
iptables -P FORWARD DROP網絡
其餘規則設定
#若是要添加內網ip信任(接受其全部TCP請求)
iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT
#過濾全部非以上規則的請求
iptables -P INPUT DROP
#要封停一個IP,使用下面這條命令:
iptables -I INPUT -s ... -j DROP
#要解封一個IP,使用下面這條命令:
iptables -D INPUT -s ... -j DROP數據結構
#保存上述規則
service iptables save
開啓iptables服務
#註冊iptables服務
#至關於之前的chkconfig iptables on
systemctl enable iptables.service
#開啓服務
systemctl start iptables.service
#查看狀態
systemctl status iptables.serviceapp
2,如今咱們介紹ipset
ipset是iptables的擴展,它容許你建立 匹配整個地址集合的規則。而不像普通的iptables鏈只能單IP匹配, ip集合存儲在帶索引的數據結構中,這種結構即時集合比較大也能夠進行高效的查找,除了一些經常使用的狀況,好比阻止一些危險主機訪問本機,從而減小系統資源佔用或網絡擁塞,IPsets也具有一些新防火牆設計方法,並簡化了配置.官網:http://ipset.netfilter.org/tcp
ipset的安裝
首先先安裝依賴
yum provides '*/applydeltarpm'
yum install deltarpm -y
yum install ipset -y
建立一個ipset
ipset create xxx hash:net (也能夠是hash:ip ,這指的是單個ip,xxx是ipset名稱)
ipset默承認以存儲65536個元素,使用maxelem指定數量
ipset create blacklist hash:net maxelem 1000000 #黑名單
ipset create whitelist hash:net maxelem 1000000 #白名單
查看已建立的ipset
ipset list
在建立的黑名單中添加一個ip
ipset add blacklist 192.168.4.175
刪除黑名單ip
ipset del blacklist 192.168.4.175
建立防火牆規則,與此同時,allset這個IP集裏的ip都沒法訪問80端口(如:CC×××可用)
iptables -I INPUT -m set --match-set blacklist src -p tcp -j DROP
iptables -I INPUT -m set --match-set whitelist src -p tcp -j DROP
iptables -I INPUT -m set --match-set setname src -p tcp --destination-port 80 -j DROP
service iptables save
將ipset規則保存到文件
ipset save blacklist -f blacklist.txt
ipset save whitelist -f whitelist.txt
刪除ipset
ipset destroy blacklist
ipset destroy whitelist
導入ipset規則
ipset restore -f blacklist.txt
ipset restore -f whitelist.txt
備註:ipset的一個優點是集合能夠動態的修改,即便ipset的iptables規則目前已經啓動,新加的入ipset的ip也生效ide
3,應用場景工具
例:某服務器被CC×××,通過抓包或者一序列手段發現有一批IP是源×××ip,所以咱們須要封掉這些IP,若是用iptables一條一條加就麻煩些了。
#對TIME_WAIT的外部ip以及此對ip出現的次數經行求重排序。
netstat -ptan | grep TIME_WAIT | awk '{print $5}' | awk -F: '{print $1}' |sort |uniq -c | sort -n -r
#tcpdump 抓取100個包,訪問本機80的ip進行求重排序 只顯示前20個,數量多的ip可能爲×××源IP,咱們須要封掉它
tcpdump -tnn dst port 80 -c 100 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -n -r |head -20
#新建一個setname.txt文件,以以下格式加入這些ip (有多少個ip就多少行)
vim setname.txt
add setname xxx.xxx.xxx.xxx
#導入setname.txt文件到ipset集
ipset restore -f setname.txt
#查看是否導入成功 (成功的話會發現一個新ipset名爲 sername,且Members裏就是那些×××IP)
ipset list
#創建一條iptables規則,攔截這些×××ip訪問服務器80,也能夠直接禁止這些ip的全部訪問
iptables -I INPUT -m set --match-set setname src -p tcp --destination-port 80 -j DROP.net