getenforce 查看selinux的状态
vi /etc/selinux/config 进去改他的配置文件 永久设置他的状态
setenforce 0 临时生效
2. Selinux
配置文件 /etc/selinux/config 三种形式:enforcing, permissive, disabled
SELINUX=disabled 更改完成重启系统才可以生效
setenforce 0/1 getenforce yum install -y libselinux-utils
3. Netfilte -- iptables是 iptables是netfiler的一个工具
参考: http://www.cnblogs.com/bangerlee/archive/2013/02/27/2935422.html
四个表,五个链
========================
filter 这个表主要用于过滤包的,是系统预设的表,内建三个链INPUT、OUTPUT以及FORWARD。
INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。
nat 主要用处是网络地址转换、端口映射,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。
mangle 主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time ToLive,生存周期)值以及为数据包设置Mark标记,以实现Qos (Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。
raw 对报文设置一个标志,决定数据包是否被状态跟踪机制处理 只有两个链:OUTPUT、PREROUTING
五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
=================================
commond
A 添加
D 删除
I 插入
R 修改规则
L 查看表规则
F 清空
Z 清空
N 不常用。清除所有自定义规则
X 不常用。
P 默认规则
p 指定他的协议
s 指定他的ip
iptables -nvL 查看规则
iptables -F 清除当前的规则
iptables -Z 计数器清零
iptables –t filter –D INPUT 1 表示删filter表中INPUT链的第一条规则
iptables –F INPUT 全部清除INPUT链的规则
================================
service iptables status 查看iptables状态
设置iptables开机启动
chkconfig iptables on
chkconfig iptables off
现在防火墙主要分以下三种类型:包过滤、应用代理、状态检测
iptables-save用来把当前的规则存入一个文件里以备iptables-restore使用
iptables-restore用来装载由iptables-save保存的规则集
规则备份与恢复:
service iptables save 这样会保存到/etc/sysconfig/iptables
iptables-save > myipt.rule 可以把防火墙规则保存到指定文件中
iptables-restore < myipt.rule 这样可以恢复指定的规则
cat /etc/sysconfig/iptables 查看默认的规则
想要下次重启规则生效的步骤:
1.iptables -F
2.service iptables save 要保存到配置文件里面规则才永久生效,不然清空了重启了又恢复了
3.然后重启就生效了
service iptables save 保存规则 保存的规则文件为:/etc/sysconfig/iptables
service iptables stop 可以暂停防火墙,但是重启后它会读取/etc/sysconfig/iptables 从而启动防火墙,另外即使我们停止防火墙,但一旦我们添加任何一条规则,它也会开启。
==================================
iptables -t 指定表名,默认不加-t则是filter表
查看当前防火墙的设置
iptables –L 默认查看的是filter表
iptables –t nat –L
iptables –t managle –L
iptables -t nat -F 清除规则
iptables规则相关:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 放行22端口
iptables -I INPUT -p tcp -s 22.129.48.82 --dport 22 -j ACCEPT
iptables -I INPUT -s 22.129.48.82 -j ACCEPT
增加/删除规则
iptables -A/-D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
插入规则
iptables -I INPUT -s 1.1.1.1 -j DROP/ACCEPT/REJECT
A和I这两参数不一样,A是追加的最后面,I是插在前面的规则
iptables -nvL --line-numbers 查看规则带有id号
iptables -D INPUT 1 根据规则的id号删除对应规则
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
别人访问不了本机,本机也不能向外发数据
iptables -P INPUT DROP 用来设定默认规则,默认是ACCEPT ,一旦设定为DROP后
只能使用 iptables -P ACCEPT 才能恢复成原始状态,而不能使用-F参数
实例:
针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.0.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。 脚本如下:
#! /bin/bash
ipt="/sbin/iptables"
$ipt -F; $ipt -P INPUT DROP;
$ipt -P OUTPUT ACCEPT; $ipt -P FORWARD ACCEPT;
$ipt -A INPUT -s 192.168.0.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
=============================
更改默认规则
1.sh
#! /bin/bash
iptables -F
iptables -P INPUT DROP 设置默认规则为DROP(建议不要改)允许下面的
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
上面设置后,如果不行,就必须iptables -P INPUT ACCEPT
因为他还有其他的端口和机器通讯
==============================
nat表应用:
路由器就是使用iptables的nat原理实现
假设您的机器上有两块网卡eth0和eth1,其中eth0的IP为192.168.10.11,eth1的IP为172.16.10.11 。eth0连接了intnet 但eth1没有连接,现在有另一台机器(172.16.10.12)和eth1是互通的,那么如何设置也能够让连接eth1的这台机器能够连接intnet?
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
==========================================================================
禁止内部人员访问外部指定的网站
iptables -A FORWARD -d www.123.com -j DROP
匹配条件
按网络接口匹配
iptables -A OUTPUT -o eth0 -j DROP
备注:将接口eth0流出的数据DROP掉
iptables -A INPUT -i eth0 -j DROP
备注:将流入接口eth0的数据DROP掉
按地址匹配
-s 匹配源地址
iptables -A INPUT -s 192.168.3.100 -j DROP
备注:将来自192.168.3.100 的任何请求DROP掉
-d 匹配目的地址
iptables -A OUTPUT -d 192.168.3.100 -j DROP
备注:将本机发往192.168.3.100 的任何请求DROP掉
注意,可以是单个ip,网段192.168.3.1/24,域名,不设则变任何地址
按协议类型匹配
-p 匹配协议类型
iptables -A INPUT -s 192.168.3.100 -p tcp --dport 22 -j DROP
备注:禁止192.168.3.100 的客户机连接本机22端口
iptables -A INPUT -p icmp -j DROP 禁止别人ping本机
iptables -A INPUT -p 1 --icmp-type 8 -j DROP
备注:可以ping通其他客户机,但是其他客户机ping不通本机----------------常用
按端口匹配
-sport 匹配来源端口
iptables -A INPUT -p tcp --sport 80 -j DROP
备注:将来自80端口的请求DROP掉
-dport匹配目的端口
iptables -A INPUT -s 192.168.3.1/24 -p tcp --dport 80 -j DROP
备注:将来自192.168.3.1/24的针对本机80端口的请求DROP掉
注意,-sport,-dport 必须配合参数-p使用
可以指定某个端口,也可以是端口范围,比如 :2000(2000以下端口)
2000:3000(2000-3000端口) 3000: (3000以上端口)
iptables -A INPUT -s 192.168.3.1/24 -j ACCEPT
备注:来自192.168.3.1/24 的所有请求ACCEPT
iptables -A INPUT -s 192.168.3.1 -j DROP
备注:将来自192.168.3.1 的请求全部DROP掉
=============================================================================
应用Iptables规则
示例(1)、允许WWW
iptables –t filter –A INPUT –p tcp –dport 80 –j ACCEPT
该规则被添加到filter表的INPUT链,允许目的端口是80的数据包。
示例(2)、在内部接口上允许DHCP
iptables –A INPUT –i eth0 –p tcp --sport 68 --dport 67 ACCEPT
iptables –A INPUT –i eth0 –p ucp --sport 68 --dport 67 ACCEPT
以上同时允许TCP和UDP协议。
===========================
根据uid 或者gid 进行限制
-m owner 参数
-m owner [!] --uid-owner $AN_UID
iptables -A OUTPUT -p tcp --dport 23
-m owner --uid-owner 500 -j REJECT
iptables -A OUTPUT -p tcp --dport 23
-m owner --gid-owner 500 -j REJECT
注:-m owner 仅仅对OUTPUT链有效
普通的地址伪装
透明代理
iptables -t nat -A PREROUTING -s
192.168.10.0/24 -p tcp -m multiport --dport
80,443 -j REDIRECT --to-port 3128
(squid 服务需要特别的配置)
Squid 的配置
在能正常工作的squid.conf 中增加下列四行
即可:
? httpd_accel_host virtual
? httpd_accel_port 80
? httpd_accel_with_proxy on
? httpd_accel_uses_host_header on
穿透防火墙.提供服务
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT –to 192.168.10.156:80
几种流向的顺续为
PREROUTING --->INPUT--> OUTPUT-->
POSTROUTING
请总结:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD各条链处理数据的对象,以及数据经过防火墙时通过各链的顺序。
=====================
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 开启22端口
减少不安全的端口连接,不然本机访问这些端口
[[email protected] ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
我们只允许192.168.0.3的机器进行SSH连接
[[email protected] ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链
对正在转发链的监控.开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)
[[email protected] ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
[[email protected]】 ~]# iptables -A FORWARD -i eth1 -o eh0 -j
ACCEPT丢弃坏的TCP包
[[email protected] ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j
DROP处理IP碎片数量,防止攻击,允许每秒100个
[[email protected] ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
[[email protected] ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j
ACCEPT我在前面只所以允许ICMP包通过,就是因为我在这里有限制.
配置一个NAT表放火墙1,查看本机关于NAT的设置情况
[[email protected] rc.d]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235Chain OUTPUT (policy ACCEPT)
target prot opt source destination 我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).
当然你如果还没有配置NAT 的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的如果你想清除,命令是
[[email protected] ~]# iptables -F -t nat
[[email protected] ~]# iptables -X -t nat
[[email protected] ~]# iptables -Z -t nat2,添加规则添加基本的NAT地址转换
添加规则,我们只添加DROP链.因为默认链全是 ACCEPT.防止外网用内网IP欺骗
[[email protected] sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[[email protected] sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[[email protected] sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
例:
禁止与211.101.46.253的所有连接
[[email protected] ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
禁用FTP(21)端口
[[email protected] ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j
DROP这样写范围太大了,我们可以更精确的定义.
[[email protected] ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.
如web(80端口)连接.按照我写的,你只要找到QQ,MSN等其他软件的 IP地址,和端口,以及基于什么协议,只要照着写就行了
最后drop非法连接
[[email protected] ~]# iptables -A INPUT -m state --state INVALID -j DROP
[[email protected] ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[[email protected] ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
[[email protected] ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[[email protected] ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[[email protected] ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[[email protected] ~]# service iptables restart
这样就可以完工了
========================================================================================
五个链
INPUT:输入,目的IP 是本机的包
OUTPUT:输出,源IP 是本机的包
FORWARD:转发,穿过本机的包
PREROUTING: 路由前
POSTROUTING: 路由后
案例讲解:
1、防止外网用内网IP 欺骗
iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
3、阻止一个IP 连接本机
iptables -t filter -A INPUT -s 192.168.1.5 -i eth0 -j DROP
4、查看本机的IPTABLES 的所填规则
iptables -L -n
5、清除filter 中所有的规则连接
iptables -F
7、关闭不安全的端口连接本机
iptables -A OUTPUT -p tcp --sport 31337 -j DROP
iptables -A OUTPUT -p tcp --dport 31337 -j DROP
8、开启所需要的端口
22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
80
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
9、禁止一个IP 或者一个IP 段访问服务器端口服务
80 端口
iptables -t filter -I INPUT 2 -s 192.168.5.0/24 -p tcp --dport http -j DROP
FTP 端口
iptables -t filter -I INPUT 2 -s 192.168.7.9 -p tcp --dport ftp -j DROP
10. iptables -A INPUT –s 192.168.100.1 –p udp --dport 53 -j DROP
不允许100.1 进行DNS 域名解析
iptables -A INPUT –s 192.168.100.1 -p tcp --dport 53 -j DROP
不允许100.1 进行DNS 的TCP 的连接
11. iptables -A INPUT –s 192.168.100.1 -p tcp --dport 25 -j DROP
客户机100.1 不能向服务器发邮件
iptables -A INPUT –s 192.168.100.1 -p tcp --dport 110 -j DROP
客户机100.1 不能收邮件
12 文件服务的重定向
iptables –t nat -A PREROUTING -d 192.168.100.2 -p tcp --dport 21 -j
DNAT --to-destination 192.168.200.1
iptables –t nat -A PREROUTING -d 192.168.100.2 -p tcp --dport 20 -j
DNAT --to-destination 192.168.200.1
公网地址-192.168.100.2
13 单独允许服务重定向
Sendmail 源端、目的端分别允许
Iptables –A FORWARD –p tcp --dport 25 –j ACCEPT
Iptables –A FORWARD –p tcp --sport 25 –j ACCEPT
Iptables –A FORWARD –p tcp --sport 110 –j ACCEPT
Iptables –A FORWARD –p tcp --dport 110 –j ACCEPT
VSFTP 源端、目的端分别允许
Iptables –A FORWARD –p tcp --dport 21 –j ACCEPT
Iptables –A FORWARD –p udp --sport 21 –j ACCEPT
Iptables –A FORWARD –p udp --sport 20 –j ACCEPT
Iptables –A FORWARD –p udp --dport 20 –j ACCEPT
14 将由eth0 传送出去的数据源修改为 192.168.10.1
Iptables –t nat -A POSTROUTING –o eth0 –j SNAT –to 192.168.10.1
15 将连接到eth0 的port 的80 口,传送到内部 192.168.20.1
Iptables –t nat –A PREROUTING –I eth0 –p tcp --dport 80 –j DNAT --to
192.168.20.1