Linux 防火墙
2013-02-03 23:15 胡炯 阅读(374) 评论(0) 编辑 收藏 举报这里给大家提供一个开启和关闭LINUX 放火墙的命令以及 如何查看防火墙是否安装和配置情况
解决办法:
关闭: /etc/rc.d/init.d/iptables stop
启动: /etc/rc.d/init.d/iptables start
查看当前配置:iptables -L
service iptables stop |start
chkconfig iptables --list
service iptables start 无反应的解决方法
初始化iptables。
iptables -F
service iptables save
service iptables restart
一些软件的默认端口:
ftp用到端口是 20 21
ssh 端口是 22
http端口是 80
telnet端口是 23
rsync端口是 873
svn 端口3690
pop3端口110
smtp端口25
dns端口53
mysql端口3306
nfs端口111
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
[root@tp ~]# iptables -X 清除预设表filter中使用者自定链中的规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
target prot opt source destination
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
Iptables防火墙 官网www.netfilter.org
Iptables是跟内核一起的,不用手动安装
Iptables防火墙可根据七层协议
表和链关系
表(table)是链(chains)的容器,链是规则(rules)的容器
默认的4个规则表
表都是小写
raw表:对数据包进行状态跟踪
mangle表:为数据包设置标记,流量控制类似于QOS
nat表:修改数据包中得源,目标IP地址和端口
filter表:数据包过滤 如果没有指定表的类型,默认指定filter表
-t参数来指定表的类型 table
默认的5中规则链
链都是大写
INPUT:进入的数据包 与本机有关的数据包,用于防护本机
OUTPU:出去的数据包 与本机有关的数据包,用于防护本机
FORWARD:转发数据包 与本机无关数据包,用于防护一个网络
POSTROUTING:路由选择后处理数据包
PREROUTING:路由选择前处理数据包
每一个链中默认都有一条缺省的策略
#iptables –L 列出所有的策略
#iptables –t nat –L 查看nat表的链结构,可以看到有三个链。
数据包过滤的优先顺序
规则表之间的优先顺序流程
raw、mangle、nat、filter
规则链之间的优先顺序流程
入站数据:PREROUTING、INPUT
出站数据:OUTPUT、POSTROUTING
转发数据:PREROUTING、FOURWARD、POSTROUTING
数据包的动作
写动作的时候都是大写
ACCEPT 允许数据包通过
DROP 丢弃数据包,就好像该数据包没有被接受一样(直接丢弃)常用
LOG 把数据信息记录到syslog
REJECT 丢弃数据包,同时发送适当的响应报文(丢弃后并返回一个信息说为什么丢弃)
RETURN 在调用链中继续处理数据包
Iptables 命令的语法格式
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 动作]
如果不指定表名,默认是filter表
如果不指定表里的链,默认是所有链
iptables -A 在链尾创建一条规则
-D 删除一条规则
-I 在指定位置(不指定则在链首)插入一条规则
-F 清空所有规则
-P 设置指定链的默认策略
-p 指定协议
-s 源
-d 目标
-R 替换指定位置或内容的规则
-N 创建一条自定义规则链
-X 删除一条自定义规则链
端口匹配
--sport 源端口
--dprot 目标端口
-i 定义指定某网卡的进入 如-i ech0 多个网卡选择0网卡
-o 定义指定某网卡的出口
TCP标记匹配
使用--tcp-flags 如SYN(序列号),ACK(确认号),RST,
ICMP类型匹配
使用—icmp-type 如 echo-request ,echo-reply
显式条件匹配
-m
MAC地址匹配
-m mac –mac-source 00:00:00:00:00:00
多端口匹配
-m multiport –dport 20,21,25
多IP地址匹配
-m iprange --src-range 192.168.1.20-192.168.1.30
数据包状态匹配
-m state
NEW 新发起的链接
ESTABLISHED 服务器正常响应的数据包 established:成立
RELATED与已有连接相关性的数据包(如FTP上传/下载建立的数据连接,这个连接与之前的FTP控制连接存在相关性)related:相关
数据包控制
SNAT 修改数据包的源地址信息
DNAT 修改数据包的目标地址信息
#iptables –t filter –I INPUT –p icmp –s 0.0.0.0/0 –d 192.168.1.2/24 –j DROP
#iptables –t filter –I OUTPUT –p icmp –j DROP 都可以
#iptables –t filter –D INPUT 1 这个1是行号
#/etc/init.d/iptables save 永久保存iptables命令
保存到/etc/sysconfig/iptables文件里 ,不保存重启之后所有规则都没有了
列表查看规则
-L 列表查看各条规则信息
--line-numbers 查看规则时显示行号
-n 以数字显示IP地址,端口号等信息,和协议号
-v 显示数据包个数,字节数等信息
#iptables –L INPUT –line-numbers 查看filter表里的INPUT规则的行号
Iptables在实际应用中应该拒绝一切。不能进不能出
#iptables –P INPUT DROP 默认是policy ACCEPT
#iptables –P OUTPUT DROP
#iptables –P FORWARD DROP
查看协议
/etc/services 存放系统所支持的所有服务
/etc/protocols 存放系统所支持所有协议
#iptables –p icmp –help | less
防火墙规则
拒绝所有机器PING防火墙,允许防火墙PING所有机器
首先拒绝所有一切通信
#iptables –F 清空策略
#iptables –p icmp –help | more 查看icmp的类型
#iptables –A OUTPUT –p icmp --icmp-type echo-request –j ACCEPT 允许出去的请求包
#iptables –A INPUT –p icmp –icmp-tyep echo-reply –j ACCEPT 允许回来的回复的包
#iptables-save 保存
指定协议时也可以指定它的协议号,icmp协议号是1在/etc/protocols文件里可查看
允许使用SSH连接
在指定端口的时候必须先指定协议
#iptables –A OUTPUT –p tcp --sport 22 –s 172.16.1.200 –d 172.16.1.100 –j ACCEPT
#iptables –A INPUT –p tcp –dport 22 –s 172.16.1.100 –d 172.16.1.200 –j ACCEPT
允许本机127.0.0.1回环地址 保证一些服务的正常运行
#iptables –A INPUT –s 127.0.0.1 –d 172.0.0.1 –j ACCEPT
#iptables –A OUTPUT –s 127.0.0.1 –d 127.0.0.1 –j ACCEPT
MAC地址匹配
#iptables –A FORWARD –m mac –macc-source 00:00:00:00:00:00 –j DROP
多端口匹配
以逗号区分端口号
#iptables –A INPUT –p tcp –m multiprot –dport 20,21,25,1250-1260 –j ACCEPT
多IP地址匹配
#iptables –A FORWARD –p tcp –m iprange --src-range 192.168.1.20-192.168.1.30 –j DROP
数据包状态匹配
-m state
#iptables –A FORWARD –p tcp –m state --state NEW ! --syn –j DROP
NEW 新发起的一个连接
! 非(不是)
--syn TCP连接的第一个握手数据包
#iptables –A INPUT –p tcp –m state --state NEW –j DROP 丢弃TCP发起的连接包
#iptables –A INPUT –p tcp –m state --state ESTABLISHED,RELATED –j ACCEPT
只允许 ESTABLISHED,RELATED数据包状态,(拒绝TCP进入)
SNAT策略
局域网主机共享一个公网IP地址接入INTERNET
SNAT修改数据包的源IP地址
实验一
SNAT source
三台虚拟机,外网的WWW服务,iptables防火墙,内网xp客户端
WWW服务
搭建外网的WWW服务,apache课件有讲
Iptables防火墙
#iptables –F 清空所有策略
#iptables –P INPUT DROP 拒绝所有一切
#iptables –P OUTPUT DROP
#iptables –P FORWARD DROP
#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
#iptables –I INPUT –p tcp --dport 22 –s 0.0.0.0/0 –d 61.233.154.1 –j ACCEPT
#iptables –I OUTPUT –p tcp --sport 22 –s 61.233.154.1 –d 0.0.0.0/0 –j ACCEPT
上面基本环境搭好
#vi /etc/sysclt.conf
net.ipv4.ip_forward = 1 开启ipv4的路由转发功能
1 表示开启
0表示关闭
#iptables –A FORWARD –s 172.16.0.0/16 –j ACCEPT 设置转发链,进入和出去
#iptables –A FORWARD –d 172.16.0.0/16 –j ACCEPT
#iptables –t nat –I POSTROUTING –s 172.16.0.0/16 –o eht1 --to-source 61.233.154.1
POSTROUTING 路由后规则
-s 局域网内网段
-o eth1 从eth1网卡出去 (可不指定)
--to-source 指定外网地址
XP客户端
访问外网WWW服务器,成功
可以在XP上抓下包,抓到包源地址都是61.233.154.1地址,说明SNAT做对了
使用地址伪装.如果外网地址不是固定IP地址,经常改动(ADSL),如果是ADSL接入外网的,那么外网接口名称就是ppp0,ppp1
把以上-j SNAT –to-source 改成 –j MASQUERADE
#iptables –t nat –A POSTROUTING –s 172.16.0.0/16 –o ppp0 –j MASQUERADE
实验二
DNAT destination
通常用于往外网发布局域网内的服务器
#iptables –t nat –A PREROUTING –i eth1 –d 61.233.154.1 –p tcp –dport 80 \
-j DNAT --to-destination 172.16.1.2
客户端
访问公司外网地址
成功
WWW服务器查看访问记录
#tail /var/log/httpd/access_log
61.233.154.2主机访问过。