Iptables防火墙
防火墙的实现既有基于硬件的又有基于软件的
硬件 CISCO的 PIX ASA
Juniper netscreen ssg
神州数码的 DCFW
H3C 的 secpath
天融信
软件 windows 下的 IAS Internet Security Acceleration
Linux下的 netfilter架构/iptables
Iptables是网络层防火墙
如果想精确控制 iptables+L7+squid 建构
Iptables的链(规则的集合)
INPUT OUTPUT FORWARD PREROUTING POSTROUTING
Iptables的表
Nat 表 包含以下几个链
PREROUTING (路由判断之前主要用于DNAT)
POSTROUTING (路由判断之后 主要用于SNAT)
INPUT (一般不用)
Filter表 包含以下几个链
INPUT (主要用于对防火墙本身的访问)
OUTPUT (用于从防火墙本身出发的控制)
FORWARD (对经过防火墙的规则控制)
Mangle 表 (主要用于qos的设置)
Iptables -t filter -L -v -n
-t 表示后接那个表 (如果没有-t 表名 默认是filter表)
-L list 列出所用
-v 详细信息
-n 数字显示
iptables -P INPUT DROP
将INPUT链的默认规则设为禁止
Service iptables stop start restart save
停止、开启、重启、保存iptables
Iptables的语法
iptables -t 表名 指令 链名称 选项 参数
指令
-A --apennd 是添加一条规则
-D --delete 链名称 规则编号
-I --insert 链名称 规则编号 (在编号之前插入一条规则)
-R --replace 链名称 规则编号 (替换该规则)
-N --new 自定义链名称 (自定义的链必须被引用才能起作用)
-X 删除空的自定义链
-F --flash 清空链
-P --policy 设置默认规则
选项
来源
-s 地址/子网/网络
-i 网卡接口名称 【-i eth0】 (表示从eth0网卡进入的)
目标
-d 地址/子网/网络
-o 网卡接口名称 【-o eth1】 (表示从eth1网卡进入的)
协议
网络层协议 ip icmp
传输层协议 tcp udp --sport --dport
状态
NEW (三次握手的SYN 建立连接状态)
ESTABLISHED (含ACK的确认状态)
RELATED (含二次连接的 多端口的服务状态 像FTP 的主被动模式)
动作
-j --jump (跳转) ACCEPT
REJECT
DROP
SNAT 或(MESQUERADE 它支持通过动态获取的ip snat)
DNAT
REDIRECT (重定向)
模块
-m (time state string iprange Layer7)
例如1 将INPUT 和 OUTING链默认规则设为DROP 并能通过ssh连接到linux,进行远程管理 及能ping 通linux服务器
Iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
Iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT
Iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Iptables -P INPUT DROP
Iptables -P OUTPUT DROP
例2
通过状态控制,是我的client 192.168.2.1 能连上linux server
Iptables -t filter -A INPUT -s 192.168.2.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
Iptables -t filter -A OUTPUT -d 192.168.2.1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
例3
对内外做SNAT转换 并且内网里有一台 服务器(192.168.2.100)可以远程管理
打开linux的数据包转发功能
Iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to 192.168.101.10
这样内网就基本上可以访问外网了
访问外网的FTP 在执行如下命令
Modprobe ip_nat_ftp 加载一下ftp转换模块
如果外网卡的接口是通过拨号获取的动态ip的话可以这样做
iptables -t nat -R POSTROUTING1-s 192.168.2.0/24 -o eth1 -j MESQUERADE
iptables -t nat -A PREROUTING -d 192.168.101.2 -p tcp --dport 3389 -i eth1 -j DNAT --to 192.168.2.100
Iptables -P INPUT DROP
Iptables -P OUTPUT DROP --设置默认策略拒绝
iptables模块介绍
1、string(字符串匹配,可以用做内容过滤)
iptables -I FORWARD -m string --string "腾讯" -j DROP
iptables -I FORWARD -s 192.168.2.100 -m string --string "qq.com" -j DROP
iptables -I FORWARD -s 192.168.2.0/24 -m string --string "宽频影院" -j DROP
iptables -I FORWARD -s 192.168.2.0/24 -m string --string "色情" -j DROP
iptables -I FORWARD -s 192.168.2.0/24 -p tcp --sport 80 -m string --string "广告" -j DROP 2.
2、comment (备注匹配,可以支持最多256个字符)
Supported options:
--comment COMMENT
翻译:这个选项增加CONFIG_IP_NF_MATCH_COMMENT,补充一个注释匹配模块.这个匹允许你增加一个备注都任何规则,这个备注最多支持256个字符,例如
(例子:)
-A INPUT -s 192.168.0.0/16 -m comment --comment "A privatized IP block"
译者:我是这样测试使用这个comment
iptables -I FORWARD -s 192.168.2.100 -p tcp --dport 80 -j DROP -m comment --comment "the bad guy can not online"
iptables -I FORWARD -s 192.168.2.100 -m string --string "qq.com" -j DROP -m comment --comment "denny go to qq.com"
这样在iptables -L时,就看到每条规则后面出现备注的内容.可以提高可读和理解该条规则的作用.
3. connlimit(同时连接个数限制匹配)
:这个增加一个iptables匹配允许你限制每个客户ip地址的并发tcp连接,即同时连接到一个服务器个数.
例子:
(允许每个客户机同时两个telnet连接)
iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
(你也可以匹配其他的方法:)
iptables -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT
(限制80端口最多同时16个连接请求)
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
模块 connlimit 作用:连接限制
--connlimit-above n 限制为多少个
--connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.
这个主要可以限制内网用户的网络使用,对服务器而言则可以限制每个ip发起的连接数...比较实用
例如:只允许每个ip同时5个80端口转发,超过的丢弃:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
例如:只允许每组C类ip同时10个80端口转发:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
例如:为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃.
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
4. time(时间匹配,iptables默认么加载)
Match only if today is one of the given days. (format: Mon,Tue,Wed,Thu,Fri,Sat,Sun ; default everyday)
(只是匹配已经给出的天,格式Mon,Tue,Wed,Thu,Fri,Sat,Sun ;默认每天)
(开始日期 日期)
Match only if it is after `date' (Inclusive, format: YYYY]]]] h,m,s start from 0 ; default to 1970)
(只是匹配这个开始日期值之后的(包括,格式: YYYY]]]] h,m,s start from 0 ; 默认是1970):
Match only if it is before `date' (Inclusive, format: YYYY]]]] h,m,s start from 0 ; default to 2037)
(只是匹配这个开始日期值之前的(包括,格式: YYYY]]]] h,m,s start from 0 ; 默认是2037):
(例子:)
-A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri
will match packets that have an arrival timestamp in the range 8:00->18:00 from Monday to Friday.
(上面将匹配从到达日期是星期一至星期五时间从8:00至18:00的包)
-A OUTPUT -m time --timestart 8:00 --timestop 18:00 --Days Mon --date-stop 2010
will match the packets (locally generated) that have a departure timestamp in the range 8:00->18:00 on Monday only, until 2010
(上面将匹配本地产生的时间范围直到2010年为止的每个星期一8:00至18:00的包)
NOTE: the time match does not track changes in daylight savings time
5. iprange (ip范围匹配,iptables默认没有加载该模块)
这个补丁名令匹配源/目标 IP地址可以倚着给出的地址范围进行匹配
(例子)
iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
这个例子是允许源ip地址范围192.168.1.5-192.168.1.124的包通过
iptables -A FORWARD -m iprange --dst-range 10.0.0.0-10.255.255.255 -j ACCEPT
这个例子是允许目标ip地址范围10.0.0.0-10.255.255.255的包通过
等等 iptables支持多达上百个模块(在/lib/iptables/),功能很丰富。关于iptables就介绍到这吧!!!!!!。