Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306611
  • 博文数量: 34
  • 博客积分: 1944
  • 博客等级: 上尉
  • 技术积分: 400
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-01 23:22
文章分类

全部博文(34)

文章存档

2010年(2)

2009年(4)

2008年(28)

分类: LINUX

2008-05-08 15:58:24

CentOS 5.1 编译内核 2.6.25.2 以及后续工作

目的: 默认kernel没有把NTFS编译进去,同时也想尝试下编译内核。
系统: CentOS 5.1
内核: 2.6.25.2


开始几次尝试,是看了鸟哥基础篇中的编译内核。
make bzImage modules modules_install
做的,然后发现可能鸟哥书里的内核太老了点,关于devfs新内核没那个选项了。

在HowtoForge上看到一文比较适合我:How To Compile A Kernel - The CentOS Way

在make menuconfig中我把ipv6去掉了。后面带来的问题不少。
make rpm

rpm -ivh
mkinitrd
重启,成功


后续问题:
包括一些服务(hidd,iptables)不能起来,显卡驱动不能起来。

nvidia显卡驱动不能工作,我176的驱动,google(keyword:nvidia 2.6.25)下就发现有个补丁,重新编译下就可以startx了。

hidd服务不能启动,是关于bluetooth的,我没编进来,取消启动就ok了。

iptable出问题了。
a)ipv6tables 不能启动
May  8 10:21:35 localhost modprobe: FATAL: Module ip6_tables not found.
我没有编译ipv6. 所以ipv6tables 需要关闭。
#chkconfig ipv6tables off

b)iptables 不能启动
[root@localhost ~]# service iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules: iptables-restore: line 22 failed
                                                           [FAILED]

配置文件是:
[root@localhost ~]# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

这个问题查了很久,后来  strace iptables-restore /etc/sysconfig/iptables 发现问题。
open("/lib/iptables/libipt_RH-Firewall-1-INPUT.so", O_RDONLY) = -1 ENOENT (No such file or directory)

这个libipt_RH-Firewall-1-INPUT.so我的2.6.25.2的内核没有编译出来(或者可能就没有)。
发现用system-config-securitylevel后这个文件etc/sysconfig/iptables 中就会有 RH-Firewall-1的信息。所以新内核应该不可以用system-config-securitylevel来配置iptabels.

所以应该先去掉RH-Firewall-1,然后我的rules通过iptables命令再加回,iptables命令有点忘记了,先清。

#cp /etc/sysconfig/iptables ~/iptables.back.20080506
#iptables -F
#iptables-save > /etc/sysconfig/iptables

c)ip_conntrack_netbios_n
[root@localhost ~]# service iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[FAILED]

调试/etc/rc.d/init.d/iptables查找问题。
发现:
    # Load additional modules (helpers)
    if [ -n "$IPTABLES_MODULES" ]; then
        echo -n $"Loading additional $IPTABLES modules: "
        ret=0
        for mod in $IPTABLES_MODULES; do
            echo -n "$mod "
            modprobe $mod > /dev/null 2>&1
            let ret+=$?;
        done
        [ $ret -eq 0 ] && success || failure
        echo
    fi

    touch $VAR_SUBSYS_IPTABLES
    return $ret

   
modprobe ip_conntrack_netbios_ns > /dev/null 2>&1

而ip_conntrack_netbios_ns这个文件我没有的,奇怪的是IPTABLES_MODULES这个参数在/etc/rc.d/init.d/iptables我没有找到赋值的地方。原来是在/etc/sysconfig/iptables-config
注释掉。
IPTABLES_MODULES="ip_conntrack_netbios_ns"
好像是配置netbios穿越NAT用的,一般用不到的。
ip_conntrack_netbios_ns 这个模块在make menuconfig 中是IP_NF_NETBIOS_NS。

/etc/rc.d/init.d/iptables restart
[root@localhost ~]# /etc/rc.d/init.d/iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]


OK, 去掉脚本中的调试语句。搞定。现在要做是事情就是把原来系统的iptables规则加上。


Ref 接下去可以用到:
RH-Firewall-1-INPUT在iptales中是个子链,他把INPUT和FORWARD放到一起处理了。CU白老大不推荐这个方法。
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

SSH
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Web 80 and 443.

例如:要允许到防火墙上的端口80的通信,添加以下规则:

iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

这会允许用户浏览通过端口80通信的网站。要允许到安全网站(如 )的访问,你还必须打开端口443。

iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT


阅读(2757) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

zhainx2011-03-28 17:34:49

setup 把默认的防火墙关了就解决你上面说的所有问题了, 然后自己配规则