iptables外面的文章太多了,我这里就把我自己的过程记录一下。
iptables的应用场合太多。我这里的使用是。
国外vps,安装iptables,
1:需要允许ssh远程访问,
2:开放常用的端口,web,mail等端口。打开1194 vpn端口。
3:希望openvpn,启用NAT的功能。
安装iptables
yum install iptables
安装完后
# ll /etc/sysconfig/
total 60
-rw-r--r-- 1 root root 291 Aug 1 06:55 authconfig
drwxr-xr-x 2 root root 4096 Aug 1 06:54 cbq
drwxr-xr-x 2 root root 4096 Mar 11 14:12 console
-rw-r--r-- 1 root root 1068 Nov 13 2008 init
-rw------- 1 root root 1740 May 24 2008 iptables-config
drwxr-xr-x 2 root root 4096 Mar 11 14:12 modules
-rw-r--r-- 1 root root 634 Nov 13 2008 netconsole
-rw-r--r-- 1 root root 112 Aug 1 06:55 network
drwxr-xr-x 2 root root 4096 Aug 1 06:55 network-scripts
drwxr-xr-x 4 root root 4096 Mar 11 14:12 networking
-rw-r--r-- 1 root root 544 Nov 13 2008 readonly-root
drwxr-xr-x 2 root root 4096 Aug 1 06:54 rhn
-rw-r--r-- 1 root root 513 Jan 22 2008 rsyslog
-rw-r--r-- 1 root root 610 May 24 2008 syslog
-rw-r--r-- 1 root root 47 Apr 17 19:45 udev-stw
你会发现/etc/sysconfig/ 目录下,并没有iptables这个文件
查看当前规则
#iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
应该就是没有任何的限制。
保存当前的规则
# /etc/rc.d/init.d/iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
这个时候,/etc/sysconfig/iptables这个文件就有了。
# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Sat Aug 1 07:08:03 2009
*filter
:INPUT ACCEPT [141:21585]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [14:5380]
COMMIT
# Completed on Sat Aug 1 07:08:03 2009
添加SSH端口
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
查看一下设置的规则
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
不过这个规则,没有保存,重新启动机器,就会消失。
这个时候,你查看一下/etc/sysconfig/iptables
cat /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Sat Aug 1 07:08:03 2009
*filter
:INPUT ACCEPT [141:21585]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [14:5380]
COMMIT
# Completed on Sat Aug 1 07:08:03 2009
保存规则
# service iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
这个时候
cat /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Sat Aug 1 07:14:27 2009
*filter
:INPUT ACCEPT [554:85824]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [107:21008]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT
# Completed on Sat Aug 1 07:14:27 2009
设定预设规则
这是关键的一步,防火墙的规则,一般做法,拒绝所有,然后开放相应的服务。
不过我们拒绝所有前,必须把ssh端口打开,否则就无法ssh访问,除非你只机器前面
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
这个时候,服务器上,就只打开了22端口,别的都禁止访问。
/etc/rc.d/init.d/iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
这个时候,就把规则保存起来。
NAT转发
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to 66.160.197.199
这条规则是给openvpn用的。记录一下。
参考文章
http://www.qudong.com/OS/Linux/2009/0728/42174.html
http://www.redflag-linux.com/bbs/read.php?15,53207
http://blog.chinaunix.net/u/22249/showart_154578.html
Q:一局域网192.168.1.0/24,有web和ftp服务器192.168.1.10、192.168.1.11,网关linux,内网eth0,IP为192.168.1.1,外网eth1,IP为a.b.c.d,怎样作NAT能使内外网都能访问公司的服务器?
A:# web
# 用DNAT作端口映射
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
# 用SNAT作源地址转换(关键),以使回应包能正确返回
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
# 一些人经常忘了打开FORWARD链的相关端口,特此增加
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
# ftp
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
# 用DNAT作端口映射
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT
# 用SNAT作源地址转换(关键),以使回应包能正确返回
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1