高并发下curl请求失败 Error:couldn’t connect to host

iptables 表满了
自动清理时间60s 总量6w的样子我们60s请求量超过6w就记录不进去了请求就发送不出去了
还有记录作用,可以控制,已建立连接和新发起连接区别对待。那要控制已建立的连接和新发起的要怎么控制,那自然要先记录下来
才能知道哪个是新的,哪个是已经存在的
这里才关键的本源问题
请求得太多,导致表满。无用连接没及时清除
解决方法 :
直接关闭iptables

适合Web服务器的iptables规则

#! /bin/sh
# /etc/iptables.bak

# Let's save typing & confusion with variables
IPTABLES=/sbin/iptables

# Flush active rules and custom tables
$IPTABLES --flush
$IPTABLES --delete-chain

# set the defaults so that by-default incoming packets are dropped, unless explicitly allowed;
# for a desktop workstation, we'll let lots of (unpredictable) outgoing packets go freely.
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

# INBOUND POLICY
# ==============
# of course, accepting loopback is a good idea
$IPTABLES -A INPUT -i lo -j ACCEPT

# we will permit ping, but rate-limit type 8 to prevent DoS-attack
$IPTABLES -A INPUT -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 3 -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 11 -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT

#   (Applies to packets entering our network interface from the network, 
#   and addressed to this host.)

$IPTABLES -A INPUT -m state --state INVALID -j DROP 
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

# ftp incoming
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 20 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT

# ssh incoming, including non-standard port (if needed)
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT 
#$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 222 -j ACCEPT

# web serving, let's allow it!
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT

# secure web serving, let's allow it!
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT

# amanda tape-backups; we reach out and tape things from this machine
$IPTABLES -A INPUT -p udp -m state --state NEW -m udp --dport 10080 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 10082 -j ACCEPT
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 10083 -j ACCEPT

# nagios (5666); monitor time (123), allow snmp (161)
$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 5666 -j ACCEPT
$IPTABLES -A INPUT -p udp -m udp --dport 123 -j ACCEPT
$IPTABLES -A INPUT -p udp -m udp --dport 161 -j ACCEPT

# OUTBOUND POLICY
# ===============
# of course, accepting loopback is a good idea
$IPTABLES -A OUTPUT -o lo -j ACCEPT

#   (Applies to packets sent to the network interface from local processes)

$IPTABLES -A OUTPUT -j ACCEPT

根据自己的服务器的具体环境作适当修改,然后把上面的代码保存到/etc/iptables.bak。
运行脚本:

  1. sh /etc/iptables.bak

查看规则:

  1. iptables -L

保存规则:

Iptables静态防火墙基础教程

http://www.centos.bz/2011/06/iptables-basic-guide/
Iptables
对于刚入门Linux的新手都比较难理解和配置。但是如果你掌握了其中的诀窍,你就会发现其实没有那么难学。Iptables是Linux的静态防火墙,用来创建规则来过滤数据包和NAT模块。简单地说,Iptables为Linux网络连接的防火墙。

检查Iptables是否安装

在配置Iptables之前,我们首先得确认Iptalbes是否已经安装了:

  1. # rpm -qa | grep iptables

执行命令后应该会打印出iptables-your.installed.version这样的信息。如果没有,则表示没有安装,你可以下载最新的rpm软件包通过命令rpm -Uvh iptables-downloaded.version.rpm安装,或是直接使用yum安装:

  1. #yum install iptables

Iptables相关的文件

/etc/init.d/iptables:这个是用来开始、停止Iptables或是保存规则的初始化脚本。
/etc/sysconfig/iptables:所有的规则都保存在这个文件。
/sbin/iptables:是Iptables的二进制文件。
在真正开始配置规则时,我们先来看看当前的配置:

  1. #iptables -L

默认的,当前只有三条规则链:INPUT、OUTPU、FORWARD。INPUT规则链包含进站数据包的规则,OUTPUT规则链包含出站数据包规则,FORWARD规则链包含转发数据包到其它主机的规则。
Iptables大多数用来配置处理从网络进入Linux服务器的数据包,所以INPUT规则链经常会到用到。当有数据包通过Linux核心,下面几个指令会决定数据包被匹配之后如何处理。
ACCEPT: 数据包允许通过其到达目的地。
REJECT: 数据包被拒绝并返回给发数据包的主机一个简单的解释。
DROP: 数据包被拒绝不返回任何信息。

配置Iptables规则

在开始配置规则之前,有必要提出三点建议:
1、规则的顺序很重要。比如一开始你就添加了一个阻止任何的规则,那么你下面的允许规则都不会起作用了。
2、你要记住编写的规则是存储在内存中,不会自动存储磁盘,因此你重启之后,规则就不会了,所以你需要手动执行初始化脚本来保存规则。
3、如果你是在远程来管理服务器,比如SSH,那么配置规则之前首先得添加允许ssh的规则,要不Iptables会把你阻止在外。

  1. # iptables -A INPUT -s 213.10.10.13 -d 192.168.1.1 -p TCP -dport 22 -j ACCEPT

说明:
-A:附加INPUT规则链;
-s: 来源IP,例子中就是你当前登录ssh所用的电脑IP;
-d:目的地址,例子中就是服务器IP
-p:通信协议
–dport:目的端口,例子中是ssh默认端口22;
-j:代表“Jump”,所以之前的规则都匹配,则接受数据包。
下面让我们来为一般的数据包设置基本的规则。Iptables的特性之一是能确定数据包的状态。下面是在一个新的连接的数据包状态:
NEW:第一服务器发送给第二服务器一个SYN数据包来新建一个连接。
RELATED: 第二服务器接收SYN数据包并发送给第一服务器一个SYN-ACK数据包来确定连接正常。
ESTABLISHED: 第一服务器接收到SYN-ACK数据包并发送给第二服务器ACK服务器来做最后的确认,至此连接建立完成,两台服务器开始传输数据。
为了让你的服务器能与其它服务器建立TCP连接,Iptables必须配置如下:

  1. # iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
  2. # iptables -A FORWARD -i eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
  3. # iptables -A OUTPUT -m state –state RELATED,ESTABLISHED

自定义规则

阻止IP:

  1. # iptables -A INPUT -s 213.10.10.13 -j DROP

这条规则表示阻止从IP213.10.10.13传进来的数据包。

  1. # iptables -A INPUT -d 192.168.1.15 -j REJECT

这条规则表示阻止从局域网IP192.168.1.15来的数据包。
允许IP:

  1. # iptables -A INPUT -s 213.10.10.13 -d 192.168.1.4 -p tcp –dport 21

这条规则表示接受来自IP 213.10.10.13到目标地址FTP服务器192.168.1.4的数据包。
当你配置来必要的规则之后,到时候在最后增加拒绝所有的规则了:

  1. # iptables -A INPUT -j REJECT
  2. # iptables -A FORWARD -j REJECT

这些规则必须在最后添加。
要删除一个规则,只需把”-A”替换成”-D”即可。

保存规则

为了保存Iptables规则,只需执行以下命令:

  1. # /etc/init.d/iptables save

停止Iptables来刷新所有规则:

  1. # /etc/init.d/iptables stop

重新启动Iptables从/etc/sysconfig/iptables加载最新规则:

  1. # /etc/init.d/iptables start

这只是一个基础的Iptables教程,适合配置比较简单的规则,如果需要配置复杂的规则,还需要深入的学习。