Ubuntu Iptables 配置

本文详细介绍了如何在Ubuntu系统下使用Iptables防火墙进行安全配置,包括预设规则、添加规则及自动调用和保存设置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Iptables是一个防火墙,所有的Ubuntu官方发行版(Ubuntu,Kubuntu,Xubuntu)都默认自带Iptables。当你安装完Ubuntu以后,Iptables就已经装好了,但是默认设置是允许所有的通讯。从Ubuntu 8.04版本开始,Ubuntu有了一个防火墙配置的GUI工具UFW。

Ubuntu下跟其他linux系统的操作基本相同,可能略有不同。

iptables命令的选项很多,多使用man吧。

查看本机设置

查看本机的Iptables设置使用下面的命令:

sudo iptables -L -n
刚安装完的纯净的ubuntu,查看一下防火墙设置的话,是这样没有任何规则的:
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
清除规则

不管有没有配置过规则,在重新进行配置之前,需要先清除规则:

sudo iptables -F        //清除预设表filter中的所有规则链的规则
sudo iptables -X        //清除预设表filter中使用者自定链中的规则
设定预设规则
这样就清除干净了,下面开始配置,先设定预设规则。
对于防火墙的设置,有两种策略:一种是全部通讯口都允许使用,只是阻止一些我们知道的不安全的或者容易被利用的口;另外一种,则是先屏蔽所有的通讯口,而只是允许我们需要使用的通讯端口。

sudo iptables -P INPUT DROP //一旦执行,将马上阻断所有进站数据,远程配置时,注意顺序问题(ssh先加入允许)
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
注意-P中的P需要大写,表示Protocol。

可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过。
当超出了IPTABLES里filter表里的两个链规则(INPUT、FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃)。应该说这样配置是很安全的,我们要控制流入数据包。
而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在这个规则里的包怎么办呢,那就是通过。
添加规则

先来添加INPUT规则,因为INPUT预设的是DROP,所以要添加ACCEPT规则。

首先是22端口,这个的用处地球人都知道。

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
给Web服务器开启80端口

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果你还做了其他的服务器,需要开启哪个端口,照写就行了。
上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP

允许icmp包通过,也就是允许ping

sudo iptables -A INPUT -p icmp -j ACCEPT

允许loopback!(不然会导致DNS无法正常关闭等问题)

sudo iptables -A INPUT -i lo -p all -j ACCEPT

对于OUTPUT规则,因为预设的是ACCEPT,所以要添加DROP规则,减少不安全的端口链接。

sudo iptables -A OUTPUT -p tcp --sport 31337 -j DROP
sudo iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会。

我们还可以把规则限制到只允许某个IP:

sudo iptables -A INPUT -s 192.168.0.18 -p tcp --dport 22 -j ACCEPT
这表示只允许192.168.0.18的机器进行SSH连接。
如果要允许一个IP段,可以使用下面的写法:

sudo iptables -A INPUT -s 192.168.0.1/255 -p tcp --dport 22 -j ACCEPT
这表示允许192.168.0.1/255IP段的机器进行连接。
但是,注意我们前面已经添加一条规则来允许所有IP连接22端口,需要把这条规则删除掉。
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控
开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)

sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丢弃坏的TCP包

sudo iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,允许每秒100个

sudo iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包(在前面只允许ICMP包通过,在这里作限制)
sudo iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
Iptables的保存和调用
现在该提一下保存的问题了。
我们用命令来添加的设置,都不会自动保存,一旦退出,设置都将不存在了,需要手动去保存一下。

sudo iptables-save > /etc/iptables.up.rules
调用Iptables设置
sudo iptables-restore < /etc/iptables.up.rules
由于每次开机或重启后都需要去调用一次,我们把它设置自动的,执行
sudo vim /etc/network/interfaces

auto ath0
iface ath0 inet dhcp
后面,加上
pre-up iptables-restore < /etc/iptables.up.rules //开机时自动调用已经存在的Iptables设置
post-down iptables-save > /etc/iptables.up.rule  //关机时自动保存当前的Iptables设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值