iptables Segmentation fault

现象

执行iptables 命令出错

iptables -L
segmentation fault xxxxxx

原因

iptables 版本和内核不兼容,一般出现在新版的linux系统和Docker容器上,或者升级iptables问题。

新版版本包括:Ubuntu18和Debian10

说明

新版Debian和Ubuntu默认是 iptables-nft 

# update-alternatives --set iptables /usr/sbin/iptables-nft
# update-alternatives --set ip6tables /usr/sbin/ip6tables-nft
# update-alternatives --set arptables /usr/sbin/arptables-nft
# update-alternatives --set ebtables /usr/sbin/ebtables-nft

解决

切换成 iptables-legacy

update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternatives --set arptables /usr/sbin/arptables-legacy
update-alternatives --set ebtables /usr/sbin/ebtables-legacy

验证

iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

封装脚本 

iptables-wrapper

#!/bin/sh
set -e

num_legacy_lines=$( (iptables-legacy-save || true; ip6tables-legacy-save || true) 2>/dev/null | grep '^-' | wc -l)
if [ "${num_legacy_lines}" -ge 10 ]; then
    mode=legacy
else
    num_nft_lines=$( (timeout 5 sh -c "iptables-nft-save; ip6tables-nft-save" || true) 2>/dev/null | grep '^-' | wc -l)
    if [ "${num_legacy_lines}" -ge "${num_nft_lines}" ]; then
        mode=legacy
    else
        mode=nft
    fi
fi

update-alternatives --set iptables "/usr/sbin/iptables-${mode}" > /dev/null
update-alternatives --set ip6tables "/usr/sbin/ip6tables-${mode}" > /dev/null

exec "$0" "$@"

优先iptables-legacy

update-alternatives \
   --install /usr/sbin/iptables iptables /usr/sbin/iptables-wrapper 100 \
   --slave /usr/sbin/iptables-restore iptables-restore /usr/sbin/iptables-wrapper \
   --slave /usr/sbin/iptables-save iptables-save /usr/sbin/iptables-wrapper
update-alternatives \
   --install /usr/sbin/ip6tables ip6tables /usr/sbin/iptables-wrapper 100 \
   --slave /usr/sbin/ip6tables-restore ip6tables-restore /usr/sbin/iptables-wrapper \
   --slave /usr/sbin/ip6tables-save ip6tables-save /usr/sbin/iptables-wrapper

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值