ubuntu iptables防火墙指南

2019-11-26 16:40:58 浏览数 (1)

本文由腾讯云 社区自动同步,原文地址 https://stackoverflow.club/article/iptables_in_ubuntu/

iptables介绍

netfilter/iptables是内核集成的,不存在start/stop或者禁用的说法。可以用iptables命令创建过滤规则。(现在较新的内核中已经默认集成,无需单独安装)

而ufw则是ubuntu上简化iptables配置的工具,其定义了一系列的规则并加入到iptables中。所以在ufw启用的情况下,你能在iptables规则中看到一系列的ufw类字样。这些具体的由ufw定义的规则在/etc/ufw/*.rules下。

以下适合于Ubuntu 16.04.5 LTS

基本命令

查看帮助:

代码语言:txt复制
iptables -h

查看过滤规则

代码语言:txt复制
sudo iptables -vnL --line-numbers
  • -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名
  • -v:显示详细信息
  • –line-numbers:给规则标上数字,这个在删除规则时很有用

同一个chain,从上到下进行匹配,所以num很重要;

创建一个新的iptables规则,不会影响现有的连接;

保存创建好的规则到文件

代码语言:txt复制
iptables-save > /etc/iptables.up.rules

从文件中恢复规则

代码语言:txt复制
/sbin/iptables-restore < /etc/iptables.up.rules

也可以把上条命令添加到/etc/rc.local,在系统重启时恢复规则

完整命令规则

代码语言:txt复制
iptables [-t table] command chain [match] [-j target]

以下是各段命令主要参数的解释。

-t table,table有四个选项,默认为filter:

  • filter:一般的过滤功能,默认的table
  • nat:用于NAT功能(端口映射,地址映射等)
  • mangle:用于对特定数据包的修改
  • raw:主要用于配合NOTRACK的响应
  • security:用户强制访问控制(MAC)网络规则

command,定义规则写入方式:

  • -P:定义链的默认规则(所有其它规则都没有匹配到的数据包,将按照默认规则来执行)
  • -A:追加,在当前链的最后新增一个规则
  • -I num:插入,把当前规则插入为第几条
  • -R num:Replays替换/修改第几条规则
  • -D num:删除,明确指定删除第几条规则 num要放到chain之后,见后面的应用实例。

chain,netfilter可以在五个位置进行过滤:

  • PREROUTING (路由前)
  • INPUT (数据包流入口)
  • FORWARD (端口转发)
  • OUTPUT(数据包出口)
  • POSTROUTING(路由后)

match:匹配规则,常用的规则有以下几种,可以并列使用多种匹配规则:

  • -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP,逗号分隔多个协议,ALL是确实设置,!表示反向匹配)
  • -s:匹配源地址ip或ip段(IP或IP/MASK,!表示反向匹配)
  • -d:匹配信息包的目的地IP地址(!表示反向匹配)
  • -i:流入网卡
  • -o:流出网卡
  • –dport:目标端口(两个短行)
  • –sport:源端口
  • –state:连接状态
  • -m:显式扩展以上的规则(即可以匹配多个状态、端口等)

target:进行的操作/响应,常见的有以下几种:

  • DROP(悄悄丢弃)
  • REJECT(明示拒绝)
  • ACCEPT(接受)
  • MASQUERADE(源地址伪装)
  • REDIRECT(重定向)
  • MARK(打防火墙标记的)
  • RETURN(返回)

实际使用范例

开放某个tcp端口

代码语言:txt复制
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

删除某条规则

这里删除的是规则1

代码语言:txt复制
sudo iptables -t filter -D FORWARD 1

添加一条nat记录

代码语言:txt复制
sudo iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -j MASQUERADE

保存和恢复iptables

代码语言:txt复制
sudo iptables-save > ./iptables.bak
sudo iptables-restore < ./iptables.bak

参考资料

写的比较好的博客,适合入门

适合入门之后的深入

0 人点赞