Iptalbes的规则链:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
Iptalbes的表 :
filter(过滤):表
INPUT
OUTPUT
FORWARD
nat(地址转换):表
PREROUTING
OUTPUT
POSTROUTING
mangle(拆开、修改、封装):表
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
raw():
PREROUTING
OUTPUT
1、iptables详解
iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作(target)
命令:
管理规则
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
-D CHAIN [num]: 删除指定链中的第num条规则;
-R CHAIN [num]: 替换指定的规则;
管理链:
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN: 设定指定链的默认策略;
-N:自定义一个新的空链
-X: 删除一个自定义的空链
-Z:置零指定链中所有规则的计数器;
E: 重命名自定义的链;
查看类:
-L: 显示指定表中的规则;
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv:
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
匹配条件
通用匹配
-s, --src: 指定源地址
-d, --dst:指定目标地址
-p {tcp|udp|icmp}:指定协议
-i INTERFACE: 指定数据报文流入的接口可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE: 指定数据报文流出的接口可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
扩展匹配
隐含扩展
-p tcp
--sport PORT[-PORT]: 源端口
--dport PORT[-PORT]: 目标端口
--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
--tcp-flags SYN,FIN,ACK,RST SYN = --syn
--syn
-p icmp
--icmp-type
0: echo-reply ping的回应
8: echo-request 请求ping
-p udp
--sport
--dport
-p tcp --dport
显式扩展: 使用额外的匹配机制
-m EXTESTION --spe-opt
state: 状态扩展
结合ip_conntrack追踪会话的状态
NEW: 新连接请求
ESTABLISHED:已建立的连接
INVALID:非法连接
RELATED:相关联的
-m state --state NEW,ESTABLISHED -j ACCEPT
首先要装载ip_conntrack_ftp和ip_nat_ftp模块
iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
multiport: 离散的多端口匹配扩展
--source-ports
--destination-ports
--ports
-m multiport --destination-ports 21,22,80 -j ACCEPT
动作(target):
ACCEPT:放行
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装
LOG:日志
MARK:打标记
2、iptables实例
1)清理主机上的iptables , 重新配置 , 先设置INPUT , OUTPUT 为ACCEPT , 防止一iptables -F 阻挡了所有的链接 , 我们连ssh也连不上去操作
#iptables -P INPUT ACCEPT #iptables -P OUTPUT ACCEPT #iptables -F
注释 :用法iptables -P [CHAIN] [TARGET] 设定链的默认规则
Iptables -F 是清除所有规则 , 只剩下默认链规则
2)开放22的规则ssh , 192.168.1.0网段的ip本机的ip为10.0.0.9
#iptables -t filter -A INPUT -s 192.168.1.0/24 -d 10.0.0.9 -p tcp --dport 22 -j ACCEPT #iptables -A OUPUT -s 10.0.0.9 -d 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
注释 : INPUT和OUTPUT是对应 , 数据进行了就要进行相应 , 如果只开启一个的话 , 将无法访问。 -t filter 可以省略 , 默认为filter 表 , -s 或 -d 省略则表示为所有地址
#iptables -P INPUT DROP #iptables -P OUTPUT DROP #iptables -P FORWARD DROP
注释 :阻止所有端口访问 , 如果是远程操作 , 请先开发远程操作的端口
3) 开放httpd服务
# iptables -A INPUT -d 10.0.0.9 -p tcp --dport 80 -j ACCEPT # iptables -A OUTPUT -s 10.0.0.9 -p tcp --sport 80 -j ACCEPT
4) 开放ftp服务
#lsmod | grep //查看ip_conntrack_ftp.ko , ip_nat.ko , ip_nat_ftp.ko是否加载 //如果没加载得预先加载 #insmod /lib/modules/2.6.18-308.el5/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko #insmod /lib/modules/2.6.18-308.el5/kernel/net/ipv4/netfilter/ip_nat.ko #insmod /lib/modules/2.6.18-308.el5/kernel/net/ipv4/netfilter/ip_nat_ftp.ko #iptables -A INPUT -d 10.0.0.9 -p tcp --dport 21 -j ACCEPT #iptables -A OUTPUT -s 10.0.0.9 -p tcp --sport 21 -j ACCEPT #iptables -A INPUT -d 10.0.0.9 -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -A OUTPUT -s 10.0.0.9 -m state --state ESTABLISHED,RELATED -j ACCEPT
注释 :-m state是指定状态 , --state 是状态 , ESTABLISHED是已经建立的链接 , RELATED保持的链接
5)开启ping回环地址
#iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT #iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
注释 :-i是指定报文流入接口 , -o 是指定保温流出接口 , lo是回环接口
6)允许ping别人的ip , 不允许ping自己
#iptalbes -t filter -A OUTPUT -s 10.0.0.9 -p icmp --icmp-type 8 -j ACCEPT #iptables -t filter -A INPUT -d 10.0.0.9 -p icmp -icmp-type 0 -j ACCEPT
7) 修改或者替换规则
#iptables -L -line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 10.0.0.9 tcp dpt:22
2 ACCEPT tcp -- 0.0.0.0/0 10.0.0.9 tcp dpt:80
Chain FORWARD (policy DROP)
num target prot opt source destination
Chain OUTPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 10.0.0.9 0.0.0.0/0 tcp spt:22
2 ACCEPT tcp -- 10.0.0.9 0.0.0.0/0 tcp spt:80
#iptables -D INPUT 2 //删除INPUT链中的第三条规则 #iptables -R OUTPUT 2-s 10.0.0.9 -p tcp -sport 21 -j DROP //修改OUTPUT链中第四条规则
8) 过滤具有特殊字符的字符串 , 结合httpd实现
#iptables -I OUTPUT -s 10.0.0.9 -m string --algo kmp --string "h7n9" -j REJECT
9) 结合开启22端口 , 80 端口 ,ftp端口 外 , 防止其他的规则不给进入
#iptables -P INPUT ACCEPT #iptables -P OUTPUT ACCEPT #iptables -F #iptables -A INPUT -d 10.0.0.9 -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -A INPUT -d 10.0.0.9 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT #iptabels -A OUTPUT -s 10.0.0.9 -m state --state ESTABLISHED,RELATED -j ACCEPT //只要是已经建立或者保持的链接就放行 #iptables -P INPUT DROP #iptables -P OUTPUT DROP #iptables -L -n
10)开启22端口 , 80 端口 ,ftp端口 外 , 允许主机访问其他服务器
#iptables -P INPUT ACCEPT #iptables -P OUTPUT ACCEPT #iptables -F #iptables -A INPUT -d 10.0.0.9 -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -A INPUT -d 10.0.0.9 -p tcp -m multiport -destination-ports 21,22,80 -m state --state NEW -j ACCEPT #iptables -P INPUT DROP
注释:直接放通OUTPUT的数据 , 在INPUT中允许已经建立链接的数据进来
11) 本例需要3台虚拟主机
1、设置A主机
#iptables -F #vi /etc/sysctl.conf //将net.ipv4.ip_forward=1 #sysctrl net.ipv4.ip_forward=1 #ifconfig eth0 192.168.1.1 #ifconfig eth1 10.0.0.1
2、设置B主机
#iptables F #ifconfig eth0 10.0.0.2 #route del -net 0.0.0.0 #route add default gw 10.0.0.1 #ping 10.0.0.1 #ping 192.168.1.1
3、设置C主机
#iptables F #ifconfig eth0 192.168.1.3 #route del -net 0.0.0.0 #route add default gw 192.168.1.1 #ping 192.168.1.1 #ping 10.0.0.1
4、B主机操作
#ping 192.168.1.3 //ping C主机看是否会通 , 如果通了就可以了 #yum install httpd -y //安装httpd服务 #service httpd start
5、A主机操作 , 假设B主机是外网 , C主机是内网, C主机要通过 A 主机去访问外网B主机,首先我们要先把B主机的默认网关去掉(#route del -net 0.0.0.0)
# iptables -t nat -P POSTROUTING DROP # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 10.0.0.1 (A主机的外网网卡)
这样C主机就可以通过A主机访问外网B主机了
6、设置A主机 , 只允许通过80 , 21 ,22端口出去访问
#iptalbes -P FORWARD DROP #iptalbes -A FORWARD -m state --state ESTABLISHED,RElATED -j ACCEPT #iptalbse -A FORWARD -s 192.168.1.0/24 -tcp --dport 80 -m state --state NEW -j ACCEPT #iptabels -A FORWARD -s 192.168.1.0/24 -icmp --icmp-type 8 -m state --state NEW -j ACCEPT #iptables -A FORWARD -s 192.168.1.0/25 -tcp --dsport 21 -m state --state NEW -j ACCEPT
版权声明:未经博主允许不得转载。http://www.smister.com/post-6/iptable_strategy.html