Linux Iptables配置介绍
一.简介
iptables是与linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好的控制IP信息包过滤和防火墙配置。
简单来讲,防火墙就是用于实现Linux下访问控制的功能的。我们的任务就是去定义防火墙如何工作,这是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检查
二.配置介绍
1.规则链
Iptables一共可分为5个规则链:
1.PREROUTING(路由前)
2.INPUT(数据包流入口)
3.FORWARD(转发关卡)
4.OUTPUT(数据包出口)
5.POSTROUTING(路由后)
这是NetFilter(网络过滤器)规定的5个规则链,任何一个数据包,只要经过本机,必将经过这5个链中的一个链。
当我们定义策略的时候,要分别定义多条功能,其中:定义数据包允许或不允许的策略,是filter表过滤的功能;而定义地址转换的功能的则是nat表选项。mangle的主要作用是可以修改封包内容(暂未使用到)
对于filter来讲一般只能做在3个链上:INPUT,FORWARD,OUTPUT
对于nat来讲一般也只能做在3个链上:PRERPOUTING,OUTPUT,POSTROUTING
2.详解COMMAND
2.1规则写法
格式: iptables 【-t table】 COMMAND chain CRETIRIA -j ACTION
-t table:filter、nat,若不在该参数,默认写入到filter表中
COMMAND:定义如何对规则进行管理
chain:指定接下来的规则到底是在哪个链上操作的
CRETIRIA:指定匹配标准
-j ACTION:指定如何进行如何处理
2.2链管理命令
-P 设定默认策略:iptables -P INPUT DROP,表示把默认规则给拒绝了,且没有定义哪个动作,所以关于外界连接的所有规则包括CRT远程连接的都给拒绝了
-F 清空规则链:iptables -t nat -F 清空nat表的所有链
-N 支持用户新建一个链
-X 用户删除用户自定义的空链
-E 用来Rename chain主要是用来给用户自定义的链重命名
-Z 清空链,及链中默认规则的计数器
2.2规则管理命令
-A 新增规则链:iptables -A INPUT -i eth0 -j ACCEPT ,表示所有从eth0过来的连接均允许通过
-I num 插入,把当前规则插入为第几条:-I 3 ,插入为第三条
-R num Replays替换/修改第几条规则:iptables -R 3
-D num 删除,明确指定删除第几条规则
2.3查看管理命令“-L”
附加子命令
-n:以数字的方式显示IP,将IP直接显示出来
-v:显示详细信息
-vv/-vvv,越多越详细
--line-numbers:显示规则的行号
-t nat:显示nat表中所有的信息
注:-t nat需要放在 ‘-L’前, iptables -t nat -L -n
2.4实例
1. 设置默认策略
iptables -P INPUT DROP------拒绝所有连接
iptables -P OUTPUT ACCEPT----允许数据包出口
iptables -P FORWARD DROP---拒绝所有转发
2. eth0例外
iptables -t filter -A INPUT -i eth0 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -j ACCEPT
使服务器接收所有从eth0过来的连接或数据出口,防止设置默认策略后,造成内网无法访问!
-i入接口匹配
-o出接口匹配
3. lo例外(访问本地数据库)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
4. 端口开放,如XXX程序 5099端口,使外网可通过5099端口注册到XXX
iptables -A INPUT -p udp --dport 5099 -j ACCEPT
iptables -A OUTPUT -p udp --sport 5099 -j ACCEPT
若需要开放的是范围端口,如音XXX端口30000:31000
iptables -A INPUT -p udp --dport 30000:31000 -j ACCEPT
iptables -A OUTPUT -p udp --sport 30000:31000 -j ACCEPT
注: 此处是小写p,
-p 协议匹配
--sport,--dport源和目的端口匹配
5. 端口转发
需要先开启iptables FORWARD功能:/etc/sysctl.conf配置文件的net.ipv4.ip_forward=1(默认是0)
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -d XXX.XXX.XXX.XXX -p tcp -m tcp --dport 8980 -j DNAT --to-destination 192.168.XXX.XXX:8980
iptables -t nat -A POSTROUTING -d 192.168.XXX.XXX -p tcp --dport 8980 -j SNAT --to-source 192.168.XXX.XXX
iptables -A FORWARD -i eth0 -s 192.168.XXX.XXX -p tcp --sport 8980 -j ACCEPT
iptables -A FORWARD -o eth0 -d 192.168.XXX.XXX -p tcp --dport 8980 -j ACCEPT
以上表示所有外网访问XXX.XXX.XXX.XXX:8980,均转发到内网192.168.XXX.XXX:8980
6. 路由功能
iptables -t nat -A POSTROUTING -s 192.168.XXX.0/24 -o eth1 -j MASQUERADE
表示所有XXX网段的IP,均可通过eth1访问外网;
iptables -t nat -A POSTROUTING -s 192.168.XXX.60 -o eth1 -j MASQUERADE
表示只有192.168.3.60这个IP,可通过eth1访问外网
7. 启动/保存等
service iptables save 保存到/etc/sysconfig/iptables
service iptables start/stop/restart/status
chkconfig iptables on 永久打开iptables,保证开机自启