我已经运行了 iptables,因为我可以使用以下命令...
sudo /sbin/iptables sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
但我不能这样做......
服务 iptables 保存 iptables:无法识别的服务
当我重新启动服务器时映射停止,我该如何实际保存这些更改?
谢谢。
答案1
据我所知,Ubuntu 使用联邦水务局在最新版本中,因此很可能没有 SysV 初始化脚本iptables. 如果你觉得不舒服联邦水务局,你可以用它sudo iptables-save > /etc/iptables.rules
来存储当前规则,然后sudo iptables-restore < /etc/iptables.rules
从中调用rc.本地(例如)在启动时恢复规则。
或者,您可以添加自己的初始化脚本iptables作为指定这里:
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: mountvirtfs ifupdown $local_fs
# Default-Start: S
# Default-Stop: 0 6
### END INIT INFO
# July 9, 2007
# James B. Crocker <[email protected]>
# Creative Commons Attribution - Share Alike 3.0 License (BY,SA)
# Script to load/unload/save iptables firewall settings.
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
IPTABLES=/sbin/iptables
IPTABLES_SAVE=/sbin/iptables-save
IPTABLES_RESTORE=/sbin/iptables-restore
IPTABLES_CONFIG=/etc/iptables.conf
[ -x $IPTABLES ] || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_action_begin_msg "Starting firewall"
type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
;;
stop)
log_action_begin_msg "Saving current firewall configuration"
if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
log_action_begin_msg "Flushing ALL firewall rules from chains!"
if $IPTABLES -F ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
log_action_begin_msg "Deleting ALL firewall chains [Warning: ACCEPTING ALL PORT SERVICES!]"
if $IPTABLES -X ; then
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
save)
log_action_begin_msg "Saving current firewall configuration"
if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
force-reload|restart)
log_action_begin_msg "Reloading firewall configuration [Warning: POTENTIAL NETWORK INSECURITY DURING RELOAD]"
$IPTABLES -F
$IPTABLES -X
if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
*)
echo "Usage: /etc/init.d/iptables {start|stop|save|restart|force-reload}"
exit 1
;;
esac
exit 0
答案2
执行 iptables 规则后,该规则将生效。发出重启命令只会将您的 iptables 配置恢复到上次保存的状态。无需重启。
iptables-save
iptables-restore
将规则保存在纯文本文件中,并将在系统启动时由 init.d 脚本恢复。有关详细信息,请参阅 iptables.conf 和 iptables man
答案3
为什么不采用简单的方法呢?在 Debian/Ubuntu 中,您可以:
1-创建你的 iptables 规则
2 - 运行sudo apt-get install iptables-persistent
;它会询问您是否要保存规则并在启动后恢复它们。