Iptables的应用
1.防火墙特点对比
静态包过滤防火墙: 包过滤防火墙不检查数据区,不建立连接状态表,前后报文无关 ,应用层控制很弱
代理防火墙:不检查IP、TCP报头,不建立连接状态表,网络层保护比较弱
状态检测防火墙:不检查数据区,建立连接状态表,前后报文相关,应用层控制弱
自适应代理防火墙:可检查整个数据包内容,根据建立连接状态表,网络层保护强
2.规则链:
INPUT链: 信息包来自外界并进入系统,内核将它传到INPUT链中
OUTPUT链: 信息包来自内部系统并去另一个系统,信息被传递到OUTPUT链中
FORWARD链: 信息来自外部系统并前往外部系统,信息被传递到FORWARD链中
PREROUTING链: 在包刚到达防火墙时改变它的目的地址
POSTROUTING链: 在包就要离开防火墙之前改变其源地址
3.iptables内置的表
1).filter表
用于过滤数据包,包括INPUT链、OUTPUT链、FORWARD链
2).net表
主要用于进行网络地址转换,包括PREROUTING链、OUTPUT链、POSTROUTING链
3).mangle表
主要用来定义数据包的操作方式包括INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
4.iptables的命令格式:
iptables [-t table] <COMMAND> [chains] [rule-matcher] [-j target]
[tables]选项:fileter、nat、mangle
<COMMAND>选项:-A、-D、-R、-I、-L、-F、-X、等等
[chains]选项:INPUT,OUTPUT,FORWARD,PREROUTIN,POSTROUTING
[rule-matcher]选项:-c,-s,--source-port,-d,-j,-f等等
[target]选项:filter: ACCEPT、DROP
nat: SNAT、MASQUERADE、DNAT、REDIRECT
mangle: TTL、TOS、MARK
扩展的目标动作:REJECT:丢弃
LOG: 将匹配的数据包传递给syslog()进行记录
ULOG: 将匹配的数据包使用用户空间的log进程进行记录
MIRROR:表示互换源和目的地址以后重新传输该数据包
TOS: 表示改写包的TOS值
QUEUE: 表示把这个包重导入本机队列中
RETURN:表示距离这条链的匹配,如果是用户自定义链,就返回原链
的下一个规则继续操作,如果是内置链,就参考政策来处理
5.iptables的使用
1).将filter表的INPUT链的默认策略定义为接收数据包
iptables -P INPUT ACCETP
2).将nat表的OUTPUT链的默认策略定义为丢弃数据包
iptables -t nat OUTPUT DROP
3).查看nat表中所有链的规则列表
iptables -t nat -L
4).增加、删除、插入、替换规则
iptables [-t 表名] <-A|I|D|R> <链名> [规则编号] [-i|o 网上名称] [-p 协议类型
] [-s 源IP地址|源子网] [--sport 源端口号] [-d 目标IP地址|目标子网] [--dport
目标端口号] <-j 动作>
5).为filter表的INPUT链添加一条规则,规则的内容是阄来自IP地址为192.168.1.102
这台主机的数据包都丢弃,然后查看filter表的INPUT链规则列表
iptables -t filter -A INPUT -s 192.168.1.102 -j DROP
iptables -t filter -L INPUT
6).为filter表的INPUT链添加一条规则,接收来自IP地址为192.168.1.102这台主机的数
据包,在查看filter表的链规则列表
iptables -t filter -A INPUT -s 192.168.1.102 -j ACCEPT
iptables -t filter -L INPUT
7).在filter表的INPUT链中的第二条规则前插入一条规则,内容是禁止192.168.2.0这
个子网里的所有主机访问TCP协议的80端口,然看filter规则列表
iptables -t filter -I INPUT 2 -s 192.168.2.0/24 -p tcp -dport 80 -j DROP
iptables -t filter INPUT
8).删除filter表的INPUT链规则列表中的第三条规则,然后查看filter表的INPUT链规
则列表
iptables -t filter -D INPUT 3
iptables -t filter -L INPUT
9).替换filter表INPUT链规则列表中的第二条规则,禁止192.168.4.0这个子网里的所
有主机访问TCP协议的80端口,然后查看filter表的INPUT链规则列表
iptables -t filter -R INPUT 2 -s 192.168.4.0/24 -p tcp -dport 80 -j DROP
iptables -t filter -L INPUT
10).删除filter表中的所有规则
iptables -F
11).将filter表中的数据包计数器和流量计数器归零
iptables -Z
12).删除nat表的所有规则
iptalbes -t nat -F
6.使用iptables实现nat服务
1).打开内核路由功能
ech0 "1">/proc/sys/net/ipv4/ip_forward
2).实现IP伪装
iptalbes -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
3).IP映射模式
假如内部有两台服务器,伪IP地址为192.168.1.100和192.168.1.200外网IP地址为
221.1.1.100和221.1.1.200,防火墙的内接口IP为192.168.1.1,防火墙的外网接口IP
为221.1.1.1,将两台服务器的外网IP绑定到防火墙外网接口:
ifconfig eth0 add 221.1.1.100 netmask 255.255.255.0
ifconfig eht0 add 221.1.1.200 netmask 255.255.255.0
成功升级内核后安装Iptables,然后执行以下脚本
modprobe ip_tables
modprobe ip_nat_ftp
进行DNAT转换
iptables -A PREROUTING -i eth0 -d 221.1.1.100 -j DNAT --to 192.168.1.100
iptalbes -A PREROUTING -i eth0 -d 221.1.1.200 -j DNAT --to 192.168.1.200
进行SNAT转换
iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 221.1.1.100
iptables -A POSTROUTING -o eht0 -s 192.168.1.200 -j SNAT --to 221.1.1.200
7.访问控制应用
1).添加iptables 规则禁止用户访问域名为www.xxx.com的网站,然后查看filter表的
FORWARD链规则列表
iptables -I FORWARD -d www.xxx.com -j DROP
iptables -t filter -L FORWARD
2).添加iptables 规则禁止用户访问IP地址为10.10.10.10的网站,然后查看链表
iptalbes -I FORWARD -d 10.10.10.10 -j DROP
iptalbes -t filter -L FORWARD
3).添加IP规则禁止IP地址为192.168.1.102的客户端上网,然查看filter表的FORWARD
规则链
iptables -I FORWARD -s 192.168.1.102 -j DROP
iptables -t filter -L FORWARD
4)禁止192.168.1.0子网里所有的客户端使用FTP协议下载,然后查看filter的FORWARD
链列表
iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 21 -j DROP
iptables -t filter -L FORWARD
5).禁止192.168.1.0子网里所有的客户端使用Telnet协议连接远程计算机(23端口号)
iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 23 -j DROP
iptables -t filter -L FORWARD
6).强制所有的客户端访问192.168.1.101这台服务器,然后查看PREROUTING链列表
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to
192.168.1.101:80
iptables -t nat -L PREROUTING
7).禁止Internet上计算机通过ICMP协议ping到NAT服务的ppp0接口,但允许内网的客户
通过ICMP ping的计算机,然后查看filter表的INPUT链规则列表
iptables -I INPUT -i ppp0 -p imcp -j DROP
iptables -t filter -L INPUT