51学通信论坛2017新版

标题: Linux基础12-iptables(扩展例子演示代码)-(连载中) [打印本页]

作者: admin    时间: 2017-11-15 21:00
标题: Linux基础12-iptables(扩展例子演示代码)-(连载中)

[attach]5341[/attach]

1、iptables扩展匹配
规则的匹原则:
1、自上而下按顺序匹配
2、如果匹配到某条规则,执行这个规则动作,就不往后匹配其它规则
3、如果列表的所有的规则都匹配不到,则匹配默认规则
iptables [-t talbe] -A | -I | -D | -R | -E chian option(-s -d -i -o -p --dport -m) -j action(ACCEPT/DROP/REJECT/SNAT/DNAT....)
ACCEPT 接受
DROP 悄悄丢弃
REJECT 明示拒绝
SNAT 基于源地址的nat转换,其作用是将ip数据包的源地址转换成另外一个地址
DNAT 目的地址转换 其作用是将ip数据包的目标地址转换成另外一个地址
应用层
传输层(tcp/udp/sport/doprt/ tcp6个控制位匹配)
网络层(-s/-d/icmp)
数据链路层(mac)
物理层(-i/-o)
扩展匹配
1、通用匹配 -i -o -s -d
-i eth0 从这块网卡流入的数据 流入一般用INPUT和PREROUING
-o eth0 从这块网卡流出的数据 流出一般在OUTPUT和PSOTROUTING
-s 源IP
-d 目标IP
2、隐含匹配 tcp udp icmp sport dport
3、扩展匹配 -m mac | iprange | state
-m multiport:表示启用多端口扩展 之后我们就可以启用比如 --dports 21,23,80,8080-8100, 3306
常用的ACTION: -j
DROP:悄悄丢弃 nmap
一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
REJECT:明示拒绝
ACCEPT:接受
custom_chain:转向一个自定义的链
DNAT
SNAT
MASQUERADE:源地址伪装 nat实验的时候
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回
在自定义链执行完毕后使用返回,来返回原规则链。
练习题1:
只要是来自于172.16.85.14的都允许访问我本机的172.16.100.1的SSHD服务
分析:首先肯定是在允许表中定义的。因为不需要做NAT地址转换之类的,然后查看我们SSHD服务,在22号端口上,处理机制是接受,对于这个表,需要有一来一回两个规则,如果我们允许也好,拒绝也好,对于访问本机服务,我们最好是定义在INPUT链上,而OUTPUT再予以定义就好。(会话的初始端先定义),所以加规则就是:
定义进来的:
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT
定义出去的: iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
将默认策略改成DROP:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP1、允许ping 127.0.0.1 和 允许 ping 10.1.1.0/24 ,其他服务都禁止# iptables -A INPUT -p icmp -i lo -j ACCEPT# iptables -A INPUT -p icmp -s 10.1.1.0/255.255.255.0 -j ACCEPT# iptables -A INPUT -j DROP或者# iptables -P INPUT DROP 《--定义默认策略,当在规则表里找不到匹配的规则就采取策略的动作# iptables -A INPUT -p icmp -i lo -j ACCEPT# iptables -A INPUT -p icmp -s 10.1.1.0/255.255.255.0 -j ACCEPT2、只运访问本机的SSH服务(只允许远程ssh登录到本机)# iptables -P INPUT DROP# iptables -A INPUT -p tcp --dport 22 -j ACCEPT <---定义端口的参数 --dport 还有就是 定义源端口 --source-port --sport定义目的端口 --destination-port --dport3、定义连续端口 iptables -A INPUT -p tcp --dport 20:100 -j ACCEPT <---允许访问 20到100的端口4、定义多端口 <---引入一个“模块”的概念 iptables -A INPUT -m multiport -p tcp --dports 22,80,110 -j ACCEPT -m 指定模块 multiport 支持多端口的扩展模块5、允许和内网的客户(10.1.1.0/24)进行传输数据(包括ping) iptables -P INPUT DROP iptables -A INPUT -p ALL -i eth0 -s 10.1.1.0/24 -j ACCEPT6、决绝访问色情网站www.baidu.com iptables -A OUTPUT -d www.baidu.com -j DROP7、通过硬件地址进行过滤 -m mac --mac-source [!] address iptables -A INPUT -m mac --mac-source 00:25:86:8E:AF:C8 -p icmp -j REJECT 注意REJECT 和 DROP 区别8、定义连续的IP地址 iptables -A INPUT -m iprange --src-range 10.1.1.140-10.1.1.254 -j DROP9、对外只开放web服务,其他一切不放行,不允许进来也不允许出去# iptables -P OUTPUT DROP# iptables -P INPUT DROP# iptables -A INPUT -p tcp --dport 80 -j ACCEPT <--tcpdump tcp port 80 只看到进来的,没有出去的# iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT10、综合应用: 本机需要开放的服务有: ssh(22) 、 web(80) 、 ftp(21 20) 、 DNS(53) 、pop3(110)、pop3s(995)、IMAP(143)、IMAPS(993)、smtp(25)等服务。 其中web 、ftp、pop3、pop3s、IMAP、IMAPS 允许所有网络的人访问; ssh 只允许本地局域网中的某个MAC地址访问 只允许本地局域网的用户发送邮件 只允许本地局域网的用户查询DNS# modprobe ip_conntrack_ftp# iptables -P INPUT DROP# iptables -P OUTPUT DROP# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# iptables -A INPUT -i lo -j ACCEPT# iptables -A INPUT -p tcp -m multiport --destination-ports 20,21,80,110,143,993,995 -j ACCEPT# iptables -A INPUT -m mac --mac-source 00:25:86:8E:AF:C8 -p tcp -s 10.1.1.0/24 --dport 22 -j ACCEPT# iptables -A INPUT -p tcp --dport 25 -s 10.1.1.0/24 -j ACCEPT# iptables -A INPUT -p tcp --dport 53 -s 10.1.1.0/24 -j ACCEPT# iptables -A INPUT -p udp --dport 53 -s 10.1.1.0/24 -j ACCEPT
练习题icmp:
icmp:0 8
0:应答请求
8:ping请求
icmp对照表
假如我们允许自己ping别人,但是别人ping自己ping不通如何实现呢?
分析:对于ping这个协议,进来的为8(ping),出去的为0(响应).我们为了达到目的,需要8出去,允许0进来在出去的端口上:iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT 在进来的端口上:iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP iptables -A INPUT -p icmp --icmp-type 8 -j DROP 小扩展:对于127.0.0.1比较特殊,我们需要明确定义它 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/:存放模块的位置 -m connlimit:每个IP的并发连接数(TCP) --关注的是新发起的连接(NEW --syn) mount -o loop rhel55.iso /mnt rpm -Uvh /mnt/Server/iptables-1.3.5-5.3.el5_4.1.i386.rpm iptables -t filter -A INPUT -s 192.168.1.115 -p tcp --dport 22 -m connlimit --connlimit-above 1 -j DROP iptables -t filter -A INPUT -s 192.168.1.115 -p tcp --dport 22 -m connlimit ! --connlimit-above 1 -j ACCEPT -m icmp:ping包请求与发送 [root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT [root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT [root@ ~]# iptables -A INPUT -p icmp -j DROP [root@ ~]# iptables -A OUTPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT ==> 0 相当于 echo-reply [root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT ==> 8 相当于 echo-request -m ipranges:IP范围 [!] --src-range ip-ip Match source IP in the specified range [!] --dst-range ip-ip Match destination IP in the specified range [root@ ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.1.1-192.168.1.100 -j ACCEPT [root@ ~]# iptables -t filter -A FORWARD -m iprange --dst-range 192.168.1.101-192.168.1.252 -j DROP -m limit:速率限制 [root@ ~]# watch iptables -L INPUT -nv [root@ ~]# iptables -A INPUT -s 192.168.1.115 -p icmp -m icmp --icmp-type echo-request -m limit --limit 1/second --limit-burst 1 -j ACCEPT [root@ ~]# iptables -A INPUT -s 192.168.1.115 -p icmp -m icmp --icmp-type echo-request -j DROP -m mac:匹配源地址的 MAC 地址 [root@ ~]# iptables -A INPUT -m mac --mac 00:0C:29:58:01:9A -p icmp -j DROP -m multiport:多端口 [root@ html]# iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 22:25,25,110,80,53,21 -j DROP -m state(NEW/ESTABLISHED/RELATED/INVALID): NEW --第一个数包,跟TCP状态无关 ESTABLISHED --第二个数据包 RELATED --已经发生关系的数据(FTP) INVALID --无效数据包
个人简单的防火墙(状态):
ESTABLISHED 不允许其他主机发起的主动访问,只允许本地主机主动发起的发功能文以及lo通讯
[root@stu110 ~]# iptables -P INPUT DROP
[root@stu110 ~]# iptables -A INPUT -i lo -j ACCEPT
[root@stu110 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@stu110 ~]# iptables -A INPUT -p icmp -m state --state NEW -m limit --limit 1/second --limit-burst 3 -j ACCEPT
[root@stu110 ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
RELATED:已发生关系的
(1)vsftpd数据传输(考虑模式,默认是主动模式)
主动模式:
21 --控制端口
20 --数据端口
被动模式:
21 --控制端口
1024+ --数据端口
[root@mail ~]# insmod /lib/modules/2.6.18-164.el5xen/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko 需要模块的支持,内核才能支持 RELATED状态
[root@mail ~]# iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
[root@mail ~]# iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
被动模式/主动:
service vsftpd start
iptables -A INPUT -p tcp -m multiport --dport 21 -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
modproble ip_conntrack_ftp --加载FTP状态自动跟踪模块,它可以完成自动切换端口
-m string:字符串内容进行匹配(局限大,效率低,不太用)
[root@ ~]# iptables -A INPUT -s 192.168.1.8 -p tcp --dport 22 -m string --algo bm --string "sex" -j DROP
-m time:时间限制
[root@ linux]# insmod /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/ipt_time.ko
[root@ linux]# iptables -t filter -A INPUT -s 192.168.1.1.0/24 -m time --timestart 9:00 --timestop 17:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT
[root@ linux]# iptables -t filter -A INPUT -s 192.168.1.1.0/24 -p tcp --dport 80 -j DROP

声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。




欢迎光临 51学通信论坛2017新版 (http://bbs.51xuetongxin.com/) Powered by Discuz! X3