2017年12月10日星期日

Internet IPv4 全部公网IP网段 (All IPv4 Blocks of Internet)

#IPv4 公网IP网段(排除 Private IP range、多播、组织预留网段)
1.0.0.0/8
2.0.0.0/7
4.0.0.0/6
8.0.0.0/7
11.0.0.0/8
12.0.0.0/6
16.0.0.0/4
32.0.0.0/3
64.0.0.0/3
96.0.0.0/4
112.0.0.0/5
120.0.0.0/6
124.0.0.0/7
126.0.0.0/8
128.0.0.0/3
160.0.0.0/5
168.0.0.0/6
172.0.0.0/12
172.32.0.0/11
172.64.0.0/10
172.128.0.0/9
173.0.0.0/8
174.0.0.0/7
176.0.0.0/4
192.0.0.0/9
192.128.0.0/11
192.160.0.0/13
192.169.0.0/16
192.170.0.0/15
192.172.0.0/14
192.176.0.0/12
192.192.0.0/10
193.0.0.0/8
194.0.0.0/7
196.0.0.0/6
200.0.0.0/5
208.0.0.0/4

2017年9月22日星期五

你真的了解 /etc/shadow吗?


格式:

密码:这里可以看到3类,分别是加密后的字符串、*和!!

  • 星号代表帐号被锁定,
  • 双叹号表示这个密码已经过期了。
  • 加密后的字符串如果以$6$开头的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$“是用 SHA-256加密的。 


修改日期:这个是表明上一次修改密码的日期与1970-1-1相距的天数

密码不可改的天数:假如这个数字是8,则8天内不可改密码,如果是0,则随时可以改。 

密码需要修改的期限:如果是99999则永远不用改。如果是其其他数字比如12345,那么必须在距离1970-1-1的12345天内修改密码,否则密码失效。 

修改期限前N天发出警告:比如你在第五条规定今年6月20号规定密码必须被修改,系统会从距离6-20号的N天前向对应的用户发出警告。 

密码过期的宽限:假设这个数字被设定为M,那么帐号过期的M天内修改密码是可以修改的,改了之后账户可以继续使用。 

帐号失效日期:假设这个日期为X,与第三条一样,X表示的日期依然是1970-1-1相距的天数,过了X之后,帐号失效。 

保留:被保留项,暂时还没有被用上。 

利用 ipset 实现iptables禁封大量 IP

转自 https://fixatom.com/block-ip-with-ipset/

利用 ipset 封禁大量 IP


使用 iptables 封 IP,是一种比较简单的应对网络攻击的方式,也算是比较常见。有时候可能会封禁成千上万个 IP,如果添加成千上万条规则,在一台注重性能的服务器或者本身性能就很差的设备上,这就是个问题了。ipset 就是为了避免这个问题而生的。
关于 iptables,要知道这两点。
  • iptables 包含几个表,每个表由链组成。默认的是 filter 表,最常用的也是 filter 表,另一个比较常用的是 nat 表。一般封 IP 就是在 filter 表的 INPUT 链添加规则。
  • 在进行规则匹配时,是从规则列表中从头到尾一条一条进行匹配。
这像是在链表中搜索指定节点费力。ipset 提供了把这个 O(n) 的操作变成 O(1) 的方法:就是把要处理的 IP 放进一个集合,对这个集合设置一条 iptables 规则。像 iptable 一样,IP sets 是 Linux 内核中的东西,ipset 这个命令是对它进行操作的一个工具。

简单的流程

可以用这几条命令概括使用 ipset 和 iptables 进行 IP 封禁的流程
ipset create vader hash:ip
iptables -I INPUT -m set --match-set vader src -j DROP
ipset add vader 4.5.6.7
ipset add vader 1.2.3.4
ipset add vader ...
ipset list vader # 查看 vader 集合的内容
下面分别对各条命令进行描述。

创建一个集合

ipset create vader hash:ip
这条命令创建了名为 vader 的集合,以 hash 方式存储,存储内容是 IP 地址。

添加 iptables 规则

iptables -I INPUT -m set --match-set vader src -j DROP
如果源地址(src)属于 vader 这个集合,就进行 DROP 操作。这条命令中,vader 是作为黑名单的,如果要把某个集合作为白名单,添加一个 ‘!’ 符号就可以。
iptables -I INPUT -m set ! --match-set yoda src -j DROP
到现在虽然创建了集合,添加了过滤规则,但是现在集合还是空的,需要往集合里加内容。

找出“坏” IP

找出要封禁的 IP,这是封禁过程中重要的步骤,不过不是这里的重点。简要说明一下两种方法思路。
netstat -ntu | tail -n +3 | awk '{print $5}' | sort | uniq -c | sort -nr
直接通过 netstat 的信息,把与本地相关的各种状态的 IP 都计数,排序列出来。
或者从 nginx 或者其他 web server 的日志里找请求数太多的 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
后半部分,排序,去重,再按次数进行逆向排序的操作,跟上面命令是一样的。
找出“坏” IP,往之前创建的集合里添加就可以了。
ipset add vader 4.5.6.7
有多少“坏” IP,就添加多少 IP,因为针对这些封禁的 IP 只需要一条 iptables 规则,而这些 IP 是以 hash 方式存储,所以封禁大量的 IP 也不会影响性能,这也是 ipset 存在的最大目的。
You shall not pass!

ipset 更多的用法

存储类型

前面例子中的 vader 这个集合是以 hash 方式存储 IP 地址,也就是以 IP 地址为 hash 的键。除了 IP 地址,还可以是网络段,端口号(支持指定 TCP/UDP 协议),mac 地址,网络接口名称,或者上述各种类型的组合。
比如指定 hash:ip,port就是 IP 地址和端口号共同作为 hash 的键。查看 ipset 的帮助文档可以看到它支持的所有类型。
下面以两个例子说明。

hash:net

ipset create r2d2 hash:net
ipset add r2d2 1.2.3.0/24
ipset add r2d2 1.2.3.0/30 nomatch
ipset add r2d2 6.7.8.9
ipset test r2d2 1.2.3.2
hash:net 指定了可以往 r2d2 这个集合里添加 IP 段或 IP 地址。
第三条命令里的 nomatch 的作用简单来说是把 1.2.3.0/30 从 1.2.3.0/24 这一范围相对更大的段里“剥离”了出来,也就是说执行完 ipset add r2d2 1.2.3.0/24 只后1.2.3.0/24 这一段 IP 是属于 r2d2 集合的,执行了 ipset add r2d2 1.2.3.0/30 nomatch 之后,1.2.3.0/24 里 1.2.3.0/30 这部分,就不属于 r2d2 集合了。执行 ipset test r2d2 1.2.3.2 就会得到结果 1.2.3.2 is NOT in set r2d2.

hash:ip,port

ipset create c-3po hash:ip,port
ipset add c-3po 3.4.5.6,80
ipset add c-3po 5.6.7.8,udp:53
ipset add c-3po 1.2.3.4,80-86
第二条命令添加的是 IP 地址为 3.4.5.6,端口号是 80 的项。没有注明协议,默认就是 TCP,下面一条命令则是指明了是 UDP 的 53 端口。最后一条命令指明了一个 IP 地址和一个端口号范围,这也是合法的命令。

自动过期,解封

ipset 支持 timeout 参数,这就意味着,如果一个集合是作为黑名单使用,通过 timeout 参数,就可以到期自动从黑名单里删除内容。
ipset create obiwan hash:ip timeout 300
ipset add obiwan 1.2.3.4
ipset add obiwan 6.6.6.6 timeout 60
上面第一条命令创建了名为 obiwan 的集合,后面多加了 timeout 参数,值为 300,往集合里添加条目的默认 timeout 时间就是 300。第三条命令在向集合添加 IP 时指定了一个不同于默认值的 timeout 值 60,那么这一条就会在 60 秒后自动删除。
隔几秒执行一次 ipset list obiwan 可以看到这个集合里条目的 timeout 一直在随着时间变化,标志着它们在多少秒之后会被删除。
如果要重新为某个条目指定 timeout 参数,要使用 -exit 这一选项。
ipset -exist add obiwan 1.2.3.4 timeout 100
这样 1.2.3.4 这一条数据的 timeout 值就变成了 100,如果这里设置 300,那么它的 timeout,也就是存活时间又重新变成 300。
如果在创建集合是没有指定 timeout,那么之后添加条目也就不支持 timeout 参数,执行 add 会收到报错。想要默认条目不会过期(自动删除),又需要添加某些条目时加上 timeout 参数,可以在创建集合时指定 timeout 为 0。
ipset create luke hash:ip
ipset add luke 5.5.5.5 timeout 100
# 得到报错信息 kernel error received: Unknown error -1

更大!

hashsize, maxelem 这两个参数分别指定了创建集合时初始的 hash 大小,和最大存储的条目数量。
ipset create yoda hash:ip,port hashsize 4096 maxelem 1000000
ipset add yoda 3.4.5.6,3306
这样创建了名为 yoda 的集合,初始 hash 大小是 4096,如果满了,这个 hash 会自动扩容为之前的两倍。最大能存储的数量是 100000 个。
如果没有指定,hashsize 的默认值是 1024,maxelem 的默认值是 65536。

另外几条常用命令

ipset del yoda x.x.x.x    # 从 yoda 集合中删除内容
ipset list yoda           # 查看 yoda 集合内容
ipset list                # 查看所有集合的内容
ipset flush yoda          # 清空 yoda 集合
ipset flush               # 清空所有集合
ipset destroy yoda        # 销毁 yoda 集合
ipset destroy             # 销毁所有集合
ipset save yoda           # 输出 yoda 集合内容到标准输出
ipset save                # 输出所有集合内容到标准输出
ipset restore             # 根据输入内容恢复集合内容

还有……

  • 如果创建集合是指定的存储内容包含 ip, 例如 hash:ip 或 hash:ip,port ,在添加条目时,可以填 IP 段,但是仍然是以单独一个个 IP 的方式来存。
  • 上面所有的例子都是用 hash 的方式进行存储,实际上 ipset 还可以以 bitmap 或者 link 方式存储,用这两种方式创建的集合大小,是固定的。
  • 通过 man upset 和 ipset —help 可以查到更多的内容,包括各种选项,支持的类型等等。

2017年9月18日星期一

IP地址反向解析的意义和做法

反向域名解析的意义是这个ip地址的网络身份是被认可的。


在垃圾邮件泛滥,实施反向解析能够抵御部分垃圾邮件,如hotmail/yahoo/live.com要求必须实施ip反解的邮件服务器才能向aol/aim邮箱发送邮件。

1)反向解析和域名注册服务商无任何关系

2)向提供您宽带接入服务的isp申请,如果isp无授权做反解,则只有向isp的上层运营商电信、网通申请

3)通常情况isp会收取dns反向解析服务费后,再向上层运营商下工单申请ip反解

4)申请周期长的可能需要1个月,甚至更长的时间

3. dns反向解析费用

DNS反向解析通常需要支付年费,原因是电信运营商投入了DNS服务器运营来负责IP地址的反解,几乎所有电信运营商都将DNS反向解析列入收费项目,如果您透过ISP申请,ISP需要付费给电信运营商,产生的费用可能较高。

4.即使做了ptr的,但是也不能解决所有邮件外发问题,例如国际带宽不稳定,IP被列入黑名单等,由于现在很多邮件服务器采用发送和接受分开的前端和后端的部署,发送都是通过邮件网关来中继发送,smartermail邮件提供境内外多服务器多链路自动路由转发。而对方只检查发送服务器的PTR记录,所以只需给发送服务器(邮件网关)的IP地址做反向解析即可,而且反向解析的值也是无所谓的,只要有就行。

可以通过nslookup –qt=ptr yourIP 工具测试,也找一些具有验证域名是否做反向解析的邮件系统检测工具

2017年8月8日星期二

VIM 非可见字符(Listchars)

默认情况下,Vim是不会显示space,tabs,newlines,trailing space,wrapped lines等不可见字符的。我们可以使用以下命令打开list选项,来显示非可见字符:
:set list
如下图所示,制表符被显示为“^I”,而行尾则标识为“$”。
set_list_default
我们也可以使用以下命令,重新隐藏不可见字符:
:set nolist
通常我们会利用以下命令,切换显示或隐藏不可见字符:
:set list!
显示符号
使用:set listchars命令,可以配置使用何种符号来显示不可见字符。例如以下命令,将制表符(tab)显示为…;将尾部空格(trail)显示为·;将左则超出屏幕范围部分(precedes)标识为«;将右侧超出屏幕范围部分(extends)标识为»。
set listchars
其中,特殊符号是在插入状态下,点击快捷键Ctrl-k,然后键入编码来输入的。比如,中点是由.M输入;左书名号是由<<输入,右书名号是由>>输入。
可以使用以下命令,查看可以输入的特殊字符:
:digraphs
digraph
如下图所示,通过选择合适的符号和色彩,非可见符号被低调地显示出来––即没有影响实际的文本内容,又能展示容易被忽视的重要信息:
set listchars_result
显示颜色
非可见字符"eol"、"extends"、"precedes"是由NonText高亮组来控制显示颜色的,而"nbsp"、"tab"、"trail"则是由"SpecialKey"高亮组来定义的。
我们可以使用以下语法高亮 (Syntax Highlight)命令,来设置非可见字符的显示颜色和格式:
hi NonText SpecialKey
请使用以下命令,查看关于非可见字符的帮助信息:
:help listchars
命令小结
:set list显示非可见字符
:set nolist隐藏非可见字符
:set listchars设置非可见字符的显示模式

2017年8月2日星期三

print 指定行

# 打印文件指定行
方法1. sed -n 2p ./backup_dir_list  #只显示第2行
          sed -n 2,5p ./backup_dir_list   #显示2到5行

2017年8月1日星期二

find

#列出当前目录下所有子目录的权限
find . -type d  | xargs -n 1 ls -lnd

ssh 普通用户免密登录设定

对于普通用户authorized_keys的权限必须限定为600(go-rwx),否则普通用户无法实现无密钥访问,
而ROOT用户按照默认即可实现无密钥访问

#for non-root user
chmod go-rwx ~/.ssh/authorized_keys

2017年7月27日星期四

Linux shell 比较运算符

please refer to http://blog.csdn.net/ithomer/article/details/6836382

运算符描述示例
文件比较运算符
-e filename如果 filename 存在,则为真[ -e /var/log/syslog ]
-d filename如果 filename 为目录,则为真[ -d /tmp/mydir ]
-f filename如果 filename 为常规文件,则为真[ -f /usr/bin/grep ]
-L filename如果 filename 为符号链接,则为真[ -L /usr/bin/grep ]
-r filename如果 filename 可读,则为真[ -r /var/log/syslog ]
-w filename如果 filename 可写,则为真[ -w /var/mytmp.txt ]
-x filename如果 filename 可执行,则为真[ -L /usr/bin/grep ]
filename1 -nt filename2如果 filename1 比 filename2 新,则为真[ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2如果 filename1 比 filename2 旧,则为真[ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string如果 string 长度为零,则为真[ -z "$myvar" ]
-n string如果 string 长度非零,则为真[ -n "$myvar" ]
string1 = string2如果 string1 与 string2 相同,则为真[ "$myvar" = "one two three" ]
string1 != string2如果 string1 与 string2 不同,则为真[ "$myvar" != "one two three" ]
算术比较运算符
num1 -eq num2等于[ 3 -eq $mynum ]
num1 -ne num2不等于[ 3 -ne $mynum ]
num1 -lt num2小于[ 3 -lt $mynum ]
num1 -le num2小于或等于[ 3 -le $mynum ]
num1 -gt num2大于[ 3 -gt $mynum ]
num1 -ge num2大于或等于[ 3 -ge $mynum ]

算术运算符 
+ - * / % 表示加减乘除和取余运算
+= -= *= /= 同 C 语言中的含义

位操作符
> >>= 表示位左右移一位操作
& &= | |= 表示按位与、位或操作
~ ! 表示非操作
^ ^= 表示异或操作 

关系运算符 
= == != 表示大于、小于、大于等于、小于等于、等于、不等于操作
&& || 逻辑与、逻辑或操作

echo换行输出 echo -e "Hello world.\nHello girl!"

echo -e "Hello world.\nHello girl!"

record command history with time-stamp

#在/etc/profile中增加环境变量HISTTIMEFORMAT="%F %T "
sed -i '/export/iHISTTIMEFORMAT="%F %T "\n' /etc/profile

#export 环境变量
sed -i '/export/s/$/ HISTTIMEFORMAT/' /etc/profile


#当前shell下即刻生效
export HISTTIMEFORMAT="%F %T "

2017年7月24日星期一

Linux 设置、删除环境变量

更多请参考:http://elf8848.iteye.com/blog/1859811

××  /etc/rc.local  重点,你想让Nginx,MySQL,Tomcat自启动,请修改这个文件。

××  /etc/rc.shutdown 重点,在操作系统关机时执行,可关闭Nginx,MySQL,Tomcat

设置环境变量

如果使用的是bash,则键入如下命令:

JAVA_HOME=/ path/ to/ jdk

export JAVA_HOME

其中/path/to/jdk是安装Java的路径。


如果使用的是tcsh,则键入如下命令:

setenv JAVA_HOME /path/to/jdk



删除环境变量

bash下

设置:export 变量名=变量值

删除:unset 变量名


csh下

设置:setenv 变量名 变量值

删除:unsetenv 变量名

2017年7月21日星期五

egrep 常用命令

egrep  -o     #only print out the matched string
egrep  -v    # reverse match the lines
egrep

` 反引号
. 点号
' 单引号
" 双引号


Example: filter all the valid IP addresses in a Linux OS

#ip addr | egrep "([0-9]{1,3}.){3}[0-9]{1,3}/" | egrep -v '127.0.0|secondary' |  awk '{print "ifconfig "$7" "$2" up"}' >  ./ip-up.sh

#ip addr | egrep  '“([0-9]{1,3}.){3}[0-9]{1,3}/” | secondary'  |  awk '{print "ifconfig "$8" "$2" up"}' >>  ./ip-up.sh

#sed 's/up/down/g' ./ip-up.sh > ip-down.sh



使用egrep一次查找多个串: copy
  1. egrep "desktop|mysql|ntp" /etc/passwd"  

grep不显示本身进程
命令:
   ps aux | grep [s]sh

ps aux | grep \[s]sh
因为grep进程的条目显示处理命令优先于正则表达式([s]ome_string)。当grep命令运行时,grep进程自身的条目不匹配,就没有包括在输出中了。

ps aux | grep ssh | grep -v "grep"
输出:
[root@localhost test]# ps aux|grep ssh
root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd
root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0 
root  16901  0.0  0.0  61180   764 pts/0  S+   20:31   0:00 grep ssh
[root@localhost test]# ps aux|grep \[s]sh]
[root@localhost test]# ps aux|grep \[s]sh
root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd
root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0 
[root@localhost test]# ps aux | grep ssh | grep -v "grep"
root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0

Amazing Windows OS resources Share!!!

Almost all Windows OS List: https://www.heidoc.net/php/myvsdump_details.php?id=P1521F62172Ax64Lcn Latest keys:   https://bbs.kafan.cn/th...