什么是SYN扫描
- SYN扫描就是黑客通过建立不完全连接来判断通信端口状态的一种手法。
- SYN扫描也被称为半开放扫描,在SYN扫描中,恶意的客户端通过向服务器每个端口发送一个SYN数据包,伪装发起三次握手。如果服务器特定的端口返回了SYN/ACK 同步应答数据,就表示该端口处于开放状态。
- 当客户端发送RST数据包时,服务器以为存在了通信错误,以为客户端决定不建立链接。开放端口因而保持开放,容易收到攻击。如果服务器从特定端口返回一个RST数据包,这表示端口是关闭的。不能攻击。
- 客户端发送大量的SYN数据包,能够消耗服务器的资源,服务器会被恶意客户端所淹没。不能或只能和很少合法客户端建立通信。
如何拒绝恶意扫描
Linux 的 /etc/sysctl.conf 文件用于控制内核参数,我要做的就是修改内核参数,配置如下
[root@localhost ~]# vim /etc/sysctl.conf //编辑配置文件
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
[root@localhost ~]# sysctl -p //使修改生效
测试验证
- 未修改前NMAP扫描结果
Nmap scan report for 192.168.12.186
Host is up (0.0097s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
22/tcp open ssh //目前开放的服务
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed po
rt
Device type: general purpose
Running (JUST GUESSING): Linux 4.X|3.X (89%)
OS CPE: cpe:/o:linux:linux_kernel:4.4 cpe:/o:linux:linux_kernel:3 //系统内核
Aggressive OS guesses: Linux 4.4 (89%), Linux 4.9 (89%), Linux 3.10 - 3.12 (88%), Linux 3.13 or 4.2
(85%), Linux 3.10 - 4.11 (85%), Linux 3.11 - 4.1 (85%), Linux 3.16 (85%), Linux 3.18 (85%), Linux
3.2 - 4.9 (85%) //操作系统猜测
No exact OS matches for host (test conditions non-ideal).
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.06 seconds
- 修改后扫描结果
Nmap scan report for 192.168.12.186
Host is up (0.0039s latency).
All 1000 scanned ports on 192.168.12.186 are filtered
Too many fingerprints match this host to give specific OS details
Network Distance: 3 hops
TRACEROUTE (using proto 1/icmp)
HOP RTT ADDRESS
1 4.63 ms 192.168.0.1
2 9.86 ms *.*.*.*
3 4.37 ms 192.168.12.186
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/
.
Nmap done: 1 IP address (1 host up) scanned in 11.68 seconds
另附一些参数的说明:
- net.ipv4.tcp_syncookies = 1 表示开启CentOS SYN Cookies,这是个BOOLEAN。当出现CentOS SYN等待队列溢出时,启用cookies来处理,可防范少量CentOS SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用,这是个BOOLEAN。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
- net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,这是个BOOLEAN,默认为0,表示关闭。
- net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。单位为秒。
- net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。单位为秒。
- net.ipv4.ip_local_port_range = 102465000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
- net.ipv4.tcp_max_syn_backlog = 8192 表示CentOS SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
- net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。 默认为180000,改 为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
- net.ipv4.tcp_synack_retries和net.ipv4.tcp_syn_retries是定义CentOS SYN重试次数。 执行以下命令使配置生效:以下是代码片段:/sbin/sysctl -p 如果你不想修改/etc/sysctl.conf,你也可以直接使用命令修改:以下是代码片段:/sbin/sysctl -w key=value
来源:oschina
链接:https://my.oschina.net/u/3546824/blog/4759693