七周四次课(3月22日)
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用
扩展
1. iptables应用在一个网段 http://www.aminglinux.com/bbs/thread-177-1-1.html
2. sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html
3. iptables限制syn速率 http://www.aminglinux.com/bbs/thread-985-1-1.html http://jamyy.us.to/blog/2006/03/206.html
10.15 iptables filter表小案例
总结
查看iptables规则:iptables -nvL
iptables -F 清空规则
service iptables save 保存规则
加粗,保存在/etc/sysconfig/iptables,重启后,会调用此文件的规则。
iptables -t nat //-t指定表
默认不加-t会指定filter表
iptables -Z 可以把计数器清零
iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
把规则放到最后面
INPUT是进来的包,
-s 指定源ip
-p 指定它的协议可以是tcp,udp
--sport 源端口
--dport 目标端口
-d 目标地址
-j 行为,DROP,REJECT,ACCEPT
iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP
把规则放到最前面,最前面的会被优先加载,匹配。
-I -A -D 紧跟着链的名字,可以是INPUT,OUTPUT或者是FORWARD
iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
iptables -nvL --line-numbers
列出规则的编号,
iptables -D INPUT 1
根据编号删除规则
iptables -P INPUT DROP
指定链的默认策略,慎重操作,否则会影响远程连接状态。
小案例
需求:把80端口 22端口 21端口 放行,22端口指定IP段,只有这IP段的IP访问才可以访问到,其他段访问 拒绝。
iptables小案例
vi /usr/local/sbin/iptables.sh //加入如下内容
#! /bin/bash
ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
上述案例,添加ipt变量,$ipt就是使用ipt的变量。以后需要这种需求,可以模仿此案例去写脚本 加粗高亮。状态一定要写,否则会被DROP掉。
icmp示例
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
这个8指的是能在本机ping通其他机器,而其他机器不能ping到本机。
其实这里相当于一个禁ping操作。
10.16 iptables nat表应用(上)
准备工作,
2台虚拟机,1号2号
1号机操作
添加一块网卡
虚拟机设置-添加-选中网络适配器-下一步-保持默认-下一步
切记选择LAN区段
2号机操作
首先开机禁用网卡
添加网卡(操作和1号机添加网卡一样,LAN区段也是选择刚刚设定的LAN区段)
上面的操作最好在关机之后操作。
1号机的网络状态。
[[email protected] ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.189.128 netmask 255.255.255.0 broadcast 192.168.189.255
inet6 fe80::243c:86d7:d85e:224d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:15:53:53 txqueuelen 1000 (Ethernet)
RX packets 815 bytes 78496 (76.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 587 bytes 83961 (81.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.189.150 netmask 255.255.255.0 broadcast 192.168.189.255
ether 00:0c:29:15:53:53 txqueuelen 1000 (Ethernet)
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:15:53:5d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55 bytes 10362 (10.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 72 bytes 5744 (5.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 72 bytes 5744 (5.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
设置ens37的ip 有好几种方法,
1,把ens33的网络配置文件复制多一份,改名ens37,慎记更改device name ip mac地址(可以删掉),等等
2,临时配置,命令配置:[[email protected] ~]# ifconfig ens37 192.168.100.1/24
#ifconfig
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::20c:29ff:fe15:535d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:15:53:5d txqueuelen 1000 (Ethernet)
2号机操作
因为ens33刚刚已在VMware做设置禁掉了,所以需要再在系统上命令禁掉ens33的网卡
#ifdown ens33
设定ens37 IP
# ifconfig ens37 192.168.100.100/24
检查一次配置
尝试ping 1号主机的37的IP 192.168.100.1
ping通状态。ok
10.17 iptables nat表应用(中)
需求1:可以让B机器连接外网
1号机机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
不能上外网的原因是,没有开启路由转发。
先查看内核参数,默认是0,0表示没有开启内核路由转发
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
0
打开端口转发,1值表示开启,利用echo赋值
[[email protected] ~]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# !cat
cat /proc/sys/net/ipv4/ip_forward
1
A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
[[email protected] ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2 packets, 216 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 2 packets, 216 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens33 192.168.100.0/24 0.0.0.0/0
此规则就是为了让A可以上外网,MASQUERADE表示伪装。
B上操作
B上设置网关为192.168.100.1
#route add default gw 192.168.100.1
ping A电脑的网关192.168.189.1 ping通。
设置DNS可以ping通外网。
[[email protected] ~]# vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
在PC上ping B主机192.168.100.100 ping不通
其实这过程就相当于一台路由器的运作原理,A机器是路由器,B与C是连接路由器的用户。
10.18 iptables nat表应用(下)
截图
需求2:C机器(物理机PC)只能和A通信,让C机器可以直接连通B机器的22端口
C远程登录B
C不能直接连接B,但是C可以连接A(因为C可以用Xshell远程登录A的22端口)。
如果C要连接B,需要在B上做一个端口映射,但是不能使用22端口(因为A已经使用了),必须使用其他端口。比如映射1122端口。
A上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward
此项如果之前做过了,无需再开启,或者先#cat一下文档,如果是1就无需再做此步骤。
A上执行第一条规则
iptables -t nat -A PREROUTING -d 192.168.189.128 -p tcp --dport 1122 -j DNAT --to
-d的目标ip是A上的IP
--dport 定义目标端口1122
此规则的大意是:把进去的包做一个端口转发。
执行这一步之前,首先删掉之前所建立的规则。
[[email protected] ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
[[email protected] ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
第二条规则iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.189.128
这个是回来的包,192.168.189.128.
#iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.189.128
做完设置后,在Xshell上进行远程登录,添加主机是192.168.189.128 端口1122
完成跳转B上。
但是B的机器的IP不会更改,此时还是192.168.100.100
测试外网也成功。
原文地址:http://blog.51cto.com/13578154/2089990