五千年(敝帚自珍)

主题:【求助】关于网站大量 Error 001 应对 -- 铁手

共:💬49 🌺143
全看分页树展 · 主题 跟帖
家园 【整理】中文网站里面很多内容值得参考。

1.外链出处

要点:

局域网中当有人使用p2p类的软件就很容易使ip_conntrack达到最大值

ip_conntrack 是Linux NAT一个跟踪连接条目的模块记录着允许的跟踪连接条目ip_conntrack 模块会记录 tcp 通讯协议的 established connection 记录, 而且预设 timeout 时间长达五天 (432,000 秒).所以局域网中当有人使用p2p类的软件就很容易使ip_conntrack达到最大值...也由此造成:

ip_conntrack: table full, dropping packet. 的错误提示..网关丢弃数据包..网络中断..

具体解决办法如下二种:

1.加大ip_conntrack_max设定值

#modprobe ip_conntrack 需提前加载ip_conntrack模块

#echo "986400" > /proc/sys/net/ipv4/ip_conntrack_max 数值具体多大应计算得出

开机使用新数值..有三种办法:

除vi /etc/rc.local外亦有:

#vi /etc/sysctl.conf 加入: net.ipv4.ip_conntrack_max = 986400

#sysctl -w net.ipv4.ip_conntrack_max=986400

2.减小ip_conntrack timeout 的时限 默认5天即432000s

ip_conntrack_tcp_timeout_established 值默认432000s 即5天

#echo "3600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

开机使用同于上例

#vi /etc/sysctl.conf 加入: net.ipv4.ip_tcp_timeout_established = 3600

#sysctl -w net.ipv4.ip_tcp_timeout_established=3600

另:通过ip_conntrack buffer 使用状况查出局域网中进行p2p下载的主机

查看目前 ip_conntrack buffer 使用状况

#grep conn /proc/slabinfo

结果实例: ip_conntrack 5918 8140 384 10 1:tunables 54 27 0:slabdata 814 814 0 (各值说明如下)

ip_conntrack the cache name

5918 the number of currently active objects

8140 the total number of available objects

384 the size of each object in bytes

814 the number of pages with at least one active object

814 the total number of allocated pages

1 the number of pages per slab are given

man slabinfo 可查询详细说明.

查出目前 ip_conntrack 记录最多的前五名 IP

#cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c |

sort -nr | head -n 5

结果实例:

2987 192.168.1.30

334 192.168.1.52

166 192.168.1.56

99 192.168.1.43

84 192.168.1.46

由此可知, 192.168.1.30占用了绝大多数的ip_connect buffer,推断这个IP的User可能使用了P2P软件

推荐一个清除某IP链接的方法:通过过滤ip_conntrack表得到ESTABLISHED状态过多的ip,用hping工具将这些ip从表中清理掉...

 下载: http://www.hping.org/download.html

  安装: ./configure;make;make install

hping清理IP链接脚本:(此脚本修改链接状态为closed)

#!/bin/sh

if [ -z $1 ] ; then

echo "NO INPUT IP"

exit

fi

grep -E "^tcp .{10,25}ESTABLISHED src=$1 " /proc/net/ip_conntrack | while read line; do

S_IP=`echo $line | awk '{print substr($5,5)}'`

S_SOCK=`echo $line | awk '{print substr($7,7)}'`

D_IP=`echo $line | awk '{print substr($6,5)}'`

D_SOCK=`echo $line | awk '{print substr($8,7)}'`

echo "$S_IP:$S_SOCK $D_IP:$D_SOCK"

hping2 $D_IP -R -s $S_SOCK -p $D_SOCK -a $S_IP -k -c 1 > /home/huaying/1.log 2>&1 &

done

对于具体p2p下载产生链接数及ip_connect_max具体设置数值大小推荐以下范文,感兴趣的朋友可以看看...http://www.chinaunix.net/jh/36/596067.html

附:linux NAT 性能优化常用设置...

#echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range

#echo "100 1200 128 512 15 5000 500 1884 2">/proc/sys/vm/bdflush

#echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

#echo "1048576" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max

#echo "1" > /proc/sys/net/ipv4/ip_forward

#echo "268435456" >/proc/sys/kernel/shmall

#echo "536870912" >/proc/sys/kernel/shmmax

#echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

#echo "1024" > /proc/sys/net/ipv4/neigh/default/gc_thresh1

#echo "2048" > /proc/sys/net/ipv4/neigh/default/gc_thresh2

#echo "4096" > /proc/sys/net/ipv4/neigh/default/gc_thresh3

#echo "52428800" > /proc/sys/net/ipv4/route/max_size

#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp

#echo "1" > /proc/sys/net/ipv4/tcp_window_scaling

2. 外链出处

要点:提供了一个对付DDOS的思路

http://linux.bdcf.net/index.php?option=content&task=view&id=87&Itemid=2

一个perl脚本来清空ip_conntrack.但是我发觉更简单办法是移除ip_conntrack模块.移除时提示有依赖,还是直接service iptables stop来得快 .但是要记得,ip_forward也被设为0了,所以该设的全重设

http://linux.bdcf.net/index.php?option=content&task=view&id=87&Itemid=2

一个perl脚本来清空ip_conntrack.但是我发觉更简单办法是移除ip_conntrack模块.移除时提示有依赖,还是直接service iptables stop来得快.但是要记得,ip_forward也被设为0了,所以该设的全重设

如何清除/proc/net/ip_conntrack的内容?

作者 woflyin

2004-12-09

对于做处于网关地位的机器,其开启了nat功能,那么/proc/net/ip_conntrack是保存的是内网地址和外部地址连接的情况,记录每个连接的周详情况,其内容一般会保持5天,期间重新启动网络并不会有效减少其内容,唯一的办法就是重新启动和增大内存的数量,给监控带来不便,内容很容易满,核心便会报警:

ip_conntrack: table full, dropping packet

解决办法:

1.增加内存:修改/etc/sysctl.conf的配置容量 net.ipv4.ip_conntrack_max=大的数值!

2.隔一段时间重新启动系统,清空ip_conntrack

3.对ip_conntrack编程,读取其内容,匹配指定的ip地址,然后调用发包程式发送RST报文,人为的完成tcp连接。用perl实现,调用了一个外部程式hping2,能够从其主页找到,这个程式就是个构包器

用法:cl.pl ipaddress

#!/usr/bin/perl

$ip = $ARGV[0];

#print $ARGS,$ip;

exit if(!$ip);

open(FH,"ip_conntrack");

while()

{

if (/^tcp .*ESTABLISHED src=$ip/)

{

#print $_;

@line = split(/=/,$_);

$sip = $line[1];

$sip =~s/ .*//g;

$dip = $line[2];

$dip =~s/ .*//g;

$sport = $line[3];

$sport =~s/ .*//g;

$dport = $line[4];

$dport =~s/ .*//g;

print "$sip:$sport $dip:$dportn";

`/usr/bin/hping2 $dip -R -s $sport -p $dport -a $sip -k -c 1 >/dev/null 2>/dev/null &`;

}

}

4。问题:通过这个思路,是否能够对消除ddos攻击有一定帮助呢?查询ip_conntrack表,判断syn_SENT标志是否过多,过多就能够采取这样的做法消除他们呢?希望大家讨论,一起进步!

3. 这个似乎有用。

要点:用iptables的raw表解决ip_conntrack: table full, dropping packet的问题

外链出处

内容不引用了,老铁自己看吧。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河