【ubuntu】 防火墙iptables怎么用的?

简介

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强劲的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

iptables处理流程

【ubuntu】 防火墙iptables怎么用的?

table 的顺序实则并不十分重大,特定的功能只能在特定的 table 中完成, chain 一般只关心 INPUT 是进入流量, output 是外出流量即可。 chain 内 rule 的顺序是用户自己控制的。 rule 由两部分组成 match 和 target , match 指定了匹配条件,例如: -p tcp –dport 6379 -m connlimit –connlimit-above 5 。 target 指定了 packet 匹配时的操作,常用的有 ACCEPT REJECT DROP LOG 等,有的 target 会终止 chain 匹配后面的 rule ,有的则不会。例如目标是 ACCEPT 会终止 , LOG 则不会。

对于请求,传入Filter,第一区分是INPUT(从外部主机访问本机)、还是OUTPUT(反之)、FORWARD
查看相应的Chain规则,从上到下开始匹配,访问的端口的状态
ACCEPT则放行,并退出Chain,DROP则禁止改请求访问
若访问的规则不在chain的端口规则中,则进行默认的规则处理

安装

判断是否安装

(1)$service iptables
提示unrecognized service则没有安装防火墙服务

(2)Ubuntu 默认有装iptables,可通过dpkg -l或which iptables确认

  • 安装iptables
    添加脚本到/etc/init.d/,脚本如下
    提议将其保存为/etc/init.d/iptables,然后chmod +x /etc/init.d/iptables 添加运行权限。

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: iptables
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop iptables firewall
# Description: Start, stop and save iptables firewall
### END INIT INFO 
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

用法命令

用法例子

  • 查看iptables规则
    sudo iptables -L

  • 查看iptables规则,以数字形式
    sudo iptables -L -n

  • 查看iptables规则的序号,用于删除规则参考
    sudo iptables -L -n –line-numbers

  • 停止iptables,
    iptables -F 清空所有配置效果等同于停止
    iptables -X 清除预设表filter中使用者自定链中的规则
    iptables -Z

  • 配置,禁止进,允许出,允许回环网卡
    iptables -P INPUT DROP
    iptables -A OUTPUT -j ACCEPT
    iptables -A INPUT -i lo -j ACCEPT

  • 允许ping
    iptables -A INPUT -p icmp -j ACCEPT

  • 允许ssh
    iptables -A INPUT -p tcp –dport 22 -j ACCEPT

  • 允许ftp
    iptables -A INPUT -p tcp –dport 21 -j ACCEPT
    iptables -A INPUT -p tcp –dport 20 -j ACCEPT

  • 允许ftp被动接口范围,在ftp配置文件里可以设置
    iptables -A INPUT -p tcp –dport 20000:30000 -j ACCEPT

  • 把smtp设成本地
    iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT -s 127.0.0.1
    iptables -A INPUT -p tcp -m tcp –dport 25 -j REJECT

  • 允许DNS
    iptables -A INPUT -p tcp -m tcp –dport 53 -j ACCEPT
    iptables -A INPUT -p udp -m udp –dport 53 -j ACCEPT

  • 允许http和https
    iptables -A INPUT -p tcp –dport 80 -j ACCEPT
    iptables -A INPUT -p tcp –dport 443 -j ACCEPT

  • 允许已建立的或相关连的通行
    iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

  • 允许某段IP访问本机的所有类型的所有端口
    sudo iptables -I INPUT -s 192.168.2.0/24 -p all -j ACCEPT
    sudo iptables -I INPUT -s 192.168.0.0/16 -p all -j ACCEPT

  • 允许本机127.0.0.1访问自身所有端口
    sudo iptables -I INPUT -s 127.0.0.1 -p all -j ACCEPT

  • 允许某段IP访问本机的TCP 3306端口
    sudo iptables -I INPUT -s 192.168.2.0/24 -p tcp –dport 3306 -j ACCEPT

  • 允许某段IP访问本机的某段TCP端口
    sudo iptables -I INPUT -s 192.168.2.0/24 -p tcp –dport 3306:65525 -j ACCEPT

  • 向所有IP开放ssh的远程连接,这里是已经更改了的19515端口,默认为22端口
    sudo iptables -A INPUT -p tcp –dport 19515 -j ACCEPT

  • 清除单条iptables规则
    sudo iptables -D INPUT(表) 3(规则对应的序号)

  • 修改单条iptables规则,使用 -R,修改INPUT链序号为3的规则为允许,第4条规则为拒绝,丢弃
    sudo iptables -R INPUT 3 -j ACCEPT
    sudo iptables -R INPUT 4 -j DROP

  • 禁止其他未允许的规则访问
    iptables -A INPUT -j REJECT #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
    iptables -A FORWARD -j REJECT

  • 保存iptables规则
    iptables-save > /etc/iptables

  • 保存ipv6 的iptables规则
    sudo ip6tables-save

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容