linux 跟我一起学9
zy66289214
|
1#
zy66289214 发表于 2007-07-28 21:27
linux 跟我一起学9
linux跟我一起学9
防火墙的配置和nat地址转换 1.[root@zy root]# iptables -A INPUT -p icmp -j DROP 我解释下 iptables 就是防火墙规则了 -A 就是添加一条规则了 input为进的规则 还有出的规则为output -p 就是选择的一个协议 icmp是协议的一中 它包括tcp udp icmp等 -j 就是对此规则的选择 drop 就是放弃 ,accept 就是接受 ,reject弹回 ,log 记入日志里 2.规则加进去之后我们可以用[root@zy root]# iptables -L 来查看防火墙规则 [root@zy root]# iptables -L -n 以数字的格式显示 [root@zy root]# iptables -F 清空防火墙规则 [root@zy root]# iptables --help |more 查看iptables'的帮助文档 [root@zy root]# iptables -L -n --line-numbers 查看规则的编号 3.现在我们做一个小实验 [root@zy root]# ftp 192.168.1.144 Connected to 192.168.1.144 (192.168.1.144). 220 Welcome to zy FTP service. Name (192.168.1.144:root): 结果证明是可以登录的 我们写入这条命令 [root@zy root]# iptables -A INPUT -p tcp -s 192.168.1.102 -d 192.168.1.144 --dport 21 -j DROP 然后从新登录ftp发现失败了 其中-s指的是愿主机 -d 是指的目标主机 --dport 指的是目标端口 如果我们想从新可以登录就要删除该条规则 [root@zy root]# iptables -L -n --line-numbers 发现其规则号为2 num target prot opt source destination 1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 2 DROP tcp -- 0.0.0.0/0 192.168.1.144 tcp dpt:21 3 ACCEPT tcp -- 0.0.0.0/0 192.168.1.102 tcp dpt:21 [root@zy root]# iptables -D INPUT 2 这样就可以删除掉该规则了 -D是删除的命令 4.然后让我们清除配置规则,来从新定义规则 [root@zy root]# iptables -F 清空防火墙规则 首先我们要加入ssh规则,因为我是用windows访问linux的,所以一定要先把次规则打入 [root@zy root]# grep ssh /etc/services 查看ssh服务的端口为22 [root@zy root]# iptables -A INPUT -p tcp -d 192.168.1.144 --dport 22 -j ACCEPT 允许所有的客户机从远程登录192.168.1.144的22端口 [root@zy root]# iptables -A OUTPUT -p tcp -s 192.168.1.144 --sport 22 -j ACCEPT 允许192.168.1.144的22 端口出去 [root@zy root]# iptables -L -n --line-numbers 查看下防火墙的规则 5,防火墙的默认规则是允许所有的,所有我们要把它改为默认拒绝所有需要什么服务再加上 [root@zy root]# iptables -P INPUT DROP [root@zy root]# iptables -P FORWARD DROP [root@zy root]# iptables -P OUTPUT DROP 三个规则一起关掉 [root@zy root]# netstat -nal 虽然还是开了很多端口但是起作用的端口就只有22了只有ssh协议可以进来了 [root@zy root]# service iptables save 将当前规则保存到 /etc/sysconfig/iptables: [ 确定 ] 这样这条规则就保存到iptables中了 开机从启就会执行这条规则的 6.现在我们做一个实验把web服务加进去 [root@zy root]# iptables -A INPUT -p tcp -d 192.168.1.144 --dport 80 -j ACCEPT [root@zy root]# iptables -A OUTPUT -p tcp -s 192.168.1.144 --sport 80 -j ACCEPT [root@zy root]# iptables -L -n [root@zy root]# service iptables save 7.加入dns服务器的端口 [root@zy root]# grep domain /etc/services domain 53/tcp # name-domain server domain 53/udp [root@zy root]# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT 请求对方主机解析 [root@zy root]# iptables -A INPUT -p udp --sport 53 -j ACCEPT 对方发来回应解析 这样dns解析也就完成了 [root@zy root]# service iptables save [root@zy root]# host www.sina.com 我的解析是成功的 如果你们不成功请检查下 [root@zy root]# more /etc/resolv.conf 8.如果你自己做自己的dns服务器的访问 你需要加入如下的两条命令 [root@zy root]# iptables -A INPUT -p udp --dport 53 -j ACCEPT [root@zy root]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT [root@zy root]# iptables -L -n 9.打开本机的互联设备 [root@zy root]# netstat -tnl 发现有127.0.0.1的回环设备都是要打开的 [root@zy root]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 把所有原是127.0.0.1的,目标是127.0.0.1的全部打开 [root@zy root]# ^IN^OUT 我们使用命令替换功能 iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT [root@zy root]# iptables -L -n 10.为了安全期间我们要把防火墙做的更严密些,例如22号端口对于给我发送过请求的包,我才给于回应,没给我发送请求的包我是不与理会的,这样做的原因是预防系统漏洞产生的,主动发包发出去 [root@zy root]# iptables -A OUTPUT -p tcp -s 192.168.1.144 --sport 22 -m state --state ESTABLISHED -j ACCEPT -m 是扩展条间 state 是匹配状态 --state ESTABLISHED 状态是链接过, [root@zy root]# iptables -L -n 然后我们再删除 [root@zy root]# iptables -D OUTPUT 5 即规则是ACCEPT tcp -- 192.168.1.144 0.0.0.0/0 tcp spt:22 的这一条 切记一定要先建好扩展规则,然后在删除负责ssh链接会断开 [root@zy root]# service iptables save 同理80端口也一样要设定 不允许80端口主动发包给远端机子 [root@zy root]# iptables -A OUTPUT -p tcp -s 192.168.1.144 --sport 80 -m state --state ESTABLISHED [root@zy root]# iptables -L -n 然后我们再删除 [root@zy root]# iptables -D OUTPUT 1 即ACCEPT tcp -- 192.168.1.144 0.0.0.0/0 tcp spt:80 的这条规则 [root@zy root]# iptables -L -n [root@zy root]# service iptables save 上面的这些规则都是设定我们为服务器的 但作为客户机同样要进行防护,道理是一样的 ,配置也差不多,大家自己修改下了 11,前面我们都是配置了input和output 没有配置forward forward是发往外网的,当你用到路由器的时候才需要配置forward 当你需要局域网上的其他主机通过你才能连接到互联网上的时候你需要把forward打开 [root@zy root]# iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT 这里我允许局域网192.168.1.0 这个网段的地址通过我访问互联网 [root@zy root]# iptables -A FORWARD -d 192.168.1.0/24 -j 是允许互联网回应给内部主机 记住就算配置了forward 也要对一个文件修改下,否则forward是不起作用的,也就是打开内核的转换文件 [root@zy root]# echo "1" > /proc/sys/net/ipv4/ip_forward 另外还要保存这个值,我们需要打开 [root@zy root]# vi /etc/sysctl.conf net.ipv4.ip_forward = 1 wq [root@zy root]# iptables -L -n 好了 ,但是现在还不能访问局域网的主机还是不能访问外网的,因为它是内网的地址,访问外网还需要做一个nat地址转换 12. 学习nat地址转换 nat地址转换在网关上进行改变的 [root@zy root]# iptables -t nat -L -n -t nat查看nat转换表 我们假设有一个环境 主机A 的ip 地址是 192.168.1.102 局域网内网 主机B 是双网卡的ip 地址是 10.0.0.254 , 192.168.1. 144 可以把主机b看作一个路由器 主机C 的ip是 10.0.0.1 外网 [root@zy root]#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 10.0.0.254 -t nat是 nat类型的转换 -A POSTROUTING 局域网的182.168.1.0 /24 通过源地址直接转换为10.0.0.254 这个10.0.0.254是一个静态的地址,但是如果我们是拨号上网的话,这个地址 就不能固定下来了 [root@zy root]# iptables -t nat -L -n Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.1.0/24 0.0.0.0/0 to:10.0.0.254 [root@zy root]#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE 其中MASQUERADE是一个动态获取网关地址的命令 这样我们就可以动态的获取到地址, 我们假设另一个环境 主机A 的ip 地址是 192.168.1.102 外网 主机B 是双网卡的ip 地址是 10.0.0.254 , 192.168.1. 144 可以把主机b看作一个路由器 主机C 的ip是 10.0.0.1 局域网内网的web服务器 我们就要加入这样的一条命令 [root@zy root]# iptables -t nat -A PREROUTING -d 192.168.1.0/24 -p tcp -dport 80 -j DNAT --to-destination 10.0.0.254 这样外网访问内网的web服务器就首先进入10.0.0.254这个路由器了 是男人看了就回帖,如果是女人留下你的联系方法,如果是人妖对不起地球人不欢迎你. |