防火墙再不学就没法深入学习更多东西了
首先纠正自己一个误解
在使用iptables过滤特定端口的数据包时,我喜欢使用在线端口扫描检测我的操作结果,结果检测都是未开放,原来能检测到,不仅需要防火墙允许通过,还要有监听的程序,后通过Apache监听特定端口&在线端口扫描检测操作结果
除非你的vps可以随时重装系统,或者可以断网后通过其他方式访问,否则不要轻易尝试
参考
Nftables HOWTO 中文翻译
iptables文档
看了那么多iptables的教程,这篇教程还是比较全面易懂的
iptables详细教程:基础、架构、清空规则、追加规则、应用实例
Ubuntu_IptablesHowTo
鸟哥的Linux 私房菜-- Linux 防火墙与NAT 服务器
保存iptable规则并开机自动加载
环境
Ubuntu 14.04 vps
注:腾讯云有额外的安全组,需要在控制面板里打开,不然配置了防火墙也达不到目的
iptables
安装
apt-get install iptables
结构
iptables的结构:iptables -> Tables表 -> Chains链 -> Rules规则
1. Table表&Chains链
鸟哥的Linux私房菜——iptables 内建各表格与链的相关性1.1 Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
- INPUT链 – 处理来自外部的数据。
- OUTPUT链 – 处理向外发送的数据。
- FORWARD链 – 将数据转发到本机的其他网卡设备上。
1.2 NAT表
NAT是 Network Address Translation 的缩写, 这个表格主要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与 Linux 主机后的局域网络内计算机较有相关。
-
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
类似与路由器向lan发送数据 -
POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
把lan的数据发到公网上去 - OUTPUT链 – 处理本机产生的数据包
1.3 Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
- PREROUTING
- OUTPUT
- FORWARD
- INPUT
- POSTROUTING
1.4 Raw表
Raw表用于处理异常,它具有2个内建链:
- PREROUTING chain
- OUTPUT chain
2. Rules规则
参见iptables语法
iptables语法
iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 操作]
-t 表名 不写默认为Filter
1. 命令选项
命令选项2. 规则
2.1 添加iptables规则
可以使用iptables -A命令追加新规则,新的规则将追加到链尾。
如果,最后一条规则用于丢弃(DROP)所有数据包,则使用-A参数添加新规则,无效,可以使用-I在指定位置或开头加
语法
ptables [-t 表名] -A 链名 条件匹配 -j 操作
条件匹配的基本参数
-
-p 协议(protocol)
指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。
可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
还可以使用–protocol参数代替-p参数 -
-s 源地址(source)
指定数据包的源地址
参数可以使IP地址、网络地址、主机名
例如:-s 192.168.1.101指定IP地址
例如:-s 192.168.1.10/24指定网络地址
如果不指定-s参数,就代表所有地址
还可以使用–src或者–source -
-d 目的地址(destination)
指定目的地址
参数和-s相同
还可以使用–dst或者–destination -
-i 输入接口/网卡(input interface)
例如:-i eth0指定了要处理经由eth0进入的数据包
如果不指定-i参数,那么将处理进入所有接口的数据包
如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
还可以使用–in-interface参数 -
-o 输出(out interface)
指定了数据包由哪个接口输出
如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
如果出现! -o eth0,那么将从eth0以外的接口输出
如果出现-i eth+,那么将仅从eth开头的接口输出
还可以使用–out-interface参数
条件匹配的扩展参数,注意是两个--
对规则有了一个基本描述之后,有时候我们还希望指定端口、TCP标志、ICMP类型等内容。
-
--sport 源端口(source port)
针对 -p tcp 或者 -p udp
缺省情况下,将匹配所有端口
可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。
/etc/services文件描述了上述映射关系。
从性能上讲,使用端口号更好
使用冒号可以匹配端口范围,如”–sport 22:100″
还可以使用”–source-port” -
--dport 目的端口(destination port)
针对-p tcp 或者 -p udp
参数和-sport类似
还可以使用”–destination-port” - --tcp-flags TCP标志 针对-p tcp
可以指定由逗号分隔的多个参数
有效值可以是:SYN, ACK, FIN, RST, URG, PSH
可以使用ALL或者NONE - --icmp-type ICMP类型 针对-p icmp
- --icmp-type 0 表示Echo Reply
- --icmp-type 8 表示Echo
-j 操作
指定了当与规则(Rule)匹配时如何处理数据包
可能的值
- ACCEPT:允许数据包通过。
- DROP:直接丢弃数据包,不给出任何回应信息。
- REJECT:拒绝数据包通过,必须时会给数据发送端一个响应信息。
- LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
- QUEUE:防火墙将数据包移交到用户空间
- RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)
2.2 删除iptables规则
iptables [-t 表名] -D 链名 序号
示例
#删除所有规则
root@VM-10-194-ubuntu:/home/ubuntu# iptables -F
#查看规则
root@VM-10-194-ubuntu:/home/ubuntu# iptables -L
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
#添加规则
root@VM-10-194-ubuntu:/home/ubuntu# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#查看规则,可看到已加载添加的80端口(dpt:http),在INPUT的一个位置,序号就是1,按出现的次序,序号依次为1,2,3...
root@VM-10-194-ubuntu:/home/ubuntu# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
#删除INPUT的序号1规则
root@VM-10-194-ubuntu:/home/ubuntu# iptables -D INPUT 1
#再查看规则,已删除
root@VM-10-194-ubuntu:/home/ubuntu# iptables -L
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
2.3 生效&保存规则
规则添加后就立即生效了
添加的规则,重启之后就消失了
永久生效方法
把规则保存到一个文件
开机时自动加载文件
网上推荐的开机自动加载,不知为何在我的vps上都不好使
手动方法
保存# iptables-save > /etc/iptables/rules.v4
恢复# iptables-restore < /etc/iptables/rules.v4
利用了bash的重定向,/etc/iptables/rules.v4为自定义的文件
ipv为ip6tables-save ip6tables-restore
使用iptables-persistent
# 安装
apt-get install iptables-persistent
# 更改配置后,保存,开机会自动加载
service iptables-persistent save
2.4 注
nftable
安装
apt install nftables
先省略,需要再继续学
网友评论