看到文章中用recent模块控制对主机的访问。html
配置方法以下:linux
iptables -A INPUT -p icmp --icmp-
type
8 -m length --length 78 -j LOG --log-prefix
"SSHOPEN: "
iptables -A INPUT -p icmp --icmp-
type
8 -m length --length 78 -m recent --
set
--name sshopen --rsource -j ACCEPT
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
ping
-s 50 host
ping
-l 50 host
在配置的过程当中我按照这样配置没法ssh到指定主机。
仔细研究了下,须要一个前提即:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
且该条规则须要放在上面第三条以前。
整理后的配置规则:
- iptables -F
- iptables -X
- iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG --log-prefix 'SSH_OPEN_KEY'
- iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --name openssh --set --rsource -j ACCEPT
- iptables -A INPUT -p tcp --dport 22 --syn -m state --name openssh --rcheck --seconds 60 --rsource -j ACCEPT
- iptables -P INPUT DROP
- 在客户侧,若是须要ssh到主机,须要先ping -l 50 ip(windows), ping -s 50 ip (linux),并在一分钟以内ssh到主机,这样在/proc/net/xt_recent/目录下生成openssh文件
文件内容以下:
src=112.1x3.2x7.24 ttl: 53 last_seen: 42963x6778 oldest_pkt: 1 4296376778, 4295806644, 4295806895, 4295807146, 4295826619, 4295826870, 4295827122, 4295827372, 4295833120, 4295833369, 4295834525, 4295834777, 4295872016, 4295872267, 4295872519, 4295872769, 4295889154, 4295889406, 4295889658, 4295889910
解释:windows
1,2清空原有的iptables规则bash
3,代表已经创建成功的链接和与主机发送出去的包相关的数据包都接受,若是没有这一步,后面的tcp链接没法创建起来ssh
4,出现长度为78字节icmp回响包在/var/log/syslog生成log,log以SSH_OPEN_KEY开头tcp
5,出现长度为78字节icmp回响包,将源地址信息记录在openssh文件中,并接受学习
6,对于openssh文件中的源地址60s之内发送的ssh链接SYN请求予以接受调试
7,将INPUT链的默认策略设置为drop
调试过程:没有设置3,则没法创建ssh链接
在没有3的状况下,设置6若是不加--syn,则能够ssh链接一下子,过一下子又自动断线,除非ping一下目的地址,原理是:ping目的地址,则会更新openssh的时间,这样ssh链接还在60s以内,因此能够通讯,过一下子,60s超时,则就会断开ssh链接。若是加了--syn,只能进行开始的syn,没法正常链接(具体过程不熟悉,有待进一步学习)。
给一个参考: