1.开启路由转发功能
临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
默认ip_forward值为零, 不允许转发,改为1就可以转发了。修改过后就马上生效,即内核已经打开ip转发功能。
永久开启
sudo vim /etc/sysctl.conf #永久开启路由转发功能
net.ipv4.ip_forward=1
sudo sysctl -p
sudo /etc/init.d/procpsrestart #重启procps服务
(# sysctl –p)
iptables [-t 表名] 操作符 [规则链名] [规则]
对链的操作就那么几种,
-I 插入
-A 追加
-R 替换
-D 删除
-L 列表显示
-F 清除链中的所有规则
-P 设置链的默认动作ACCEPT REJECT DROP
-Z 计数器清零
-N 定义一个新的规则链
-X 删除定义的规则链
-I 将会把规则放在第一行,-A将会放在最后一行
针对规则的操作:
-A 追加
-I 插入
-D 删除
例子
iptables -t filter -A FORWARD -s 10.1.1.11 -d 202.1.1.1 -j ACCEPT
上面的命令意思为:追加一个规则至filter表中的FORWARD链尾,允许(-j ACCEPT)源地址为10.1.1.11目的地址为202.1.1.1的数据包通过。其中-t后面跟的是表名,在-A后面跟Chain名,后面的小写的 -s为源地址,-d为目的地址,-j为处理方向。
在iptables中,默认的表名就是filter,所以这里可以省略-t filter直接写成:
iptables -A FORWARD -s 10.1.1.11 -d 202.1.1.1 -j ACCEPT
-s 匹配源地址
-d 匹配目的地址
-i 入接口匹配
-o 出接口匹配
--sport 源端口匹配
--dport 目的端口匹配
- j 跳转,也就是包的方向
其中还有一个!参数,使用!就是取反的意思。
-s这个参数呢就是指定源地址的,如果使用这个参数也就是告诉netfilter,对于符合这样一个源地址的包怎么去处理,可以指定某一个单播ip地址,也可以指定一个网络,如果单个的ip地址其实隐含了一个32位的子网掩码,比如-s 10.1.1.11 其实就是-s 10.1.1.11/32 同样我们可以指定不同的掩码用以实现源网络地址的规则,比如一个C类地址我们可以用-s 10.1.1.0/24来指定。
-d参数与-s格式一样。
-i参数是指定入接口的网络接口,比如我仅仅允许从eth3接口过来的包通过FORWARD链,就可以这样指定 iptables -A FORWARD -i eth3 -j ACCEPT
-o是出接口,与上同
iptables -A INPUT -i lo -j ACCEPT