首页 > 技术文章 > iptables 配置详解

xu743876685 2018-03-25 20:28 原文

Linux下的防火墙概念:

a、一般谈到Linux下的防火墙,我们都会首先想到iptables,其实更确切的叫法应该是Netfilter/iptables,iptables和Netfilter其实是存在差别的。

b、尽管它们经常被用来相互替换使用,Netfilter是用来实现Linux内核中防火墙的Linux内核空间程序代码段,它要么被直接编译进内核,要么被包含在模块中。

c、而iptables是用来管理Netfilter防火墙的用户程序,而我这里提到的iptables是包含Netfiler和iptables。

d、Netfilter/iptables是基于包过滤的防火墙,主要是针对2-4层,另外,iptables也支持7层控制。

iptables的组成部分:

iptables有四个表和五个链以及一些规则组成:

四个表:filter、nat、mangle、raw

filter表(过滤规则表),nat表(地址转换规则表),mangle(修改数据标记位规则表),raw(跟踪数据表规则表)

其中最常用的是filter表以及nat表

五个链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

iptables的命令语法:

iptables [-t 表名] <-A|-I|-D|-R>链名[规则编号] [-i|-o 网卡名称]  [-p 协议类型]  [-s 源IP地址|源子网]  [–sport 源端口号]
[-d 目标IP地址|目标子网] [–dport 目标端口号] <-j 动作>

参数及动作信息

-A    追加防火墙规则
-D    删除防火墙规则
-I    插入防火墙规则
-F    清空防火墙规则
-L    列出防火墙规则
-R    替换防火墙规则
-Z    清空防火墙数据表统计信息
-P    设置链默认规则

匹配参数:

-p                   匹配协议
-s                   匹配源地址
-d                   匹配目标地址
-i                   匹配入站网卡接口
-o                   匹配出站网卡接口
–sport               匹配源端口
–dport               匹配目标端口
–src-range           匹配源地址范围
–dst-range           匹配目标地址范围
–limit               匹配数据表速率
–mac-source          匹配源MAC地址
–state               匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
–string              匹配应用层字串

触发动作:

ACCEPT     允许数据包通过
DROP      丢弃数据包
REJECT     拒绝数据包通过,并发回封包通知对方
LOG        将数据包信息记录syslog日志
DNAT       目标地址转换
SNAT       源地址转换(适用于静态IP)
MASQUERADE 地址欺骗(只能用于ADSL拨号上网的IP伪装,也就是主机的IP是由ISP分配动态的)
REDIRECT   重定向,将数据包重定向到本机或另外主机的某一个端口,通常能实现透明代理或者对外开放内网的某些服务

常用的命令

a、查看filter表的所有规则:

[root@localhost python]# iptables -n -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  

b、清空filter表的所有规则:

[root@localhost ~]# iptables -F

c、查看nat表的所有规则:

[root@localhost python]# iptables -t nat -n -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

# 记录192,.168.10.116访问主机80端口的日志信息(/var/log/messages)

iptables  -I  INPUT -s 192.168.10.116  -p  tcp  --dport  80  -j  LOG
[root@localhost python]# tail -10 /var/log/messages
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=30507 DF PROTO=TCP SPT=50870 DPT=80 WINDOW=16425 RES=0x00 ACK URGP=0 
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=30508 DF PROTO=TCP SPT=50870 DPT=80 WINDOW=16425 RES=0x00 ACK URGP=0 
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=30509 DF PROTO=TCP SPT=50870 DPT=80 WINDOW=16425 RES=0x00 ACK FIN URGP=0 
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=30510 DF PROTO=TCP SPT=50871 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=30511 DF PROTO=TCP SPT=50871 DPT=80 WINDOW=16425 RES=0x00 ACK URGP=0 
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=442 TOS=0x00 PREC=0x00 TTL=64 ID=30512 DF PROTO=TCP SPT=50871 DPT=80 WINDOW=16425 RES=0x00 ACK PSH URGP=0 
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=30513 DF PROTO=TCP SPT=50871 DPT=80 WINDOW=16425 RES=0x00 ACK URGP=0 
Mar 25 19:29:25 localhost kernel: IN=eth0 OUT= MAC=00:0c:29:d0:4d:a8:00:e0:4c:68:00:a5:08:00 SRC=192.168.10.100 DST=192.168.10.115 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=30514 DF PROTO=TCP SPT=50871 DPT=80 WINDOW=16425 RES=0x00 ACK URGP=0 

# 将来自192.168.10.0/24网段的主机并访问80端口的请求给予拒绝

iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 80 -j DROP  
[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  192.168.10.0/24      0.0.0.0/0           tcp dpt:80  这个就是新添加的防火墙规则
LOG        tcp  --  192.168.10.100       0.0.0.0/0           tcp dpt:80 LOG flags 0 level 4 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

# 禁止10.10.10.0/24网段内的主机ping。ICMP类型为8

说明:禁止10.10.10.0/24网段内的主机ping
iptables -A INPUT -s 10.10.10.0/24 -p icmp --icmp-type 8 -j DROP

# -D参数,删除INPUT链的第三条规则:  

[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  192.168.10.0/24      0.0.0.0/0           tcp dpt:80 
LOG        tcp  --  192.168.10.100       0.0.0.0/0           tcp dpt:80 LOG flags 0 level 4 
DROP       icmp --  10.10.10.0/24        0.0.0.0/0           icmp type 8 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@localhost ~]# iptables -D INPUT 3 删除INPUT链的第三条规则
[root@localhost ~]# iptables -L -n     
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  192.168.10.0/24      0.0.0.0/0           tcp dpt:80 
LOG        tcp  --  192.168.10.100       0.0.0.0/0           tcp dpt:80 LOG flags 0 level 4 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

# -R参数,替换第二条规则  

[root@localhost ~]# iptables -R INPUT 2 ! -s 10.10.10.1 -p tcp --dport 80 -j ACCEPT  
[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  192.168.10.0/24      0.0.0.0/0           tcp dpt:80 
ACCEPT     tcp  -- !10.10.10.1           0.0.0.0/0           tcp dpt:80 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

# 定义iptables默认策略

默认策略的定义格式为:

iptables    [-t 表名]    <-P>   <链名>    <动作>

 

推荐阅读