Linux NAT ip_conntrack: table full
[ 2011/07/02 18:05 | by selboo ]
Web服务器用了一段时间,随意间使用dmesg命令后竟然发现了一些奇怪的内核日志,如下:
ip_conntrack: table full, dropping packet.
后来才知道, Linux TCP 的 ip_conntrack 模块会记录 tcp 通讯协议的 established connection 记录, 而且默认 timeout 时间长达五天 (432,000 秒), 由于Web站点使用memcached因此怀疑一些TCP链接从来就没有释放过,所以导致这种问题。
解决方法 (1): 加大 ip_conntrack_max 值
查出原本的 ip_conntrack_max 值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max
写入理想的数值 (每一个 ip_conntrack buffer 会占用 292 Bytes)
指令: echo "数值" > /proc/sys/
ip_conntrack: table full, dropping packet.
后来才知道, Linux TCP 的 ip_conntrack 模块会记录 tcp 通讯协议的 established connection 记录, 而且默认 timeout 时间长达五天 (432,000 秒), 由于Web站点使用memcached因此怀疑一些TCP链接从来就没有释放过,所以导致这种问题。
解决方法 (1): 加大 ip_conntrack_max 值
查出原本的 ip_conntrack_max 值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max
写入理想的数值 (每一个 ip_conntrack buffer 会占用 292 Bytes)
指令: echo "数值" > /proc/sys/
用 iptables 屏蔽来自某个国家的 IP
[ 2010/08/23 09:40 | by selboo ]
首先去 http://www.ipdeny.com/ipblocks/ 下载对应的国家IP地址端
写个脚本循环导入即可。
[code]#!/bin/bash
# Block traffic from a specific country
# written by vpsee.com
COUNTRY = "cn"
IPTABLES = /sbin/iptables
EGREP = /bin/egrep
if [ "$(id -u)" != "0" ]; then
echo "you must be root" 1>&2
exit 1
fi
resetrules() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t m
写个脚本循环导入即可。
[code]#!/bin/bash
# Block traffic from a specific country
# written by vpsee.com
COUNTRY = "cn"
IPTABLES = /sbin/iptables
EGREP = /bin/egrep
if [ "$(id -u)" != "0" ]; then
echo "you must be root" 1>&2
exit 1
fi
resetrules() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t m
iptables 端口转发
[ 2010/08/02 19:07 | by selboo ]
*nat
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j SNAT --to-source 172.20.3.114
-A PREROUTING -d 192.168.6.114 -p tcp -m tcp --dport 3725 -j DNAT --to-destination 210.51.173.102:1521
访问192.168.6.114:3725的访问 他的目的地址都修改成210.51.173.102:1521
-A POSTROUTING -d 210.51.173.102 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.6.114
所有目的地址是210.51.173.102:1521 他的源地址都修改成192.168.6.114
阅读全文
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j SNAT --to-source 172.20.3.114
-A PREROUTING -d 192.168.6.114 -p tcp -m tcp --dport 3725 -j DNAT --to-destination 210.51.173.102:1521
访问192.168.6.114:3725的访问 他的目的地址都修改成210.51.173.102:1521
-A POSTROUTING -d 210.51.173.102 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.6.114
所有目的地址是210.51.173.102:1521 他的源地址都修改成192.168.6.114
阅读全文
iptables的相关概念和数据包的流程
[ 2010/04/27 11:43 | by selboo ]
iptables 相关概念
匹配(match):符合指定的条件,比如指定的 IP 地址和端口。
丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。
接受(accept):和丢弃相反,接受这个包,让这个包通过。
拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。
目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。
跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。
阅读全文
匹配(match):符合指定的条件,比如指定的 IP 地址和端口。
丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。
接受(accept):和丢弃相反,接受这个包,让这个包通过。
拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。
目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。
跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。
阅读全文