1 需求:只针对filter表,预设INPUT 链DROP ,其他两个链ACCEPT,然后针对
192.169.188.0/24开通22端口,对所有网段开放80端口,21端口。
我们编写shell脚本实现
vim /usr/local/sbin/iptalbes.sh
#!/bin/bash
ipt="/usr/sbin/iptables"
$ipt -F # 清空现有规则
$ipt -P INPUT DROP # 预设INPUT 链规则
$ipt -P OUTPUT ACCEPT # 预设 OUPUT 链规则
$ipt -P FORWARD ACCEPT # 预设FORWARD链规则
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #疏通传输环境
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT #放行指定ip的22端口
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT #放行80端口
$ipt -A INPUT -p tcp --dport 21 -j ACCEP #放行21端口
2.关于icmp 的一个小应用
为了服务器安全我们通常不希望陌生主机ping我们的网络,因此有必要通过防火墙机制实现一个禁ping操作iptables -I INPUT -p icmp --icmp-type 8 -j DROP
上面命令可以不让任何机器ping我们的主机,但是通常我们要检测内网,所以应该在此基础上可以放行内网ping操作,可以继续添加下面规则iptables -I INPUT -p icmp --icmp-type 8 -i eth0 -s 10.0.0.0/24 -j ACCEPT
nat表的应用很大程度上实现了一个路由器的功能。
案例1:假设你的机器有两块网卡,eth0 和eth1,其中eth0的ip为10.0.2.68,eth1的ip为192.168.1.1。eth0链接了互联网,但是eth1没有链接。现在又另外一台机器,ip为192.168.1.2和eth1是互通的,那么如何设置才能让ip为192.168.1.2这台机器上外网了?
我们配置nat表的规则即可
1 打开路由转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
2 配置路由规则iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
3 配置网关
B上设置网关为192.168.100.1
备注 设置IP和掩码ifconfig eth0 192.168.5.40 netmask 255.255.255.0
设置网关route add default gw 192.168.5.1
route -n
查看网关
案例2:A机器可以上网,B机器只能和C通信,让A机器可以直接连通B机器的22端口。
以我自己的环境为例,A机器为windos主机,ip为192.168.226.1
B机器为vmware里面的linux1,有两个网卡,ens33 ip为192.168.226.129
ens37为192.168.100.1
C机器为虚拟机linux2 ,ip为192.168.100.100
现在怎么配置可以让主机ssh连接linux2 呢
1.依旧是打开路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward
2配置路由规则
A上执行iptables -t nat -A PREROUTING -d 192.168.226.129 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
在路由前创建一个映射端口,指明从哪里进,进到哪里
A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.226.129
在路由后添加源ip地址,目的ip地址对应关系,指明从哪里出
3 配置网关
B上设置网关为192.168.100.1
最后,ssh链接 192.168.226.129 port 1122 就可以登陆到 C机器
原文地址:http://blog.51cto.com/12606610/2090086