recent这个模块很有趣,善加利用可充分保证您服务器安全。
设定常用参数:
#https://www.haiyun.me
--name #设定列表名称,默认DEFAULT。
--rsource #源地址,此为默认。
--rdest #目的地址
--seconds #指定时间内
--hitcount #命中次数
--set #将地址添加进列表,并更新信息,包含地址加入的时间戳。
--rcheck #检查地址是否在列表,以第一个匹配开始计算时间。
--update #和rcheck类似,以最后一个匹配计算时间。
--remove #在列表里删除相应地址,后跟列表名称及地址。
示例:
1.限制80端口60秒内每个IP只能发起10个新连接,超过记录日记及丢失数据包,可防CC及非伪造IP的syn flood。
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix 'DDOS:' --log-ip-options
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT
备忘:每个IP目标端口为80的新连接会记录在案,可在/proc/net/xt_recent/目录内查看,rcheck检查此IP是否在案及请求次数,如果超过规则就丢弃数据包,否则进入下条规则并更新列表信息。
2.发送特定指定执行相应操作,按上例如果自己IP被阻止了,可设置解锁哦。
#https://www.haiyun.me
iptables -A INPUT -p tcp --dport 5000 --syn -j LOG --log-prefix "WEBOPEN: "
#记录日志,前缀WEBOPEN:
iptables -A INPUT -p tcp --dport 5000 --syn -m recent --remove --name webpool --rsource -j REJECT --reject-with tcp-reset
#符合规则即删除webpool列表内的本IP记录
3.芝麻开门,默认封闭SSH端口,为您的SSH服务器设置开门暗语。
iptables -A INPUT -p tcp --dport 50001 --syn -j LOG --log-prefix "SSHOPEN: "
#记录日志,前缀SSHOPEN:
iptables -A INPUT -p tcp --dport 50001 --syn -m recent --set --name sshopen --rsource -j REJECT --reject-with tcp-reset
#目标端口tcp50001的新数据设定列表为sshopen返回TCP重置,并记录源地址。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
#开启SSH端口,15秒内允许记录的源地址登录SSH。
nc host 50001 #开门钥匙
telnet host 50001
nmap -sS host 50001
指定端口容易被破解密钥,可以使用ping指定数据包大小为开门钥匙。
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG --log-prefix "SSHOPEN: "
#记录日志,前缀SSHOPEN:
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --set --name sshopen --rsource -j ACCEPT
#指定数据包78字节,包含IP头部20字节,ICMP头部8字节。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
ping -s 50 host #Linux下解锁
ping -l 50 host #Windows下解锁
请教一下,为什么我按照你的策略开启远程密令开启ssh为什么设置完成后还是可以通过ssh登陆
看INPUT默认策略及最后一条策略。
大哥能告诉我,我添加上最后一种方法,就是使用ping指定数据包大小开门钥匙,但是不行,我的iptables默认规则是drop,难道哪里有错吗?
有两个条件:
1.指定时间内连接 --seconds 15
2.ping的主机IP连接SSH --rsource
也可在服务器内监测数据包及iptables规则变化查找问题。
小弟不才,再问一下哦
就是加入,192.168.1.1 要连接 192.168.1.2 ,我就要用1.1 ping 1.2
是说要在 1.2 的iptables规则里的 --rsource 192.168.1.1 要跟上这个IP吗?
------------------------------
第二个问题:“也可在服务器内监测数据包及iptables规则变化查找问题”,因为我的这两个测试机都是刚刚装的,纯净的默认selinux和iptables都是关闭的,所以应该不会有iptables其他的变化
1.--rsource参数即指remote ip,相当于动态变量,例中为1.1。
2.ping指定数据包后防火墙会动态允许open ssh规则,源IP1.1才可连接。
PS:解锁后iptables会在--seconds 15(即15秒)时间内允许1.1 syn数据包连接1.2 ssh端口,注意在iptables规则内需添加允许ESTABLISHED数据包进入,这样才能正常建立连接。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
哎呀,怎么把这条给忘了!!!多谢大哥提醒!非常感谢非常感谢!!!
发现了一个新问题:
当指定包大小能ping通后,我用nmap去扫描目标机,是可以扫描到22端口的,但是就是ssh连接不上
正解,原因就在于ping后允许规则为--syn数据包进入,iptables识别ack之后的数据包状态为ESTABLISHED,所以按上回答添加ESTABLISHED规则即可。
非常感谢非常感谢!忘了这么重要一条了!原来脚本里默认规则的上一条就是
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
都不指定怎么感激你了
刚刚小试了一下,--rsource 192.168.1.1 语法报错了...
指定时间是没问题,刚刚我把时长改长了,仍然不行;不管是win的secureCRT下还是linux下直接ssh,都是不行的。。。
我真的觉得这个技术很好玩,求求老大帮忙再解答一下
把第二条改成
iptables -A INPUT -p tcp --dport 22 -m state --state new,established -m recent --rcheck --second 15 --name sshopen --rsource -j ACCEPT
其实 rsource默认就加的, --syn 跟 state 的new差不多,最好把established加上,要不然三次握手的ack防火墙会挡掉
就是得一直ping着,要不链接要断
这个内容不错
我原封不动的用文章提到的例子跑,结果完全没有防护效果。求指点,我的防火墙规则如下:
# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
LOG tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 recent: CHECK seconds: 60 hit_count: 10 name: webpool side: source LOG flags 4 level 4 prefix `DDOS:'
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 recent: CHECK seconds: 60 hit_count: 10 name: webpool side: source
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 recent: SET name: webpool side: source
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
@higkoo
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
这条规则会丢弃所有包。
前段时间SSH被人破解了,遗失了好多文件,决定照你的设置iptables,加ssh暗语。
nc host 50001 #开门钥匙 这个是什么意思?nc好像没有这个命令啊。
telnet host 50001 这个是telnet登录host的50001,用来测试是否开启50001么?
nmap -sS host 50001 这是扫描它的50001端口吗?
但是,请问怎么用啊?