代码改变世界

Linux防火墙介绍和iptables常用命令

2020-08-31 15:33  猎手家园  阅读(447)  评论(0编辑  收藏  举报

一、Linux防火墙介绍
IPTABLES由四个表(raw表、mangle表、nat表、filter表)和五个链(INPUT链、OUTPUT链、FORWARD链、PREROUTING链、POSTROUTING链)组成。
1、规则表分为以下4种
1)filter表:用来对数据包进行过滤,表内包含三个链,即:INPUT,FORWARD,OUTPUT
2)Nat表:nat表主要用来修改数据包的ip地址、端口号等信息。包含三个链,即PREROUTING,POSTROUTING,OUTPUT
3)Mangle表:用来修改数据包的TOS、TTL,或者为数据包设置MARL标记,实现流量×××,策略路由等高级应用,包含五个链,PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
4)Raw表:用来决定是否对数据包进行状态跟踪,包含两个链:即OUTPUT,PREROUTING

2、规则链分为以下5种
1)INPUT链:当收到访问防火墙本机地址的数据包(入站),应用此链中的规则。
2)OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
3)FORWARD链:当收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。
4)PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。
5)POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。

3、数据包过滤的匹配流程
1)规则表的顺序
当数据包抵达防火墙时,将依次应用raw表,mangle表,nat表和filter表中对应链内的规则,应用顺序为raw-mangle-nat-filter

2)规则链之间的顺序
A、入站数据流向:来自外界的数据包到达防火墙后,首先被PRETOUTING链处理,然后进行路由选择,如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再讲给系统的上层应用程序进行响应。

B、转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择,如果数据包的目的地址是其他外部的地址,则内核将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理。

C、出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTOUT处理,然后进行路由选择,再交给POSTROUTING链进行处理。

3)规则链内部各条防火墙规则之间的顺序
当数据包经过每条规则链时,依次按第一条规则,第二条规则......的顺序进行匹配和处理,链内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则,则不再检查本链内后续的其它规则,如果比对完整个链,也找不到与数据包相匹配的规则,就按照规则链的默认策略进行处理。


二、IPTABLES执行规则顺序
iptables执行规则时,是从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则, 执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况,后续执行一般有三种情况。
1)一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则.
2)一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行.
3)一种是中止所有规则队列的执行.

iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。

ACCEPT:将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则炼(nat:postrouting)

REJECT:拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。 范例如下:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

DROP  :丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

REDIRECT:将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。 这个功能可以用来实作通透式 porxy 或用来保护 web 服务器。例如:iptables -t nat -A PREROUTING -p tcp ——dport 80 -j REDIRECT ——to-ports 8080


三、IPTABLES规则介绍
1、增加一条规则

iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP|REJECT|LOG]
-A :新增一条规则,该规则增加在规则的最后面。
-I :插入一条规则,如果没有指定此规则的顺序,默认是插入成第一条规则。
-io:网络接口,设定封包进出的接口规范。
-i :封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合。
-o :封包所传出的那个网络接口,需与 OUTPUT 链配合。
-p :协定,设定此规则适用于哪种封包格式。主要的封包格式有:tcp, udp, icmp 及 all。
-s :来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如:
  IP :192.168.0.100
  网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
  若规范为『不许』时,则加上 ! 即可,例如:-s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;
-d :目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。
-j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)

 

2、删除一条规则

iptables -D INPUT [line-number]

-D :删除一条规则。

通常使用:iptables -nL --line-numbers,显示规则及序号,然后通过前面的序号来删除。
注意:每删除一条规则后,它后面的规则的序号是会改变的。

 

3、查看iptables情况

-L :list, 列出指定鏈上的所有规则,本选项须置后。
-n :numberic,以数字格式显示地址和端口号。
-v :verbose,详细信息。
-vv:更详细。
-x :exactly,显示计数器结果的精确值,而非单位转换后的易读值。
--line-numbers:显示规则的序号。

 

常用组合:

--vnL
--vvnxL --line-numbers

 

四、常用命令
1、屏蔽某个IP地址

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

注意需要将上述的 XXX 改成要屏蔽的实际 IP 地址,其中的 -A 参数表示在 INPUT 链的最后追加本条规则。(IPTables中的规则是从上到下匹配的,一旦匹配成功就不再继续往下匹配)

 

2、使用Multiport控制多端口

iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

 

3、在规则中使用 IP 地址范围

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

 

4、配置端口转发

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

上述命令会将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口。

 

5、屏蔽HTTP服务Flood攻击

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

上述命令会将连接限制到每分钟 100 个,上限设定为 200。

 

6、禁止PING

iptables -A INPUT -p icmp -i eth0 -j DROP

 

7、允许访问回环网卡

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

环回访问(127.0.0.1)是比较重要的,建议都开放。

 

8、限制并发连接数

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

以上规则限制每客户端不超过 3 个连接。

 

9、清空IPtables规则

iptables -F
iptables -F INPUT

#要清空特定的表可以使用 -t 参数进行指定,例如:
iptables -t nat -F

 

10、丢弃无效数据包

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

 

11、屏蔽邮件发送规则

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

 

12、阻止连接到某块网卡

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

 

13、限制某个IP(网段/某段IP)连接指定端口

iptables -I INPUT -s 192.168.20.0/24 -p tcp -d 192.168.20.40 --dport 3008 -j ACCEPT

 

14、配置完规则后记得:保存和重启

service iptables save
service iptables restart

 

15、通过字符串实现URL过滤 

iptables -I OUTPUT -p tcp -m string --string "myqcloud.com" --algo bm -j ACCEPT

 

16、插入一条限来源 、限去向的规则

iptables -I INPUT -p tcp -s 192.168.1.0/24 -d 192.168.200.40 --dport 3388 -j ACCEPT

 

注:CentOS中iptables存在位置:/etc/sysconfig/iptables