iptables基础笔记
实现IP转发的功能
echo 1 > /proc/sys/net/ipv4/ip_forward
对iptables配置文件的理解:
/etc/sysconfig/iptables下记录的规则是从下到上读顺序读的。所以允许要在拒绝上面。
而在终端下执行的语句则:先拒绝 再允许。
如果是部署远程的防火墙设备,一定要在计划任务中设置,定时关闭防火墙(建议5分钟关闭一次),否则你会很痛苦;
*/5 * * * * /etc/init.d/iptables stop
屏蔽单个IP的命令
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables-save 与service iptables save区别
iptables防火墙规则的保存与恢复
iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载
使用命令iptables-save来保存规则。一般用
iptables-save > /etc/sysconfig/iptables
生成保存规则的文件 /etc/sysconfig/iptables,
也可以用
service iptables save
它能把规则自动保存在/etc/sysconfig/iptables中。
当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。
-m state 指定包的状态
设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables命令参数解释
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
“-i” 表示接口。不过,-i 和 -o 都表示接口,-i 表示输入时的接口,而 -o 特指输出用的接口。
-A和-I。其中-A是添加到规则的末尾;
-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。
删除指定规则
先用iptables -L -n –line-numbers 找出规则的序号
[root@tomcat ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:23
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:138:140
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
如:删除OUTPUT链的第一条规则
iptables -D OUTPUT 1
如果:OUTPUT 是默认策略为:DROP,要开放给10.0.2.0/24是网段访问,则要添加
iptables -A OUTPUT -d 10.0.2.0/24 -j ACCEPT
iptables 预设的两个主要的 table ,各个table里面的chains与各个chains所代表的意义
filter 为预设的 Table,里头预设的链有:
o INPUT:为来自外部,想要进入主机的封包;
o OUTPUT:为来自主机,想要离开主机的封包;
o FORWARD:为主机内部网域与外部网域的封包(不论进或者出),但该
封包不会进入主机。
还有 nat 这个 table:
o PREROUTING:进行路由之前的封包传送过程
o OUTPUT:离开主机的封包传送过程;
o POSTROUTING:已经经过路由了,然后才进行的过滤规则。
禁ping
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
接受dns的请求
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
对REJECT与DROP的理解
我们来举一个例子,让各位读者更直观地理解这两个拒绝动作的不同之处。比如有一天您正在家里看电视,突然听到有人敲门,您透过防盗门的猫眼一看是推销商品的,便会在不需要的情况下开门并拒绝他们(REJECT)。但如果您看到的是债主带了十几个小弟来讨债,此时不仅要拒绝开门,还要默不作声,伪装成自己不在家的样子(DROP)。
规则链的默认策略拒绝动作只能是DROP,而不能是REJECT。
-j LOG 在/var/log/messages将记录相应的日志
Oct 30 16:36:54 tomcat kernel: IN=eth1 OUT= MAC=08:00:27:b2:e4:b3:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=136 TOS=0x00 PREC=0x00 TTL=64 ID=2074 PROTO=TCP SPT=57748 DPT=22 WINDOW=65535 RES=0x00 ACK PSH URGP=0
配置文件各表格式:
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*filter
:INPUT ACCEPT [404:19766]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [530:43376]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*mangle
:PREROUTING ACCEPT [451:22060]
:INPUT ACCEPT [451:22060]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [594:47151]
:POSTROUTING ACCEPT [594:47151]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [3:450]
:OUTPUT ACCEPT [3:450]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
我们来解释一下这个输出格式。
#后面的是注释。
表都以*
每个表都包含链和规则,
链的详细说明是:
[
每个表的描述都以关键字COMMIT结束,它说明在这一点,就要把规则装入内核了。
Table
Table () Explanation (注释)
表名:nat
注释:nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行 的。属于一个流的包只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自 动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就 是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地 址。POSTROUTING链在包就要离开防火墙之前改变其源地址。
表名: mangle
注释:这个表主要用来mangle数据包。我们可以改变不同的包及包 头的内容,比如 TTL,TOS或MARK。 注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙 内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT和
表名:FORWARD
注释:PREROUTING在包进入防火墙之后、路由判断之前改变 包,POSTROUTING是在所有路由判断之后。
OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地 之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判 断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地 址。NAT是在nat表中操作的。
表名:filter
注释:filter表是专门过滤包 的,内建三个链,可以毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。
上面介绍了三个不同的表的最基本的内容。你应该知道它们的使用目的完全不同
–sport –dport
使用服务名或端口号,但名字必须是在/etc/services 中定义的,因为iptables从这个文件里查找相应的端口号。(建议使用端口)
用一条规则写多个端口
-A INPUT -p udp -m multiport --dports 53,80,443 -j ACCEPT
用一条规则写IP范围
-A INPUT -m iprange --src-range 126.244.57.130-126.244.57.140 -j ACCEPT
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:iptables基础笔记
本文作者:wangzhirui
发布时间:2019-08-21, 11:21:11
最后更新:2025-02-27, 02:04:04
原始链接:https://wangzhirui.com/2019/08/21/iptables基础笔记/转载请保留原文链接及作者。