iptables 的简单应用

  好久没有写博客了,之前的 VPS 到期了也没有续费,现在又要重新开始折腾,趁着这个机会做一下笔记。首先我们来通过配置 iptables 限制外部对我们的访问。

iptables 和 ip6tables 是 liunx 上用于IPv4/IPv6包的过滤和NAT的工具,我们可以通过配置 iptables 来实现防火墙的功能。具体用法可以使用 man iptables 进行查看,这里来讲一下一些简单的使用。

使用

1. 对已有规则进行查看

使用方法: iptables --list [chain]

示例:

1
2
3
4
5
# 列出所有规则
sudo iptables -L

# 列出 INPUT 策略链的规则
sudo iptables --list INPUT

2. 清空已有规则

使用方法:iptables --flush [chain]

1
2
3
4
5
# 清空所有规则
sudo iptables -F

# 清空 OUTPUT 策略链的规则
sudo iptables --flush OUTPUT

3. 添加规则链策略

使用方法: iptables --policy chain target

示例:

1
2
3
4
5
6
7
8
# 接受所有接收的包
iptables -P INPUT ACCEPT

# 丢弃所有转发的包
iptables -P FORWARD DROP

# 丢弃所有发出的包
iptables -P OUTPUT DROP

4. 添加一个或多个规则在策略链的末尾

使用方法: iptables --append chain rule-specification

示例:

1
2
3
# 接受22端口接收和发出的tcp包
sudo iptables -A INPUT -p tcp --dport 22 ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 ACCEPT

5. 保存和恢复规则

通常情况下,重启之后 iptables 的规则就会清空,我们可以通过 iptables-saveiptables-restore 来保存和恢复规则。

示例:

1
2
3
4
5
# 保存规则
sudo iptables-save > iptables.rules

# 恢复规则
sudo iptables-restore < iptables.rules

实例

接下来就是使用上面这些操作给自己的服务器弄一个简单的防火墙,写成脚本执行:

1
2
3
4
5
6
7
8
#!/bin/sh

sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
sudo iptables -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --sport 22,80,443 -j ACCEPT

注意 :不要手动执行上面的命令,除非你是直接在机器上操作的,否则你的ssh会直接断开,因为前四行会把你所有的包都丢弃了。22端口是ssh的默认端口,如果有修改过ssh端口也应该将22换成你修改的端口。

上面这一小段对于静态博客完全够用了,如果有其他的需求也可以再深入研究一下。

参考资料

9个常用iptables配置实例