linux学习笔记8-网络安全-防火墙

来源:互联网 发布:看图用什么软件好 编辑:程序博客网 时间:2024/06/07 05:39
 

络安全-火墙

火墙的原理

火墙的作用

要作用:过滤两个网络之间的数据包

INERNET------fire wall------server------LAN


Linux内核的Netfilter

Linux内核空间和应用程序空间是不一样的

核空间是受保护的,任何进出服务器的数据包都要经过内核处理

有发送给本地的数据包都要经过INPUT

何从本机产生的数据包发送给其它人都要经过OUTPUT

一个数据从本机路由转发,目标不是自己,是发给别人的将从FORWARD经过

INPUT/OUTPUT保护的是本机FORWARD保护的是局域网用户


过滤原理

个数据包要经过本地的路由,要判断怎么走,ROUTING是非常重要的,它决定了要怎么走

果一个包和我本地网卡地址一样,本地可以收到,进入INPUT,否则FORWARD

果一个包是本地产生的,发出去的经过OUTPUT

过滤就是在这三个地方设置条件,设置障碍,阻止或通过数据包,及设置包的处理方式

的处理方式

iptable -A INPUT -p icmp -j DROP

包的处理方式常见的有目标(Target) 丢弃(DROP) 接受(ACCEPT) (弹回)REJECT 日志(LOG)

iptables命令

iptables -A INPUT -p icmp -j DROP 增加一个过滤规则

ping 192.168.0.101

iptables -L -n查看过滤规则

iptables -F清空过滤规则

iptables --help | more

iptables -L -n –line-number


加一条规则把拒绝所有访问21端口的数据包

iptables -A INPUT -p tcp -d 192.168.0.101 --dport 21 -j DROP

iptables -F修改的时候要把防火墙的门全部关起来 然后一个一个端口打开

iptables -L -n –line-numbers

假设我们一个服务器只开启一个http

么我们要开启http/ssh(远程管理)

有的http 端口grep http /etc/services


打开ssh  grep ssh /etc/services

iptables -A INPUT -p tcp -d 192.168.0.101 --dport 22 -j ACCEPT 接收进来,目标IP是本地IP,目标端口是22

iptables -A OUTPUT -p tcp -s 192.168.0.101 --sport 22 -j ACCEPT 发送出去,源IP是本地IP,源端口是22


iptables -L -n 

iptables -P INPUT DROP改变防火墙的默认策略为DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP



iptables -A INPUT -p tcp -d 192.168.0.101 --dport 80 -j ACCEPT

iptables -A OUTPUT -p tcp -s 192.168.0.101 --sport 80 -j ACCEPT

iptables -L -n

iptables -L -n --line-numbers

netstat -tnl 就算本地开启了很多服务,但只有2280端口可以被访问到

service iptables save保存当前的设置或用iptables-save > /etc/sysconfig/iptables


于作何一个服务器来说都少不了DNS解析请求,自己作为客户机

grep domain /etc/services 搜索域名服务的端口号

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT DNS解析回应,目标端口是53

iptables -A INPUT -p udp --sport 53 -j ACCEPT 请求DNS解析,源端口是53 

查客户机DNS服务器配置

more /etc/resolv.conf

host www.redhat.org.cn

如果这台服务器本身也是DNS服务器

iptables -A INPUT -p udp --dport 53 -j ACCEPT 接收来自别的机器的DNS解析请求

iptables -A OUTPUT -p udp --sport 53 -j ACCEPT这台DNS服务器发送DNS解析回应

iptables -D INPUT 5删除在INPUT上的第5条规则

果这台服务器也要连上其它服务器的SSH

目前为止,在本机访问本机的服务给忽略

本机上,有很多服务都守护在127.0.01上,所以我们要打开本地的回环设备

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

^IN^OUT命令替换功能

iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

service iptables save

在我们注意一下22端口

Chain INPUT (policy DROP)

1 ACCEPT tcp -- 0.0.0.0/0 192.168.0.101 tcp dpt:22

Chain OUTPUT (policy DROP)

1 ACCEPT tcp -- 192.168.0.101 0.0.0.0/0 tcp spt:22

所有进来的包都要通过22端口

有出去的包都要通过22端口,但是如果由于系统漏洞或是病毒,从22端口主动送出包出去,而不是通过请求进来的包回应的,这时就会出现比较大的问题

以我们要增加一条规则看这个包是不是别人请求我,我回应别人的

iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -D OUTPUT 1删除第一条规则

iptables -n -L --line-numbers

Chain OUTPUT (policy DROP)

6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22 state ESTABLISHED

80端口也是一样

iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

service iptables save


为客户机访问别人的SSH也是有问题的

iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT从客户机发送出去的包,肯定被无条件接受

iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT接受别人的服务

SSH回应如果有病毒,是主动发给本客机的,就出现问题了,这时加上必须是我请求过SSH服务数据包回应的


LOG目标

iptables -A INPUT -p tcp –dport 22 -j LOG –log-level 5 –log-prefix “IPTABLES”

/etc/syslog.conf

注意:日志级别5要跟syslog.conf中的级别一致。级别可以通过syslogmanual帮助获得。


iptables -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "iptable:"

vi /etc/rsyslog.conf

kern.=notice /var/log/firewall.log

里为什么是notice

man syslog查看消息的级别

#define KERN_EMERG "<0>" /* system is unusable */

#define KERN_ALERT "<1>" /* action must be taken immediately */

#define KERN_CRIT "<2>" /* critical conditions */

#define KERN_ERR "<3>" /* error conditions */

#define KERN_WARNING "<4>" /* warning conditions */

#define KERN_NOTICE "<5>" /* normal but significant condition */

#define KERN_INFO "<6>" /* informational */

#define KERN_DEBUG "<7>" /* debug-level messages */

防火墙中我们定的级别是5,所以对应的内核是notice

iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

iptables -n -L –line-number

iptables -D INPUT 8

iptables -I INPUT 6 -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "iptable:"

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

iptables -D INPUT 1 把前拥同样规则的移到日志后面

service iptables save

tail /var/log/firewall.log -f


NAT地址转换

http://www.netfilter.org/

iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT允许本地互联网访问

iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT

这样还不行,还要打开内核里的转发文件

more /proc/sys/net/ipv4/ip_forward

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

时只能临时生效,若服务器重启,这个值又变成0

vi /etc/sysctl.conf

# Controls IP packet forwarding

net.ipv4.ip_forward = 1

service iptables save

时我们还是不能用,因为局域网通过本机转发到互联网上,网络上的地址并不知道本地局域网的IP

以我们要通过NAT

iptables -t nat -L -n


NetfilterNAT


核空间---->PREROUTING---->ROUTING---->FORWARD---->POSTROUTING


SNAT发生在POSTROUTING

PREROUTING---->FORWARD---->POSTROUTING


destination: 11.22.33.1:22 destination: 11.22.33.1:22

source: 10.0.0.1:<port> source: 11.22.33.44:<port>

proto: tcp proto: tcp

机地址:

eth0: 10.0.0.254

eth1: 11.22.33.44


SNAT应用

10.0.0.241 eth0:10.0.0.254 /eth1:192.168.0.254 192.168.0.1

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT –to-source 192.168.0.254


IP:10.0.0.241 getway: 10.0.0.254 subnet mask:255.255.255.0 

ping 192.168.0.1若能ping通,说明访问成功

实际的运用中

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE支持动态的翻译

来时自动找到源IP

iptables -t nat -F


DNAT发生在PREROUTING

PREROUTING---->FORWARD---->POSTROUTING


destination: 11.22.33.44:22 destination: 10.0.0.1:22

source: 11.22.33.1:<port> source: 11.22.33.1:<port>

proto: tcp proto: tcp

机地址:

eth0: 10.0.0.254

eth1: 11.22.33.44


DNAT应用

10.0.0.241 eth0:10.0.0.254 /eth1:192.168.0.254 192.168.0.1

iptables -t nat -A PREROUTING -d 10.0.0.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1

192.168.0.1这是一台实际的服务器,不让访问者10.0.0.241看到,访问者看到只是一个防火墙