Iptables原理
现在防火墙主要分以下三种类型:包过滤、应用代理、状态检测
包过滤防火墙:现在静态包过滤防火墙市面上已经看不到了,取而代之的是动态包过滤技术的防火墙哈~
代理防火墙:因一些特殊的报文攻击可以轻松突破包过滤防火墙的保护,比如大家知道的SYN攻击、ICMP洪水攻击,所以以代理服务器作为专门为用户保密或者突破访问限制的数据转发通道的应用代理防火墙出现了哈~其使用了一种应用协议分析的新技术。
状态检测防火墙:其基于动态包过滤技术发展而来,加入了一种状态检测的模块,进一点发展了会话过滤功能,会话状态的保留是有时间限制的,此防火墙还可以对包的内容进行分析,从而避免开放过多的端口。
netfilter/iptables IP数据包过滤系统实际上由netfilter和iptables两个组件构成。netfilter是集成在内核中的一部分,其作用是定义、保存相应的规则,而iptables是一种工具,用来修改信息的过滤规则及其他配置,我们可以通过iptables来设置一些适合我们企业需求环境的规则哈~,而这些规则会保存在内核空间之中。
netfilter是Linux核心中的一个通用架构,其提供了一系列的表(tables),每个表由若干个链(chains)组成,而每条链可以由一条或若干条规则(rules)组成。实际上netfilter是表的容器,表是链的容器,而链又是规则的容器。
1、禁止ping(禁止ping出去,也禁止ping进来)
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j DROP
[root@localhost ~]# ping 192.168.101.1
为了让本地(ping 127.0.0.1)能ping通,添加以下规则(规则有顺序的,匹配了某条规则,就不会继续往下匹配)
[root@localhost ~]# iptables �CA INPUT -p icmp -i lo -j ACCEPT //追加一条规则到某个链,默认在最后一行插入规则(所以这样做是行不通的)
[root@localhost ~]# iptables -I INPUT -p icmp -i lo -j ACCEPT //默认在规则表最前面插入新规则
或者
[root@localhost ~]# iptables �CI 1 INPUT -p icmp -i lo -j ACCEPT //把规则放到第一行,原来的第一行变第二行
2、允许ping 127.0.0.1 和 允许 ping 192.168.101.0/24 ,其他服务都禁止
[root@localhost ~]# iptables -A INPUT -p icmp -i lo -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -s 192.168.101.0/255.255.255.0 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -j DROP
或者
[root@localhost ~]# iptables -P INPUT DROP //定义默认策略,当在规则表里找不到匹配的规则就采取策略的动作
[root@localhost ~]# iptables -A INPUT -p icmp -i lo -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -s 10.1.1.0/255.255.255.0 -j ACCEPT
3、只允许访问本机的SSH服务(只允许远程SSH登录到本机)
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT //--dport定义端口的参数
定义源端口 --source-port --sport
定义目的端口 --destination-port �Cdpor
4、定义连续端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:100 -j ACCEPT //允许访问 20到100的端口
5、定义多端口
[root@localhost ~]# iptables -A INPUT -m multiport -p tcp --dports 22,80,110 -j ACCEPT
-m 指定模块 multiport 指定多端口的扩展模块
6、允许和内网的客户(192.168.101.0/24)进行传输数据(包括ping)
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -A INPUT -p ALL -i eth0 -s 192.168.101.0/24 -j ACCEPT
7、拒绝访问192.168.101.100
[root@localhost ~]# iptables -A OUTPUT -d 192.168.101.100 -j DROP
8、通过硬件地址进行过滤
-m mac --mac-source [!] address
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00-50-56-C0-00-01 -p icmp -j REJECT //vmnet1物理地址
9、定义连续的ip地址
[root@localhost ~]# iptables -A INPUT -m iprange --src-range 192.168.101.1-192.168.101.99 -j DROP
10、允许内网主机登录MSN和QQ相关设置
QQ能够使用TCP80、8000、443及UDP8000、4000登录,而MSN通过TCP1863、443验证。因此只需要允许这些端口的FORWARD转发即可以正常登录。
iptables -A FORWARD -p tcp --dport 1863 -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -p tcp --dport 8000 -j ACCEPT
iptables -A FORWARD -p udp --dport 8000 -j ACCEPT
iptables -A FORWARD -p udp --dport 4000 -j ACCEPT
11、允许内网主机收发邮件
客户端发送邮件时访问邮件服务器的TCP25端口。接收邮件时访问,可能使用的端口则较多,UDP协议以及TCP协议的端口:110、143、993及995
smtp:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
pop3:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p udp --dport 110 -j ACCEPT
imap:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 143 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p udp --dport 143 -j ACCEPT
imaps:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 993 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p udp --dport 993 -j ACCEPT
pop3s:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 995 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p udp --dport 995 -j ACCEPT
12、NAT端口映射设置
由于局域网的地址为私网地址,在公网上不合法哈~所以必须将私网地址转为服务器的外部地址进行地址映射哈~连接外网接口为ppp0
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE
13、内网机器对外发布WEB网站
内网WEB服务器IP地址为192.168.0.3,我们需要进行如下配置哈~,当公网客户端访问服务器时,防火墙将请求映射到内网的192.168.0.3的80端口
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80
14、DNS相关设置
为了客户端能够正常使用域名访问互联网,我们还需要允许内网计算机与外部DNS服务器的数据转发。
开启DNS使用UDP、TCP的53端口
iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
15、保存与恢复iptables配置
保存:iptables-save
iptables-save [-c] [-t 表名]
-c:保存包和字节计数器的值。可以使在重启防火墙后不丢失对包和字节的统计
-t:用来保存哪张表的规则,如果不跟-t参数则保存所有的表
可以使用重定向命令来保存这些规则集
iptables-save > /etc/iptables-save
恢复:iptables-restore
iptables-restore [-c] [-n]
-c:如果加上-c参数则表示要求装入包和字节计数器
-n:表示不覆盖己有的表或表内的规则,默认情况下是清除所有己存在的规则
使用重定向来恢复由iptables-save保存的规则集
iptables-restore > /etc/iptables-save
如果要在服务或系统重启后依然生效
service iptables save