In mijn iptables scripts wil ik 2 dingen doen:
1. SNAT over meerdere externe ip's
2. Packet filtering op uitgaand verkeer zodat gebruikers alleen gebruik kunnen maken van www en niet dingen zoals MSN messenger, ICQ etc. kunnen gebruiken.
In mijn script heb ik 't volgende staan: (eth0 = intern, eth1 = extern)
# Open high reconnect ports voor ESTABLISHED,RELATED verbindingen op externe interface (eth1)
iptables -A INPUT -p tcp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -i eth1 -j ACCEPT
iptables -A INPUT -p udp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -i eth1 -j ACCEPT
# Alle andere pakketen op eth1 droppen we
iptables -A INPUT -i eth1 -j DROP
# NAT translatie naar meerdere externe IP adressen
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o eth1 -p tcp -j SNAT --to-source 61.33.48.60-61.33.48.62
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o eth1 -p udp -j SNAT --to-source 61.33.48.60-61.33.48.62
# Uitgaande pakket filtering
iptables -A OUTPUT -p udp --destination-port 53 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Drop de rest
iptables -A OUTPUT -j DROP
Dit werkt echter niet helemaal zoals ik wil. De SNAT naar meerdere externe ip adressen werkt perfect alleen de packet filtering wil 'ie niet doen.
De interne gebruikers kunnen gewoon verbinding maken met alle poorten (MSN, ICQ, SMTP, POP3 etc.) en niet alleen maar met de DNS en WWW poorten zoals ik zou willen, alleen vanaf de server kan ik nu nog maar gebruik maken van de DNS en WWW poorten. Ik vermoed dat dit komt omdat op de server geen NAT translatie plaatsvind maar dat 'ie alleen maar routeert en dat 'ie dan wel de OUTPUT chain pakt terwijl hij dat bij de SNAT niet doet.
Heeft iemand enig idee hoe de SNAT en de packet filtering beide te laten werken voor interne gebruikers?
Ik heb overigens al geprobeerd om de OUTPUT regels in de OUTPUT chain van de NAT tabel te plaatsen maar dat resulteerd in hetzelfde verhaal, bv:
iptables -A OUTPUT -t nat -p tcp --destination-port 80 -j ACCEPT
1. SNAT over meerdere externe ip's
2. Packet filtering op uitgaand verkeer zodat gebruikers alleen gebruik kunnen maken van www en niet dingen zoals MSN messenger, ICQ etc. kunnen gebruiken.
In mijn script heb ik 't volgende staan: (eth0 = intern, eth1 = extern)
# Open high reconnect ports voor ESTABLISHED,RELATED verbindingen op externe interface (eth1)
iptables -A INPUT -p tcp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -i eth1 -j ACCEPT
iptables -A INPUT -p udp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -i eth1 -j ACCEPT
# Alle andere pakketen op eth1 droppen we
iptables -A INPUT -i eth1 -j DROP
# NAT translatie naar meerdere externe IP adressen
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o eth1 -p tcp -j SNAT --to-source 61.33.48.60-61.33.48.62
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o eth1 -p udp -j SNAT --to-source 61.33.48.60-61.33.48.62
# Uitgaande pakket filtering
iptables -A OUTPUT -p udp --destination-port 53 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp --destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Drop de rest
iptables -A OUTPUT -j DROP
Dit werkt echter niet helemaal zoals ik wil. De SNAT naar meerdere externe ip adressen werkt perfect alleen de packet filtering wil 'ie niet doen.
De interne gebruikers kunnen gewoon verbinding maken met alle poorten (MSN, ICQ, SMTP, POP3 etc.) en niet alleen maar met de DNS en WWW poorten zoals ik zou willen, alleen vanaf de server kan ik nu nog maar gebruik maken van de DNS en WWW poorten. Ik vermoed dat dit komt omdat op de server geen NAT translatie plaatsvind maar dat 'ie alleen maar routeert en dat 'ie dan wel de OUTPUT chain pakt terwijl hij dat bij de SNAT niet doet.
Heeft iemand enig idee hoe de SNAT en de packet filtering beide te laten werken voor interne gebruikers?
Ik heb overigens al geprobeerd om de OUTPUT regels in de OUTPUT chain van de NAT tabel te plaatsen maar dat resulteerd in hetzelfde verhaal, bv:
iptables -A OUTPUT -t nat -p tcp --destination-port 80 -j ACCEPT