iptables设置访问规则
一、简介
iptables是一个很强大的设置防火墙的工具,可以使用它来限制所有对本机的访问,允许特定的主机、特定的端口才能访问本机,还能设置那些协议能够访问本机。总之,很强大,也很简单。
二、filter chain原理简述
在开始之前,先看一下iptables的filter chain是如何工作的:
注释:当Input进来之后,先通过first chain,如果符合直接本机接收;不符合传给second chain,依次到最后一个chain,着了third不一定是最后的chain,在最后chain都不符合就将包丢弃,符合的交给下层处理。
三、综合例子
通过下面的例子进行说明:
按箭头顺序来说明:
- 查看当前iptables配置好了的规则的命令。
- 拒绝所有的INPUT(访问),这里说明任何外来的主机都不能访问本机。
命令及详解:
iptables -P INPUT DROP
# -P:--policy(策略),chain target(过滤目标),所有的输入(INPUT)就是要过滤的目标。
# DROP:表示丢弃所有输入的数据包,不接受任何数据请求(拒绝所有访问),这个所有是相对的,在我们规则之内定义接收还是接收的。
- 指向两行数据,这里表示允许192.168.1.113这个ip地址访问。
命令及详解:
iptables -A INPUT -p tcp -s 192.168.1.113 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.1.113 -j ACCEPT
# -A:--append chain,添加一条过滤规则,这里是INPUT,还有OUTPUT、FORWARD。
# -p:--protocol,表明协议。例如tcp、udp,icmp
# -s:--source,源地址。接ip地址
# -j:--jump target,当这条规则符合时,直接跳转到目标,不再进行下一条chain。目标有:ACCEPT、DROP、FORWARD、QUEUE
- 表示允许icmp协议type=8,code=0的访问,即ping。
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j ACCEPT
这里只是在icmp协议后面指定那个type和code
- 表示允许icmp协议type=11,code=0的访问,即traceroute。
iptables -A INPUT -p icmp --icmp-type 11 -s 0/0 -j ACCEPT
这里只是在icmp协议后面指定那个type和code
- 表示可以转发数据包
- 表示可以发送数据包
四、其他使用
l 删除某条规则:当需要删除某条规则时,有2种方法:
- 根据列表序号来删除。规则是有一个序号的,通过:
iptables -L -n -line-number
来查看序号,不过本人尝试了并没成功。知道序号之后通过:
iptables -D ”number“ 来删除
- 根据规则内容来删除。使用
iptables -S
来查看规则
然后通过:
iptables -D “content -A这类不需要写” 来删除,例如:
iptables -D INPUT -s 192.168.1.113/32 -p tcp -j ACCEPT 来删除本条规则
l 指定端口
通过 –dport “port” 来指定端口
l 保存规则
iptables-save
可以将规则保存到一个文件中,例如:
iptables-save /etc/iptables.rules
保存好之后去网卡文件(/etc/network/interface)中指定