安全体系概览:

Firewalls --> TCP Wrappers --> Xinetd --> PAM -- > SELinux --> Server specific


Firewalls: netfilter/iptables

netfilter组件 内核空间,是内核一部分 

iptables组件  用户空间,提供管理防火墙的手段,通过iptables插入、删除、修改规则


OSI七层模型:

应用层    ftp http smtp pop3

表示层      上三层,一般操作系统和应用的功能

会话层


传输层      源端口2222/tcp ---> 目的端口 80/tcp           传输协议TCP,UDP


网络层      源IP x.x.x.x  --->  目的IP y.y.y.y           下四层,数据流层


数据链路层   源MAC 00:50:fc:12:34:56 ---> 目的MAC(网一段主机,网关) 00:50:fc:12:34:59 

物理层


TCP: 面向连接,可靠的传输协议     类似于三次握手,window...

UDP: 非面向连接,不可靠的传输协议


A (封装)---------- (解封装)B




==============iptables================

语法:

iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配后的动作]

              小写         大写      大写                 小写           大写


示例:

iptables -L//查看,默认filter表

iptables -t filter -L

iptables -t nat -L

iptables -t raw -L

iptables -t mangle -L

=================================================================================

常见的操作命令:

-L查看,v详细,n不反解   --line-number

-A追加,放置最后一条

-I插入,默认插入成第一条

-D删除

-F清空flush

-P      设置默认策略policy


匹配的条件:

-s 192.168.2.0/24   源地址

-d 192.168.2.1    目标地址

-p tcp|upd|icmp    协议

-i eth0    input 从eth0接口进入的数据包

-o eth0             output 从eth0出去的数据包

-p tcp --dport 80   目标端口是80,必须和-p tcp|udp 连用


处理方法:

-j ACCEPT允许

-j DROP丢弃

-j REJECT拒绝

-j SNAT源地址转换

-j DNAT目标地址转换

-j LOG写日志

...

=================================================================================

iptables -t filter -L INPUT

iptables -L INPUT

iptables -F INPUT

iptables -F

iptables -t nat -F



操作示例:

iptables -F

iptables -A INPUT -j REJECT//拒绝所以进入filter表INPUT链的所有数据包

iptables -I INPUT -p tcp --dport 5900 -j ACCEPT

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

iptables -I INPUT -p icmp -j ACCEPT

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -nL


针对FTP:连接追踪模块

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -I INPUT -p tcp --dport 21 -j ACCEPT  //打开控制端口

modprobe ip_conntrack_ftp加载连接追踪模块(临时)

lsmod |grep ftp

[root@station230 ~]# vim /etc/sysconfig/iptables-config

IPTABLES_MODULES="ip_conntrack_ftp"




标准流程

===============================================================================

[root@station230 ~]# iptables -F

[root@station230 ~]# iptables -A INPUT -i lo -j ACCEPT

[root@station230 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@station230 ~]# iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT    公司内网

[root@station230 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -j REJECT

[root@station230 ~]# service iptables save

将当前规则保存到 /etc/sysconfig/iptables:                 [确定]

[root@station230 ~]# chkconfig iptables on

[root@station230 ~]# iptables -vnL INPUT

[root@station230 ~]# vim /etc/sysconfig/iptables-config

IPTABLES_MODULES="ip_conntrack_ftp"

[root@station230 ~]# service iptables restart



=======================================================================

小知识:

常见协议的端口 /etc/services

[root@station230 ~]# grep ^http /etc/services

服务协议端口/传输协议

sshssh22/tcp

httphttp80/tcp

https443/tcp

dnsdomain53/udp,53/tcp

mailsmtp25/tcp发信协议

smtps           465/tcp         # SMTP over SSL (TLS)

pop3110/tcp收信协议

pop3s995/tcp

imap143/tcp

imaps993/tcp

dhcpbootps          67/udp          # BOOTP server

nfsnfs2049/tcp

samba137,138,139/tcp

445/tcp

ftpftp21/tcp

ftp-data20/tcp

ntp            ntp123/udp                         # Network Time Protocol

syslog         syslog514/udp

=======================================================================

真实iptables实例:

一些常见允许外网访问的服务:

网站 http 80/tcp; https 443/tcp;

邮件 mailsmtp25/tcp发信协议

smtps           465/tcp         # SMTP over SSL (TLS)

pop3110/tcp收信协议

pop3s995/tcp

imap143/tcp

远程管理: ssh 22/tcp


一些常见不允许外网访问的服务:

文件服务器:

NFS

SAMBA

FTP

[root@station230 ~]# iptables -F

[root@station230 ~]# iptables -A INPUT -i lo -j ACCEPT

[root@station230 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@station230 ~]# iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT

[root@station230 ~]# iptables -A INPUT -j REJECT


外网  =====> ××× =====> 内网FTP,SAMBA,NFS




========================================================================

NAT:


       内网                               NAT服务器                        外网

client(192.168.2.80)--->eth0(192.168.2.10)NAT Server(1.1.1.254)eth1 --> Web(1.1.1.1) 

==SNAT,源地址转换

作用:让内网用户可以通过NAT服务器访问外网

1. iptables

# iptables -t nat -A POSTROUTING -j SNAT --to 1.1.1.1

# service iptables save

当内网的数据包到达POSTROUTING链时,修改数据的源地址1.1.1.1


2. 打开内核的路由转发机制

# sysctl -a |grep ip_forward

net.ipv4.ip_forward = 0

# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

# sysctl -p   立即生效


=============================

echo 0 > /proc/sys/net/ipv4/ip_forward

=============================


测试:所有内网将网关指定NAT服务器的内网地址:

# links  -dump 1.1.1.100

   welcome to china


3. 限制上网

# iptables -A FORWARD -s 192.168.2.168 -j REJECT   //拒绝某个主机上网



===DNAT,目标地址转换

外网用户访问内网服务器(必须以SNAT为基础)

       内网                               NAT服务器                        外网

client(192.168.2.168)<---eth0(192.168.2.10)NAT Server(1.1.1.1)eth1 <-- Web(1.1.1.100)

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.2.168

# iptables -t nat -nL


links -dump 1.1.1.1

links -dump www.uplooking.com(1.1.1.1)




代理服务器:Squid,Nginx


正向代理(包括透明代理) squid nginx

作用:让内网用户上网,缓存(内存,硬盘),加快访问速度,节约通信带宽

             访问控制ACL实现对用户上网行为进行控制(时间、网站、内容...)

     防止内部主机受到×××

反向代理  squid,nginx

作用:给网站加速

==================================================================================

[root@nat-server ~]# iptables -F

[root@nat-server ~]# iptables -t nat -F

[root@nat-server ~]# service iptables save



==squid:

软件包:squid

端口: 3128/tcp默认

配置文件:/etc/squid/squid.conf

日志文件: /var/log/squid



正向代理

client(192.168.2.80)--->eth0(192.168.2.199)squid Server(1.1.1.254)eth1 --> Web(1.1.1.1)

一、配置squid

# yum -y install squid

# vim /etc/squid/squid.conf

http_port 3128//squid监听的端口

cache_mem 16000 MB//设置squid内存缓冲大小

cache_dir ufs /var/spool/squid 50000 16 256//设置squid硬盘缓冲大小

cache_effective_user squid

cache_effective_group squid

dns_nameservers 202.106.0.20 8.8.8.8

cache_mgr [email protected]


===================================================================================

# service squid start

init_cache_dir /var/spool/squid... /etc/init.d/squid: line 62:  5504 已放弃               $SQUID -z -F -D >> /var/log/squid/squid.out 2>&1

启动 squid:/etc/init.d/squid: line 42:  5505 已放弃               $SQUID $SQUID_OPTS >> /var/log/squid/squid.out 2>&1

                                                           [失败]


visible_hostname squid

===================================================================================


# service squid start

# chkconfig squid on

[root@nat-server ~]# netstat -tnlp |grep :3128

tcp        0      0 0.0.0.0:3128         0.0.0.0:*   LISTEN      5526/(squid)  


从客户端测试代理服务器:

浏览器:需要手工设置代理

测试结果:代理服务默认不为任何主机代理



解决方案:

ACL,限制用户访问(时间、目标网站、内容...)   访问控制列表

# vim /etc/squid/squid.conf

/INSERT

方案一:为所有主机代理

acl all src 0.0.0.0/0.0.0.0

http_access allow all


方案二:为部分主机代理

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

acl it_net src 192.168.2.0/24

http_access allow it_net

# service squid reload



案例1:允许192.168.2.0/24网段的主机使用squid

acl it_net src 192.168.2.0/24

http_access allow it_net


案例2: 允许192.168.2.0/24网段的主机使用squid,(周一到周五 9:00-16:00)

acl it_net src 192.168.2.0/24

acl worktime time MTWHF 9:00-16:00

http_access allow it_net worktime


案例3 拒绝主机

acl wangcheng src 192.168.2.168

http_access deny wangcheng


案例4 禁止用户访问URL包含qq.com网站,-i忽略大小写

acl disable_web url_regex -i qq.com

http_access deny disable_web


案例5 禁止用户下载*.mp3 *.exe *.iso

acl disable_down urlpath_regex -i \.mp3$ \.exe$ \.iso$

http_access deny disable_down


=============================================================

acl all src 0.0.0.0/0.0.0.0

acl it_net src 192.168.2.0/24

acl hr_net src 192.168.3.0/24

acl worktime time MTWHF 9:00-16:00

acl disable_web url_regex -i qq.com

acl disable_down urlpath_regex -i \.mp3$ \.exe$ \.iso$

acl wangcheng src 192.168.2.168


http_access deny wangcheng

http_access deny disable_down

http_access deny disable_web

http_access allow it_net

http_access allow hr_net worktime

http_access deny all

=============================================================



透明代理(以正向代理为基础)

代理服务器:IP 192.168.2.10

          http_port: 3128

1. iptables数据包重定向

[root@squid-server ~]# iptables -t nat -F

[root@squid-server ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 3128

[root@squid-server ~]# service iptables save


2. squid支持透明代理

[root@squid-server ~]# vim /etc/squid/squid.conf

http_port 3128 transparent

[root@squid-server ~]# service squid reload


注意:客户端必须将数据包发给代理服务器

1. 如果客户端和代理服务器在同网段,将网关指向代理服务器

2. 如果客户在不同的vlan中,通过网络设备策略将所有用户访问外网的数据包发至代理服务器




反向代理

============================

[root@squid-server ~]# service iptables stop

client(192.168.2.115)--->     前端反向代理服务器(192.168.2.10) --> Web(192.168.2.108)

本身已经可以访问Internet前端反向代理服务器(192.168.2.168)

        前端反向代理服务器(192.168.2.169)

        。。。。。。。。。。。。。。。

一、配置squid

# service iptables stop

# yum -y install squid

# vim /etc/squid/squid.conf

cache_mem 16000 MB//设置squid内存缓冲大小

cache_dir ufs /var/spool/squid 50000 16 256//设置squid硬盘缓冲大小

cache_effective_user squid

cache_effective_group squid

dns_nameservers 202.106.0.20 8.8.8.8

cache_mgr [email protected]


http_port 80 vhost//反向代理

cache_peer 192.168.2.108 parent 80 0//源站

acl all src 0.0.0.0/0.0.0.0

http_access allow all


cache_peer Web服务器地址 服务器类型 http端口 icp端口 选项

cache_peer 192.168.2.108 parent 80 0


=============================================================================

给一个源站做反向代理

cache_peer 192.168.2.108 parent 80 0


给多个源站做反向代理

cache_peer 192.168.2.100 parent 80 0 originserver weight=1 name=tianyun

cache_peer 192.168.2.120 parent 80 0 originserver weight=1 name=uplooking

cache_peer 192.168.2.130 parent 80 0 originserver weight=1 name=126

cache_peer_domain tianyun www.tianyun.com

cache_peer_domain uplooking www.uplooking.com

cache_peer_domain 126 www.126.com

==============================================================================

如果启动失败,检查80端口是否被占用



从客户端测试:必须使用域名访问

/etc/hosts

192.168.2.10www.tianyun.com www.uplooking.com www.126.com

反向代理服务器





CDN

========================================

Content Delivery Network 内容分发网络

智能DNS(view) + 反向代理(squid,nginx)


为什么要使用CDN?

1. 解决南北互通的问题

2. 访问加速

3. 降低运营成本

4. 提高网站可靠性

5. 防DDOS×××




mailq

postqueue -p 查看邮件队列


postqueue -f 强制刷新一下