iptalbes 的三个表
filter 这个表主要用于过滤包的,是系统预设的表,这个表也是我用的最多的。内建三个链 INPUT、OUTPUT 以及 FORWARD。
INPUT 作用于进入本机的包 OUTPUT 作用于本机送出的包 FORWARD 作用于那些跟本机无关的包
nat 主要用处是网络地址转换,也有三个链。 PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT 链改变本地产生的包的目的地址。POSTROUTING 链在包就要离开防火墙之前改变其源地址。该表我用的不多,但有时候会用到。
mangle 这个表主要是用于给数据包打标记, 然后根据标记去操作哪些包。这个表几乎不怎么用。除非 你想成为一个高级网络工程师,否则就没有必要花费很多心思在它上面。
iptables 基本语法
(1) 查看规则以及清除规则
iptables -t nat -nvL
-t 后面跟表名, -nvL 即查看该表的规则,其中-n 表示不针对 IP 反解析主机名, -L 表示列出的意思, 而-v 表示列出的信息更加详细。
如果不加-t ,则打印 filter 表的相关信息,这个和-t filter 打印的信息是一样的。关于清除规则的命令中,用的最多就是:
iptables -F 表示把所有规则全部删除
iptables -Z 表示把包以及流量计数器置零(这个我认为很有用)
(2) 增加/删除一条规则
iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
省略-t 所以针对的是 filter 表。
-A 表示增加一条规则,增加的规则是在最后面的
-I 表示插入一条规则,增加的规则是在最前面的,能让一条规则最优先生效
-D 删除一条规则
后面的 INPUT 即链名称,还可以是 OUTPUT 或者 FORWORD。
-s 后跟源地址(可以是一个 ip 段)
-p 协议( tcp, udp, icmp)
--sport/--dport 后跟源端口/目标端口,必须要和-p 选项一起使用,否则会出错
-d 后跟目的 IP(主要针对内网或者外网 可以是一个 ip 段)
-j 后跟动作( DROP 即把包丢掉, REJECT 即包拒绝, ACCEPT 即允许包)
-i :指定网卡(不常用,但有时候能用到)
iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
【上例中表示,把来自 192.168.1.0/24 这个网段的并且作用在 eth0 上的包放行】
--icmp-type 这个选项要跟-p icmp 一起使用,后面指定类型编号,后面跟 8 指的是能在本机 ping 通其他机器,而其他机器不能 ping 通本机。
iptables -i INPUT -p icmp --icmp-type 8 -j DROP
iptables -I INPUT -s 1.1.1.1 -j DROP
上例表示:插入一条规则,把来自 1.1.1.1 的所有数据包丢掉。
iptables -D INPUT -s 1.1.1.1 -j DROP
删除刚刚插入的规则。注意要删除一条规则时,必须和插入的规则一致,两条 iptables 命令,除了-I 和-D 不一样外,其他地方都一样。
iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
上例表示把来自 2.2.2.2 并且是 tcp协议到本机的 80端口的数据包丢掉。
iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP
这条规则表示,把发送到 10.0.2.34 的 22 端口的数据包丢掉。至于 FORWORD 链的应用我几乎没有用 到过,所以不再举例。
(3) 用编号删除一条规则
有时候你的服务器上 iptables 过多了,想删除某一条规则时,又不容易掌握当时创建时的规则。其实 有一种比较简单的方法:
iptables -nvL --line-numbers 显示所有规则并在行首显示编号num
iptables -D INPUT 1 根据num编号删除规则
(4) iptables 预设策略:
-P(大写)选项,表示预设策略。用法如下:
iptables -P INPUT DROP 表示预设丢弃所有入站的数据
-P后面跟链名,策略内容为 DROP 或者为 ACCEPT,默认是 ACCEPT。注意:如果你在连接远 程服务器,千万不要随便敲这个命令,因为一旦敲完回车你就会断掉。
iptables -P INPUT ACCEPT 使预设规则恢复成原始状态,而不能使用-F 参数清楚。
nat表的应用路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
第一个命令涉及到了内核参数相关的配置文件,它的 目的是为了打开路由转发功能,否则无法实现我们的应用。
第二个命令则是对 nat 表做了一个 IP 转发的操作, -o 选项后跟设备名,表示出口的网卡, MASQUERADE 表示伪装的意思。
保存及备份规则
/etc/init.d/iptables save 保存规则,防火墙规则保存在了 /etc/sysconfig/iptables 可以查看一下这个文件
备份 /etc/sysconfig/iptables 文件即可备份防火墙规则
下面介绍给你一个用来备份防火墙规则的命令:
iptables-save > myipt.rule
使用 iptables-save 命令重定向到一个文件里。要想恢复这些规则使用下面的命令即可:
iptables-restore < myipt.rule
停止防火墙服务
service iptables stop
这样防火墙就失效了,但是一旦重新设定规则后(哪怕只有一条),防火墙服务会自动开启。