还是自己刚开始自己编译内核没经验,iptables的很多问题都是因为没有编进内核或模块导致的。
除了RH-Firewall-1-INPUT是个自定义的子链可能还有点用,其他的都iptables部分应该都可以忽略了。 等我再去编译下内核再来说明。
有问题的机器。
[root@iptablenotworkOS~]# lsmod | grep tables
ip_tables 16656 1 iptable_filter
x_tables 19844 2 ip_tables,xt_tcpudp
工作正常的机器。
[root@CentOS5 iptables]# lsmod | grep tables
ip6_tables 18181 0
ip_tables 17029 1 iptable_filter
x_tables 17349 5 ip6_tables,xt_state,ip_tables,ipt_REJECT,xt_tcpudp
可以看到很多模块没有编译才导致了iptables的问题。 我再去编译一次。
编译了好几次才成的,怪自己没好好看说明。内核编译好了后面还是出了不少问题,调试脚本找原因和解决问题,觉得对大家比较有用。
目的: 默认kernel没有把NTFS编译进去,同时也想尝试下编译内核。
系统: CentOS 5.1
内核: 2.6.25.2
开始几次尝试,是看了鸟哥基础篇中的编译内核。
make bzImage modules modules_install
做的,然后发现可能鸟哥书里的内核太老了点,关于devfs新内核没那个选项了。听说鸟哥第二版和vbird网站都有更新了。
在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的内核没有编译出来(或者可能就没有)。
但是其实这个.so文件没有也可以正常工作的。后来我在H-Firewall-1-INPUT正常的CentOS5.1上也没看到这个.so文件。
RH-Firewall-1-INPUT是个自定义的子链。
可以通过
#iptables -N RH-Firewall-1-INPUT
#service iptables save
#service iptables restart
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, 去掉脚本中的调试语句。搞定。
阅读(1207) | 评论(0) | 转发(0) |