奇怪的linux网络不通事件

一个客户Centos Linux系统出现dz通信失败,
ssh登录到服务器后发现,服务器有双ip, 1.1.1.1 和 1.1.1.2
经询问得知原来1.1.1.1 废弃不用,更改为1.1.1.2,但是原来的系统管理员图省事,
只是增加了1.1.1.2的新ip,并未去掉老的ip,导致服务器对外ping和从服务器的主动动作都
被认为是从老的ip发出,估计外围交换机做了限制,导致失败
去掉旧ip,只保留新ip,问题解决

linux redhat centos 双网卡单网关或者双网关的配置

vim /etc/iproute2/rt_tables 增加
252  cnc
251  tel

在 /etc/rc.local 里面增加

ip route flush table tel
ip route add default via 网关1 dev eth1 src IP1 table tel
ip rule add from IP1 table tel
ip route flush table cnc
ip route add default via 网关2 dev eth0 src IP2 table cnc
ip rule add from IP2 table cnc

注意红色部分即可

写成shell脚本如下

#!/bin/bash

ip1=”1.1.1.2″
e1=”eth0″
gw1=”1.1.1.1″
ip2=”2.2.2.2″
e2=”eth1″
gw2=”2.2.2.1″

#################################################
### 上面的配置要改改
### 下面就不要动了
#################################################

rt=”/etc/iproute2/rt_tables”
echo “252 cnc ” >> $rt
echo “251 tel ” >> $rt
rclocal=”/etc/rc.local”

echo “ip route flush table tel” >> $rclocal
echo “ip route add default via $gw1 dev $e1 src $ip1 table tel” >> $rclocal
echo “ip rule add from $ip1 table tel” >> $rclocal
echo “ip route flush table cnc” >> $rclocal
echo “ip route add default via $gw2 dev $e2 src $ip2 table cnc” >> $rclocal
echo “ip rule add from $ip2 table cnc” >> $rclocal

点此下载

2iprule

linux下邮件服务器配置的各个部件的关系

postfix 毫无疑问这个MTA (Mail Transfer Agent) 是用来做邮件传输的
maildrop 用来做本地的邮件投递投递工作,MDA (Mail delivery agent)
courier-authdaemon 用于认证 配置文件是 /etc/courier/authdaemonrc
courier-authlib 认证库支持
courier-authlib-mysql 支持mysql的认证库 配置文件 /etc/courier/authmysqlrc
saslauthd 用于 SMTP 认证,支持courier-authlib 配置文件 /etc/default/saslauthd
courier-pop courier-pop-ssl pop3 和 pop-ssl 的认证服务 配置文件 /etc/courier/pop3d
courier-imap courier-imap-ssl imap 和 imap-ssl 的 认证服务 配置文件 /etc/courier/imapd

需要启动的服务
/etc/init.d/postfix start
/etc/init.d/courier-authdaemon start
/etc/init.d/saslauthd start
/etc/init.d/courier-imap start
/etc/init.d/courier-pop start

测试方法
测试下Courier-Authlib是否能成功连接mysql

authtest -s login 邮件地址 或者 authtest -s login 邮件地址 密码

测试sasl 的smtp
testasaslauthd -s smtp -u xxxx -p xxxxx

ubuntu 下安装 postfix extmail 系统参考
http://www.mike.org.cn/articles/ubuntu-configure-postfix-mailserver/

linux系统负载检查的思路

有时候客户会说服务器慢,综合来看就是负载变高了,一般情况下有几种可能

  1. 用户访问量确实增大
  2. 被攻击了
  3. 代码或者数据库更改造成索引丢失,或者代码未用到索引
  4. 硬件发热

首先通过 top 命令查看服务器中占用cpu比较重的进程,

如果发现是 mysql ,可以先在mysql > 命令行里面show full processlist; 查看是否有语句被lock,然后考虑
1)是否可以优化数据库索引
2) 是否可以找到相关php代码,
3)查找web服务器的日志,分析当前发生了什么,是否有恶意蜘蛛,或者采集,或者某些特征的访问,可以从web 配置里面屏蔽相应特征的访问,比如基于特定referer的访问,特定user-agent的访问

centos 的vpn客户端配置 备忘

有颜色部分是需要根据情况修改的

1.安装包
yum -y install ppp
yum -y install pptp

2.配置文件
vi /etc/ppp/chap-secrets
——————————————
# Secrets for authentication using CHAP
# client    server    secret            IP addresses

username myvpnpassword” *
——————————————

vi /etc/ppp/peers/myvpn
——————————————
# written by pptpsetup
pty “pptp  vpnserverip –nolaunchpppd”
lock
#noauth
nobsdcomp
nodeflate
name username
remotename myvpn
ipparam myvpn
require-mppe-128
refuse-pap
refuse-chap
refuse-eap
refuse-mschap
——————————————

3.复制命令
cp /usr/share/doc/ppp-2.4.4/scripts/pon /usr/sbin/
cp /usr/share/doc/ppp-2.4.4/scripts/poff /usr/sbin/
chmod +x /usr/sbin/pon /usr/sbin/poff

4.拨vpn
pon myvpn

5)ifconfig 看ppp0

pptp 如果 yum  安装不了,可以到 rpmfind.net 去查

http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=1&dl=40&search=pptp&field[]=1&field[]=2

6.断开连接
poff myvpn

运维经验 Linux 自动屏蔽超标访问IP的 bash 脚本

##############################################
#version="20100718"
#author="phpsir"
#author_email="phpsir@phpsir.com"
#QQ  733905
##############################################
maxnum=100
runmin_max=120
#runmin_max is run iptables -F timeout
banip_data_file="/root/banip_data.txt"
ipopenfile="/root/openip.txt"
ipfile="/tmp/80link.txt"
nsfile="/tmp/netstat80.txt"

myip=`/sbin/ifconfig eth0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep .`
if [ ! -f $ipopenfile ]
then
echo "init $ipopenfile"
touch $ipopenfile
fi
if [ -f $banip_data_file ]
then
source $banip_data_file
echo  "last runtime=$runtime"
else
echo "init $banip_data_file"
echo 'runtime='`date "+%s"` > $banip_data_file
source $banip_data_file
runmin_max=-1
fi

echo "start shell" `date "+%Y-%m-%d %H:%M:%S"`
runmin=$((`date "+%s"`-$runtime))
if [ $runmin -gt $runmin_max ]
then
echo $runmin "is bigger than " $runmin_max
echo "clear ips"
/sbin/iptables -F
echo 'runtime='`date "+%s"` > $banip_data_file
else
echo $runmin "is lowwer than " $runmin_max
fi

netstat -an | grep "$myip:80" > $nsfile

echo "Total Links = " `cat $nsfile | wc -l `
echo "Total Links ESTABLISHED = " `cat $nsfile | grep ESTABLISHED | wc -l `
echo "Total Links SYNC = " `cat $nsfile | grep SYN | wc -l `

cat $nsfile | sed "s/::ffff://g" | awk '{print $5}' | awk -F: '{print $1}' | sort|uniq -c|sort -rn | head -n 10 >  $ipfile

cat $ipfile  | while read oneline
do
    ip=`echo $oneline | cut -d " " -f 2`
    num=`echo $oneline | cut -d " " -f 1`
    str="$ip has linked  $num "
    banme="yes"

    for allowip in `cat $ipopenfile`
    do
        echo $ip | grep $allowip > /dev/null
        if [ $? -eq 0 ]
        then
            banme="no"
            echo $allowip "banme = " $banme
            /sbin/iptables -D  INPUT   -p tcp -s $ip  -d $myip  --dport 80 -j REJECT  > /dev/null  2>&1
            continue
            fi
    done

    if [ $banme = "yes" ]
    then
        if [ $num -gt "$maxnum" ]
        then
            /sbin/iptables -L -n | grep "$ip" >/dev/null
            status=`echo $?`
            if [ $status -eq 1 ]
            then
                echo "deny  $ip ,because $str "
                /sbin/iptables -A  INPUT   -p tcp -s $ip  -d $myip  --dport 80 -j REJECT
                echo "BAN " $ip " OK "
                #/sbin/iptables -L -n | grep "$ip"
            else
                echo > /dev/null
                #echo "$str  alread reject"
            fi
        else
            echo > /dev/null
            #echo "$str  $ip ok ,less  $maxnum "
        fi
    fi

done

echo "stop shell" `date "+%Y-%m-%d %H:%M:%S"`