存档

作者存档

Linux下iptables导致往外主动访问出问题的事情

2017年3月4日 没有评论

新上线一台服务器,有公网地址,于是启用本机 iptables 做简单安全防护。按照平日常用的逻辑策略:

1,入的包走白名单模式(缺省策略 DROP)
2,出和转发的包,走黑名单模式(缺省策略 ACCEPT)
3,关键业务服务端口,直接设置为 NOTRACK

策略看起来没啥问题,但当我把 iptables 起起来后,却发现种种问题,都是主动往外访问的问题,比如:

1,dns 无法解析
2,无法往外 ping

然后这些问题基本上都走特殊的单独的策略解决了。但是最后碰到无法从公网下载软件安装,这个问题,我再也不想通过添加单独的规则来解决了,就仔细看了看,tcpdump 听包发现有 syn 出去的包,也有公网 web server syn+ack 回来的包,然后,周而复始。显然,公网 web server 回来的 syn+ack 的包被 iptables 给干掉了!

为什么会这样?在我的策略里,公网回来的包应该是匹配 ESTABLISHED 的状态这条规则而被接受的呀,但实际上看起来其实并没有。看了看 /proc/net/nf_conntrack,的确来回交互的包不在里头。这是咋么回事儿?!

仔细扣 iptables 配置规则,终于发现一行,我把从公网往外走的包都打成 NOTRACK 了……慢着,貌似这里有问题,出公网的包被打成 NOTRACK 了以后自然就不会被放入 /proc/net/nf_conntrack 里保持状态了,这样回来的包自然就不会匹配到 ESTABLISHED 状态了呀。当然最后还是受缺省策略控制,被悲催地 DROP 掉了。

改起来很容易,直接把这一句干掉,重启 iptables,一切 OK 了。

分类: Operation System 标签:

用Hexo新开博客了

2016年9月7日 没有评论

地址是http://blog.haw-haw.org/,欢迎大家捧场!

分类: Operation System 标签:

一个极简的抓某个分区文件被写入事件的stap脚本

2016年8月13日 1 条评论
#! /usr/bin/env stap
 
probe vfs.write
{
	if (dev == MKDEV($1, $2))
		printf ("%s(%d) 0x%x/%u argstr:%s, uid:%d\n", execname(), pid(), dev, ino, argstr, uid())
}

使用方法,例如:

stap inodewatch.stp 0x08 0x01;
# 这里的0x08,0x01是设备的major、minor号
分类: Programe 标签:

CentOS7下用macvlan驱动实现docker实例直接使用主机所在的网络

2016年7月23日 没有评论

环境:CentOS 7.2(最好升级到7的最新版)
docker主机信息(eth0:10.0.0.10/24,缺省网关:10.0.0.1)
首先,安装最新的docker,这里是:1.12.0, build 8eab29e

tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
 
yum -y install docker-engine;

然后,启动docker,并将其设置为随着机器启动而启动

systemctl start docker.service;
systemctl enable docker.service;

再接着,创建新的网络,跟现有docker主机所在网络桥接

docker network create -d macvlan --subnet=10.0.0.0/24 --gateway=10.0.0.1 -o parent=eth0 MACNET;

最后,再新建一个ip地址为10.0.0.11的docker实例,并证明跟主机所在网络是直通的

docker run --net=MACNET --ip=10.0.0.11 -it --rm alpine /bin/sh;
ping -c 5 10.0.0.1;

上面ping命令证明是能ping通网关的,从别的网段也能ping通10.0.0.11

此外,有个地方比较疑惑:本来跟驱动macvlan一起的还有个驱动叫ipvlan,但是在这里只有macvlan能用,ipvlan就不行,报找不到这个驱动!
我知道了,貌似是因为CentOS7.2的kernel 3.10只支持macvlan,还不支持ipvlan

分类: tips 标签:

怎样在CoreOS里设置控制台自动登录

2016年7月17日 没有评论

公司的CoreOS让我给玩儿坏了,网络不通,没法远程连。而控制台登录帐号都没有密码,所以没法等卢。网上找了下,找到个解决方案:让系统启动后core用户自动登录到tty1。具体步骤如下:

  1. 在控制台按Ctrl+Alt+Del,或者按电源重启机器
  2. 进入grub界面时按字母键’e’
  3. 在以”linux$”开头的最后一行的末尾加上” coreos.autologin=tty1″
  4. 再按Ctrl+X或F10启动机器,系统会用core用户自动登录到控制台tty1
分类: Operation System 标签:

linux下用vnc连vm实例要密码的问题

2016年7月16日 没有评论

环境:CentOS 6.x,kernel 2.6.32-358.el6.x86_64,qemu-kvm-0.12.1.2-2.479.el6_7.3,libvirt-0.10.2-54.el6_7.3,tigervnc-1.1.0-18.el6
缘起:
有个vm,是直接下载的bitnami的vm文件跑起来的,缺省没有开启sshd,当然也没有配串口直连,所以只能想办法从宿主机用vnc客户端来连,于是,本地用ssh -X来连宿主机,然后再宿主机上不论是用vncviewer,还是virt-viewer,还是virt-manager,连此vm时都提示要密码,virsh dumpxml了vm的配置文件看,vnc项也没有密码呀?随后再发现其他的vm用vnc客户端连同样需要密码,于是意识到这个跟特定的vm无关,考虑到系统的问题,于是

yum install tigervnc-server

装上vnc server,执行vncserver,提示设定密码,于是设定之。再然后用这个密码和vnc客户端软件一起用,果然就连上了vm。

分类: Operation System 标签:

oh-my-zsh支持中文

2016年7月2日 没有评论
vim ~/.zshrc

把以下这句的注释去掉(前面的”#”号去掉)

export LANG=en_US.UTF-8

重新登录,即解决

分类: tips 标签:

用Linux在两个私网之间打洞

2016年6月25日 没有评论

http://wiki.haw-haw.org/dig_tunnel_between_two_private_nets

分类: tips 标签:

find prime within a range by using bash

2016年5月28日 没有评论

用bash找出10000到20000之间的所有质数

#!/bin/bash
for (( i=10000; i<20000; i++ ))
do
    k=$(echo "sqrt($i)" | bc)
    for (( j=2; j<=$k; j++ ))
    do
#        echo "i=$i;j=$j;k=$k"
        [[ $(($i%$j)) -eq 0 ]] && break
    done
    [[ $j -gt $k ]] && echo -n "$i "
done
echo "are prime"
分类: Programe 标签:

lvm可以直接resize根分区了

2016年3月5日 没有评论

还是很长知识滴。一般来讲,感觉要动/分区,肯定得进rescue模式,然后把/给umount掉后才能做,但实际上,今天,我直接在线resize2fs了。具体情况是这样滴:
一台kvm从CloudStack迁到OpenStack上,原来的空间是5G,而新的是80G!

fdisk /dev/vda;

将多出的空间新建一个分区/dev/vda3

lvm pvcreate /dev/vda3;
lvm vgdisplay; # 查看vg的name,并注意"Free  PE"的值
lvm vgextend "VolGroup" /dev/vda3;
lvm lvdisplay; # 查看/的lvm的名字,这里是/dev/VolGroup/lv_root,并注意观察"Current LE"的值
lvm lvresize -l 20225 /dev/VolGroup/lv_root; # 这里的20225是上面"Free  PE"和"Current LE"之和
resize2fs /dev/VolGroup/lv_root;
分类: Operation System 标签: