Ubuntu iptables配置

本文介绍如何在Ubuntu系统上配置iptables防火墙,包括安装、基本配置、常见命令详解及实例演示,帮助读者理解并掌握iptables的基本使用。

配置iptables

Ubuntu默认安装是没有开启任何防火墙的,因此为了服务器的安全,建议大家安装启用防火墙设置。

查看系统是否安装了防火墙:

whereis iptables
iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz
如果默认没有安装,可执行如下语句:

sudo apt-get install iptables

一开始没有配置防火墙的时候,防火墙配置信息如下:

iptables -L -n
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

我先说说我的配置,然后再详解各个命令的意思。

vim /etc/iptables.up.rules
内容如下:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

然后使防火墙开机自启:

vim /etc/network/if-pre-up.d/iptables

添加如下内容:

#!/bin/bash
iptables-restore < /etc/iptables.up.rules

添加执行权限:

chmod +x /etc/iptables.up.rules

(ps:上面的路径可自选)

执行如下语句,即可生效。

iptables-restore < /etc/iptables.up.rules

sh /etc/network/if-pre-up.d/iptables
现在防火墙配置如下:

iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3306
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

iptables详解

允许已建立的连接接收数据:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
开放指定的端口:

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

只允许192.168.1.1的机器进行ssh连接:

iptables -A INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT
限制指定IP访问的办法

限制单个IP的命令:

iptables -I INPUT -s 192.168.1.1 -j DROP
限制IP段的命令:
iptables -I INPUT -s 192.1.0.0/16 -j DROP
iptables -I INPUT -s 192.2.0.0/16 -j DROP
iptables -I INPUT -s 192.3.0.0/16 -j DROP
限制几个段的命令:
iptables -I INPUT -s 192.168.1.0/24 -j DROP
iptables -I INPUT -s 192.168.2.0/24 -j DROP 
限制整个段的命令:
iptables -I INPUT -s 192.0.0.0/8 -j DROP

如果你希望系统在每次重启前将防火墙的设置保存下来,你可以在/etc/network/interfaces文件最后添加如下语句:

pre-up iptables-restore < /etc/iptables.up.rules
post-down iptables-save > /etc/iptables.up.rules

消除默认的规则

这个一定要先做,不然清空后可能会悲剧
iptables -P INPUT ACCEPT

清除预设表filter中的所有规则链的规则

iptables -F
清除预设表filter中使用者自定链中的规则
iptables -X

将规则表计数器清零

iptables -Z

iptables -A和 -I的区别:

首先都是对链添加规则,

-A参数是将规则写到现有链规则的最后;

-I参数默认是将一条规则添加到现有规则链的最前面,当然也可以指定插入到第几行,行数可以用数字来指定,比如说将一条规则添

加到某一条链的第三行,那么原来在第三行的规则就会降到下一行第四行。


小结

维护规则表的命令:

1.iptables (-N)创建一个新规则表
2.iptables (-X)删除一个空规则表
3.iptables (-P)改变内建规则表的默认策略
4.iptables (-L)列出规则表中的规则
5.iptables  (-F)清空规则表中的规则
6.iptables  (-Z)将规则表计数器清零
管理规则表中的规则:
1.iptables  (-A)添加新规则到规则表
2.iptables  (-I)插入新规则到规则表的某个位置
3.iptables  (-R)替换规则表中的规则
4.iptables  (-D)删除规则表中的某条规则

在调试iptables规则时,你也许需要反复修改你的脚本来实现某些特定的功能,这时建议在你的脚本里添加这样几行,以防止重复设

置规则:

# 清除所有规则
iptables -F -t filter
iptables -X -t filter
iptables -Z -t filter
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
# 设置内建规则表的默认策略
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
“-t”选项是“--table”的简写,它指明了你要对哪类规则表进行操作,默认的是指filter。
下面举例说明iptables的部分选项的使用:
指定源地址和目标地址
指定规则操作的源地址  -s 或 --source 或 -src
指定规则操作的目标地址 -d 或 --destination 或 -dst
允许来自192.168.100.0/24的数据包通过

iptables -A INPUT -s 192.168.100.0/24 -d 0.0.0.0/0 -j ACCEPT
“-j”选项是“--jump”的简写,它指明了匹配该条规则的数据包的具体处理方法,可能是ACCEPT、DROP等。
取反:在参数前加“!”号
接受除了来自192.168.100.0/24外的所有的数据包

iptables -A INPUT -s ! 192.168.100.0/24 -d 0.0.0.0/0 -j ACCEPT
指定协议(TCP、UDP或ICMP)
-p 或 --protocol
禁止icmp协议

iptables -A INPUT -p icmp -j DROP
指定接口
指定数据包进入的接口 -i 或 --in-interface
指定数据包送出的接口 -o 或 --out-interface
INPUT规则表中只允许指定-i接口,OUTPUT规则表中只允许指定-o接口,FORWARD表可以指定这两种接口。
允许从eth1进入的数据包

iptables -A INPUT -i eth1 -j ACCEPT
允许从eth0接口送出的数据包
iptables -A OUTPUT -o eth0 -j ACCEPT
转发从eth1进入,eth0送出的数据包
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
TCP/UDP扩展
指定源端口 --sport 或 --source-port
指定目的端口 --dport 或 --destination-port
允许从eth0进入访问到目标端口为21的tcp数据包

iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
允许从eth0进入访问到目标端口为21的udp数据包
iptables -A INPUT -i eth0 -p udp --dport 21 -j ACCEPT
状态匹配
--state state,state...
正如前面我们脚本中用到的,state是用逗号分隔的列表,表示要匹配的连接状态。有效的状态选项包括:INVAILD,表示数据包对应的连接是未知的;ESTABLISHED,表示数据包对应的连接已经进行了双向的数据包传输,也就是说连接已经建立;NEW,表示这个数据包请求发起一个连接;RELATED,表示数据包要发起一个新的连接,但是这个连接和一个现有的连接有关,例如:FTP的数据传输连接和控制连接之间就是RELATED关系。
禁止从eth0进来的NEW状态,也就是禁止来自eth0的新的访问请求

iptables -A INPUT -i eth0 -m state --state NEW -j DROP

“-m”是“--match”的简写。-m选项引出了iptables的state扩展模块,比如mac扩展模块,它实现根据主机网卡的MAC地址进行权限控制

的规则:

iptables -A INPUT -p tcp -m mac --mac-source 01:02:03:04:05:06 -j ACCEPT
扩展模块是iptables体系中的特色,它使得iptables成为一个可扩展的安全体系结构。你可以从这里了解更多关于iptables扩展模块的知识:http://www.iptables.org/document ... tensions-HOWTO.html
§§ 对封包过滤设置的建议
封包过滤实现的是针对安全方面的策略,通常我们遵循“凡是没有明确允许的都是禁止的”这样的原则来设计安全策略:首先禁止所有的东西,然后根据需要再开启必要的部分。
启用路由验证(防止IP地址欺骗)。IP地址欺骗指使用伪装的IP地址作为IP包的源地址对受保护网络进行攻击,防火墙应该能够禁止来自外部网络而源地址是内部IP地址的数据包通过。比如来自你的外网接口eth0新建连接的数据包源地址是你的内部局域网的地址,正常情况下这种现象是不可能的,那么它应当被丢掉。
Linux内核支持防范IP地址欺骗的功能,对于一个接口比如eth0可以这样做:

echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter
对于所有接口:
for f in /proc/sys/net/ipv4/confrp_filter; do
??? echo 1 > $f
done
# 删除所有规则
iptables -F -t filter
iptables -X -t filter
iptables -Z -t filter
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
# 设置内建规则表的默认策略
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#禁止来自Internet到eth0主动发起的访问请求
iptables -A FORWARD ! -i eth0 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT ! -i eth0 -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 61.156.35.114
§§ iptables-save和iptables-restore
iptables设置的规则可以用两个相关的工具iptables-save、iptables-restore来进行存储和恢复。

<think>好的,我需要帮助用户在Ubuntu系统上配置iptables防火墙。首先,我需要回忆一下相关的步骤和注意事项。根据用户提供的引用内容,有三个引用来源,我需要仔细看看这些内容。 首先,引用[1]提到Ubuntu使用iptables作为防火墙,但和CentOS的iptables-services有所不同。安装iptables-persistent可以让规则持久化,这样重启后规则不会丢失。引用[2]给出了安装iptables的命令,以及编辑策略文件的路径,比如/etc/iptables.rules或/etc/sysconfig/iptables。不过要注意,Ubuntu可能默认没有这些文件,需要手动创建或保存规则。引用[3]提到查看当前配置的方法,比如iptables -L命令,以及防火墙的基本概念,比如允许合法流量,阻止非法流量。 接下来,我需要整理配置步骤。首先安装iptablesiptables-persistent,这样可以使用netfilter-persistent来保存规则。然后配置基本规则,比如允许回环接口,允许已建立的连接,开放SSH端口,HTTP/HTTPS等。之后保存规则到文件,并设置开机启动。可能的注意事项包括确保默认策略是DROP或ACCEPT,根据需求调整,以及避免锁定自己导致无法远程连接。 可能用户容易犯的错误是在配置默认策略为DROP时没有先允许SSH端口,导致无法远程登录。需要提醒用户小心处理规则顺序,先允许必要的端口再设置默认策略。另外,保存规则的方式在Ubuntu可能和CentOS不同,需要使用iptables-save和netfilter-persistent命令。 现在需要把这些步骤清晰地写出来,用中文,结构分明,按照安装、配置、保存、启用的顺序。同时生成相关问题,比如如何持久化规则、如何允许特定端口等。确保所有数学公式用$...$,如果有的话,但这里可能不需要。注意引用标记的正确位置,比如在安装iptables-persistent时添加[^1],在编辑策略时引用[^2],在查看配置时引用[^3]。 最后,检查是否遗漏了任何关键点,例如测试规则是否生效,或者如何恢复默认设置。确保步骤正确,没有误导用户,并且引用来源正确对应。可能还需要提到备份现有规则,以防配置错误时恢复。</think>### 如何在 Ubuntu配置 iptables 防火墙 #### 1. 安装 iptables 和持久化工具 - Ubuntu 默认未安装完整的 iptables 工具链,需手动安装: ```bash sudo apt-get install iptables iptables-persistent ``` 安装过程中会提示是否保存当前规则,可选择“是”以备份现有配置[^2]。 #### 2. 查看当前规则 - 查看现有防火墙规则: ```bash sudo iptables -L -n -v ``` 此命令显示过滤表的输入、转发和输出链的详细规则。 #### 3. 配置基本规则 - 清除现有规则(谨慎操作): ```bash sudo iptables -F ``` - 设置默认策略(如默认拒绝所有输入,允许输出): ```bash sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT ``` - 允许回环接口和已建立连接: ```bash sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT ``` - 开放必要端口(如SSH的22端口): ```bash sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT ``` #### 4. 保存规则并启用开机自启 - 手动保存规则到文件: ```bash sudo iptables-save > /etc/iptables/rules.v4 ``` - 启用持久化服务: ```bash sudo systemctl enable netfilter-persistent sudo systemctl start netfilter-persistent ``` 重启后规则会自动加载[^2]。 #### 5. 验证配置 - 重启系统或服务后,检查规则是否生效: ```bash sudo iptables -L -n -v ``` --- ### 注意事项 - **避免锁定远程连接**:配置默认策略前,务必先允许SSH端口,否则可能导致无法远程访问。 - **规则优先级**:规则按顺序匹配,需将常用规则(如允许SSH)放在前面。 - **备份配置**:修改前可通过`iptables-save > backup.rules`备份当前规则。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值