Postfix和Sendmail设置所有邮件都收到一个邮件用户下

Postfix设置所有邮件都收到一个邮件用户下 申请了一个yi.zapto.org的免费域名,想把*@yi.zapto.org的邮件地址都送到zrr@yi.zapto.org这个地址去。 用Postfix来做: 编辑main.cf,设置邮件的域名,对了,最好在/etc/hosts中增加yi.zapto.org域名的解析。 # vi /etc/postfix/main.cf ... inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, yi.zapto.org virtual_alias_maps = hash:/etc/postfix/virtual ... 编辑virtual,设置全域邮件转发到zrr # vi /etc/postfix/virtual @yi.zapto.org zrr # postmap /etc/virtual 如果有多个域名,那么在mydestination最后依次添加,并且修改virtual并重新hash即可。 ok,重启postfix service postfix restart Sendmail设置所有邮件都收到一个邮件用户下 用Sendmail来做: 编辑local-host-names,设置邮件的域名,对了,最好在/etc/hosts中增加yi.zapto.org的解析,否则sendmail启动时会反解,速度很慢。 # vi /etc/mail/local-host-names yi.zapto.org 编辑virtusertable,设置全域邮件转发到zrr # vi /etc/virtusertable @yi.zapto.org zrr # rm /etc/virtusertable.db # cd /etc/mail # make 编辑sendmail.cf,增加信任用户nobody # vi /etc/mail/sendmail.cf ... ##################### # Trusted users # ##################### # this is equivalent to setting class "t" Ft/etc/mail/trusted-users Troot Tdaemon Tuucp Tnobody ... 这样所有发过来的邮件都会自动转发到zrr这个账号下。 ...

2024年01月17日 · 1 分钟 · 96 字 · 八戒

更新jar包或者jar包中的文件

jar包可以当作一个zip包来看待。 jar文件:/home/resin.jar 需要更新包中com/caucho/server/port/Port.class类文件 方法1,直接更新: 查看jar包的文件目录结构 jar tf resin.jar 更新指定内容 jar uf resin.jar com/caucho/server/port/Port.class jar uf testRedis-33.jar redis.properties 方法2,解压替换后再打包: 解压包: mkdir new cd new jar xvf ../testRedis-33.jar 进行修改 vi redis.properties 重新压包 jar cmvf META-INF/MANIFEST.MF t.jar *

2024年01月17日 · 1 分钟 · 35 字 · 八戒

怀念永远的freshmeat.net

怀念永远的freashmeat 这个网站是从一开站就关注的,基本上天天都看,有10几年了。 持续到2014年6月18日,永久的封站了。 时不时的,仍会打开这个网页,逡巡良久!!!,时光荏苒,2024年了,关站都要10年了。纪念一下!

2024年01月16日 · 1 分钟 · 4 字 · 八戒

LVM卷必须备份metadata

这是个反面教材。在京东数科的时候用的是kvm的虚机系统,同事追求更快,文件镜像用的是raw分区,里面装了lvm。 grub的启动文件如下: kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_root-lvroot rd_NO_LUKS rd_LVM_LV=vg_root/lvroot LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 console=ttyS0,115200n8 rd_LVM_LV=vg_root/lvswap KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet rd_NO_DM 看上面,root也被建立在lvroot的lvm卷上了。 然后就遇到了断电,导致kvm挂掉了,悲催的是lvm卷被破坏了,用尽办法也弄不出来卷信息。因为lvm的metadata没有备份。 数据全丢,无法恢复,杯具了。 综上LVM的metadata必须备份,方法如下: vgcfgbackup /etc/lvm/backup/VolGroup是当前lvm配置的一个备份,而/etc/lvm/archive是归档。 看看归档: ls -l /etc/lvm/archive/* -rw-------. 1 root root 1820 Jun 12 2015 /etc/lvm/archive/VolGroup_00000-444365108.vg 恢复方法: vgcfgrestore 具体恢复的步骤: 首先查看blkid,看看硬盘分区的UUID blkid /dev/mapper/VolGroup-LogVol01: UUID="d6d24cc3-5e4a-4f4d-a0b1-2524e727b0fe" TYPE="ext4" /dev/sda1: UUID="3d0103ac-1b18-4da5-bc20-4b7a980a55c0" TYPE="ext4" /dev/sda2: UUID="i5Cd6V-IVHN-e694-o9CQ-OZJe-zvt0-AhUBLq" TYPE="LVM2_member" /dev/mapper/VolGroup-LogVol00: UUID="06fe7af0-dee5-494a-9b5b-11bf95244acd" TYPE="swap" 查看lvm信息,找出里面所有物理卷的UUID: less /etc/lvm/archive/VolGroup_00000-444365108.vg ... physical_volumes { pv0 { id = "i5Cd6V-IVHN-e694-o9CQ-OZJe-zvt0-AhUBLq" device = "/dev/sda2" # Hint only ... 首先恢复所有的pv,物理卷,这里我们就一个物理卷,所以执行一次,如果有多个物理卷,一个一个来即可 pvcreate --uuid "i5Cd6V-IVHN-e694-o9CQ-OZJe-zvt0-AhUBLq" \ --restorefile /etc/lvm/archive/VolGroup_00000-444365108.vg 物理卷恢复完了,再恢复lv,逻辑卷: vgcfgrestore -f /etc/lvm/archive/VolGroup_00000-444365108.vg VolGroup 弄完后vgdisplay查看一下: vgdisplay --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 9 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 1.64 TiB PE Size 4.00 MiB Total PE 428705 Alloc PE / Size 428705 / 1.64 TiB Free PE / Size 0 / 0 VG UUID 3h3yik-kmqP-Q8sC-5bn0-cwtw-SXpo-orMlKn 就恢复成功了。 ...

2024年01月16日 · 1 分钟 · 159 字 · 八戒

kvm提高网卡效率使用SR-IOV

什么是SR-IOV呢? 简单的说,SR-IOV是一种虚拟化方案,用来使一个PCIe的物理设备,能虚拟出多个设备,这些虚拟出来的设备看起来就像是多个真实的物理设备一样,并获得能够与本机性能媲美的 I/O 性能。 SR-IOV现在最多是用在网卡上,kvm虚拟机的网卡功能一般会下降到实体机的30-50%,如果改用SR-IOV会大大提高网卡性能。 SR-IOV 有2种功能: 物理功能 (Physical Function, PF) 就是标准的PCIe的功能了 虚拟功能 (Virtual Function, VF) 与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 仅允许拥有用于其自身行为的配置资源。 好的,如何在生产环境中使用它呢? 场景如下: 如上: 机房里有两台交换机: switch-1用来连接各机器的eth0口 switch-2用来连接各机器的eth1口 switch-1和switch-2互联 这是一种机房的标准连法,eth0和eth1做bonding,做线路冗余 server-2是一台Dell R730的服务器,eth0连switch-1,eth1连switch-2,上面跑了三个虚机: VM-1跑在基于bonding的Bridge上,标准的做法 VM-2和VM-2则是利用了SR-IOV,从虚拟网卡直连到物理网卡,减少了中间环节,提高了网卡的效率。 首先要把服务器的vt和sr-iov打开: System BIOS > Processor Settings > Virtualization Technology System BIOS > Integrated Devices > SR-IOV Global Enable 当然,这么麻烦的事情,我们直接用脚本通过idrac调用racadm来做好了: #!/bin/sh sshpass -p "xxxxx" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm set BIOS.ProcSettings.ProcVirtualization Enabled sshpass -p "calvin" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm set BIOS.IntegratedDevices.SriovGlobalEnable Enabled sshpass -p "xxxxxx" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm serveraction powercycle 注意,Dell R730的机器用得是Intel I350的以太网卡,每个网口最多支持8个VF,如果是高级的X520网卡,就支持64个VF。 ...

2024年01月15日 · 5 分钟 · 883 字 · 八戒

idrac远程登录服务器

Linux的环境了,windows的不行。 Dell的idrac其实提供了远程的ssh界面,我们通常用idrac来设置bios什么的,当然如果能通过idrac直接登录服务器那就更好了。 首先普及以下几个概念: tty: Video console terminal (abbreviation for “Teletype”) ttyS: Serial console terminal pts: Virtual console terminal (pseudo-tty or pty but stands for Pseudo-Terminal Slave (PTS)) 简单说,tty是带显示器的终端,ttyS是串口终端,pts是虚拟终端。tty接显示器、键盘,ttyS接串口,pst就是远程ssh/telnet过来的虚拟终端。 第一步:修改Dell Bios dell的bios中关于serial的配置如下图: 我们只改前两个就可以了: Serial Communication: “On with serial redirection via com2” Serial Port Address: “Serial Device1 = COM1, Serial Device2=COM2 External Serial Connector: “Serial Device1” Failsafe Baud Rate: “115200” Remote Terminal Type: “VT100/VT220” Redirection After Boot: “Enabled” 解释一下: Serial Communication 缺省是 On without Console Redirection,我们需要把所有console的显示都转发到com2上,所以需要改。 Serial Port Address 缺省是 Serial Device 1=COM2, Serial Device 2=COM1,如果不改,那么接上物理机上的串口就可以看到登录画面了,这样等于串口1废掉了,万一我们要把物理机上的com1口给留出来备用,插个串口的wavecom modem做报警用,那就傻眼了,所以必须改掉留出com1备用。 External Serial Connector 缺省是 Serial Device1,不用改,那么物理机上的com口就是com1了,对应ttyS0。 Failsafe Baud Rate: “115200”,不用改,就用这个高的好了。 Remote Terminal Type: “VT100/VT220”,不用改,黑白的vt100就很好 Redirection After Boot: “Enabled”,也不用改,需要重定向。 当然,用脚本一次搞定更好: ...

2024年01月15日 · 2 分钟 · 252 字 · 八戒

用openssh的tunnel建立vpn

openssh是支持隧道的,所以很简单就可以在ssh中再套个管道,直接用来vpn,场景如下: 如上图,A机能ssh无密码登录B机 A机的IP:172.16.8.106 B机的IP:172.16.8.108 A机拨通vpn tunnel后tun的ip:192.168.244.2 B机拨通vpn tunnel后tun的ip:192.168.244.1 首先编辑A和B的/etc/ssh/sshd_config,允许tunnel,缺省是不允许的,然后service sshd restart ,重启sshd ... PermitTunnel yes ... A和B安装linux下的tunctl软件,并启动一个tunnel设备 yum install tunctl tunctl -t tun5 -u root 在A(172.16.8.106)机器上生成key,并设置能无密码证书直接登录B(172.16.8.108) ssh-keygen ssh-copy-id root@172.16.8.108 在A上执行命令,建立ssh tunnel: ssh -w 5:5 root@172.168.8.108 在A上执行 ifconfig tun5 192.168.244.2 pointopoint 192.168.244.1 netmask 255.255.255.0 在B上执行 ifconfig tun5 192.168.244.1 pointopoint 192.168.244.2 netmask 255.255.255.0 这样分别在A和B上ping 192.168.244.1和192.168.244.2,都能通就表示已经ok了。 优化一下,A和B两边都先把tun5起来以后,直接在A上一句话搞定,这个不会自动退出,所以得ctrl+z,然后bg放后台去: ssh \ -o PermitLocalCommand=yes \ -o LocalCommand="ifconfig tun5 192.168.244.2 pointopoint 192.168.244.1 netmask 255.255.255.0" \ -o ServerAliveInterval=60 \ -w 5:5 root@172.16.8.108 \ 'ifconfig tun5 192.168.244.1 pointopoint 192.168.244.2 netmask 255.255.255.0; echo tun5 ready' 如果要用在翻墙的环境,那就得保持长链接了。假设A机器是在一个防火墙后,且被NAT了,那么就得先这样打通隧道: ...

2024年01月15日 · 1 分钟 · 155 字 · 八戒

多网关、策略路由、负载均衡的实际应用

场景: 公司有两条线路,一条是鹏博士的,一条是电信的。 鹏博士是100兆共享线路,电信是10兆独享线路。 鹏博士对端的地址是1.1.1.1,本地服务器地址是1.1.1.2 电信对端的地址是2.2.2.2,本地服务器是2.2.2.3 所以导致有两个网关,大部分公司同事用得是100兆的共享,10兆的被客服独用,但是使用率很低。那能否两边都用呢? 答案是可以的,用策略路由就可以。 策略路由需要用到iproute2,没有的话先安装一下。 定义策略路由表 cd /etc/iproute2/ echo "101 pengboshi" >> rt_tables echo "102 dianxin" >> rt_tables 定义策略路由 ip route add default via 1.1.1.1 table 101 ip route add default via 2.2.2.2 table 102 ok,流量分为两个方向,进来的和出去的,先定义简单的,进来的: ip rule add from 1.1.1.1 table 101 ip rule add from 2.2.2.2 table 102 出就比较麻烦了,100兆和10兆按权重来分,8:2吧 ip route replace default scope global \ nexthop via 1.1.1.1 dev eth0 weight 8 \ nexthop via 2.2.2.2 dev eth0:1 weight 2 注意,因为我们是用了一台路由器来连接上面两个网关的,服务器实际是一个网卡上连到交换机,然后再上连路由器的,如下图: 我们把这一切固定下来,编辑/etc/rc.d/rc.local即可 # cat /etc/rc.local #!/bin/sh touch /var/lock/subsys/local /sbin/ip route replace default scope global nexthop via 1.1.1.1 dev eth0 weight 8 nexthop via 2.2.2.2 dev eth0:1 weight 2

2024年01月11日 · 1 分钟 · 104 字 · 八戒

Keepalived与iptables mark的联动

Iptable可以给进来的包打上标签,比如我们把从1.2.3.4进来的包都打上标签2000(标签可以是任何整数) iptables -t mangle -A PREROUTING -i eth0 \ -p tcp -s 1.2.3.4 --dport http -j MARK --set-mark 2000 或者把访问172.16.8.1的80和443端口的包都打上标签123: iptables -t mangle -A PREROUTING -i eth0 \ -p tcp -d 172.16.8.1/32 -m multiport --dports 80,443 -j MARK --set-mark 123 随后我们就可以在keepalived里来指定virtual_server来处理这些打过标签的流量了: virtual_server fwmark 123 { ... } 具体的一个用法,如果你想禁止从1.2.3.4来的ip访问你服务器,于是乎你就可以先给包打上标签2000,然后配个服务器,上面写联系人和电话,单独给他看,他看到会联系你询问被屏蔽的原因,如下: virtual_server fwmark 2000 { delay_loop 6 lb_algo wlc lb_kind NAT persistence_timeout 0 protocol TCP real_server 10.10.10.1 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 } } }

2024年01月11日 · 1 分钟 · 77 字 · 八戒

F5利用irule来防止Ddos的方法

公司的服务器遭受了攻击,某些人不停调用公司服务器发送短信的api,真是有够无聊的。 由于我们的架构是前面F5 Bigip,后面接了N个Tomcat,那就直接写个F5的irule来阻止它。 阻止GET请求的频率,30秒只允许单个ip发5次 假设GET的模式是 GET /sendsms.do?mobile=13800000000&msg=aaaaaaaa irule里有个非常神奇的东西,table,是session会话表的超表,基本操作是key-value型,带有生存时间,这点最重要。 详细的大家可以去看: https://clouddocs.f5.com/api/irules/table.html 阻止GET的irule: when RULE_INIT { set static::windowSecs 30 } when HTTP_REQUEST { if { ( [HTTP::method] equals "GET" ) && ( [HTTP::uri] starts_with "/sendsms.do" ) } { set myUserId [IP::client_addr] set myMaxRate 5 if { $myMaxRate ne "" } { set reqnum [table incr "req:$myUserId"] set tbl "countpost:$myUserId" table set -subtable $tbl $reqnum "ignored" indef $static::windowSecs if { [table keys -subtable $tbl -count] > $myMaxRate } { HTTP::respond 403 "Block" return } } } } 来个更加复杂的例子: POST的请求如下: POST /api/sendMessage.htm HTTP/1.1 Content-Length: 203 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Host: 172.8.2.23 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.5 (Java/1.7.0_51) Accept-Encoding: gzip,deflate action=order.sumit.order&jsonData=%7B%22channelCode%22%3A%22%22%2C%22mobiles%22%3A%5B%2215176989787%22%5D%2C%22source%22%3A%22pop%22%2C%22tempParameters%22%3A%5B%22480827%22%2C%2291%22%5D%2C%22templateId%22%3A2%7D 我们要阻止POST /api/sendMessage.htm且action=sendmsg的话,就比较复杂一些,我们判断uri满足条件后,还要进一步判断content中action=的内容: ...

2024年01月11日 · 2 分钟 · 226 字 · 八戒